Webhacking.kr 2번
2번 문제 페이지 소스를 보면 시간 값이 주석으로 나타난다.
쿠키를 보면 세션 값 이외 "time" 값이 추가되었다.
"time" 값을 참으로 설정한다.
쿠키의 "time" 값이 참인 경우 시간값 끝부분이 '1' 로 변한다.
"time" 값을 거짓으로 설정한다.
쿠키의 "time" 값이 거짓인 경우 시간값 끝부분이 '0' 으로 변한다.
"time" 값이 인젝션 포인트 인것은 확실하니 인젝션에 자주 사용되는 함수가 필터링 되는지 확인한다.
함수가 필터링 되면 주석에서 시간값이 아예 사라진다.
2번 문제의 상단 메뉴 중 "Board"로 가면 글이 하나 있다.
그리고 "FreeB0aRd" 라는 문자열이 보이는데 웹 해킹은 게싱("Guessing") 또한 중요하기 때문에 해당 문자열을 데이터베이스의 테이블 값으로 추정할 수 있다.
그런데 비밀번호 걸려있다.
비밀번호가 걸린 부분의 소스를 보면 "name" 값이 "Password"로 되어있는데 아마 "FreeB0aRd" 테이블의 컬럼 이름 값으로 추정할 수 있다.
(구글링으로 확인할 결과 게싱한 테이블, 컬럼 값이 맞음)
쿠키의 "time" 값을 위와 같이 세팅한다. 만약 "Password"의 길이가 100글자 미만이라면 참 값이 리턴될 것이다.
끝 부분이 '1' 인것을 보아 "Password"의 길이는 100글자 미만이다.
* 그렇다면 이제 ascii, left, mid, right, substring 등의 함수를 이용해서 비밀번호를 알아내는 코드를 작성한다.
스크립트를 통해 알아낸 비밀번호를 입력한다.
"admin", "manual"을 클릭하면 모두 같은 곳으로 이동하는데 압축 파일이 하나 받아진다.
풀려고 하니 비밀번호가 걸려 있다.
(무작위 대입으로 풀어도 되긴 된다)
2번 문제 상단 메뉴의 용 그림을 누르면 관리자 페이지로 갈 수 있다.
관리자 페이지도 비밀번호가 필요하다.
게싱을 통해 테이블명("admin"), 컬럼명("password)"를 추측한다.
쿠키 "time" 값을 위와 같이 세팅한다.
참이 리턴된다.
* 역시 이전 board 게시판의 비밀번호를 알아낼 때와 마찬가지로 코드를 작성한다.
알아낸 비밀번호를 입력한다.
압축 해제에 필요한 비밀번호를 얻을 수 있다.
비밀번호 입력!
게시판에 있던 비밀 글의 비밀번호가 나타난다.