webhacking.kr challenge 7
auth라는 버튼이 있어 눌러봤더니 역시나 접근 거부 창이 떠서 페이지 소스 보기를 했다.
주석으로 달린 걸 읽어보니 val=2와 index.phps가 있었다. 원래 url에 index.php?val=1이라는 부분을 index.phps?val=2로 수정했더니 소스를 보여주는 창으로 이동했다.
일단 각주에 db엔 val이 존재하지 않는 다면서 union을 사용하라 써있었다. union은 sql에서 2개 이상의 조건을 함께 묶을 때 사용한다.
val로 받은 변수를 go라는 변수에 넣는다. 이 변수에를 다시 ck라는 변수에 넣어 *과 /를 제거한다. 그리고 if 문을 통해 특정 문자가 있을 경우 접근 거부를 띄우거 종료한다. ck에는 공백이 있어서도 안된다.
그 다음은 1부터 5까지 랜덤으로 변수를 만들어 내 나온 숫자에 따라 if문을 실행한다. 각 if 문에서는 mysql_query를 통해 결과를 내고 이를 result변수에 저장한다. result를 배열로 만들어 data라는 변수에 저장하고 만약 data[0]이 2라면 문제를 푸는데 성공하는 것이다.
if(!$go)라는 조건이 있어서 val값은 0으로 정했다. 그리고 union을 써주고 select 2라는 걸 url 창에 써야 하는데 공백이 걸리니 줄바꿈 %0A로 대신했다. 2라는 숫자도 걸리기 때문에 이를 대신 할 수 있는 3-1로 했다. 수식을 사용하는 건 좋지만 조건에 명시된 *과 /는 써선 안된다. val=0) 이렇게 괄호를 써줬는데 이는 rand==1일 때 해결하기 위한 방안이다. 맨 끝에는 #를 썼는데 퀴리 뒤의 괄호를 무시하기 위함이다.
val=0)%0Aunion%0Aselect%0A3-1%23
url에 쓰고 엔터를 눌렀더니.....
어..... 다른 블로그에 올린걸 똑같이 따라 해도 계속 이 화면이 나온다......
검색해보니 webhacking.kr 7번과 19이 오류가 있다고 한다......
쨌든..... 난 풀었다.....
참고:
http://lureout.tistory.com/494
http://bob3rdnewbie.tistory.com/35
http://sang-gamja.tistory.com/81
http://php.net/manual/kr/function.mysql-query.php
http://egloos.zum.com/gokuma/v/2898647
댓글
댓글 쓰기