<<< 49번 문제 >>>
문제에 들어가면 이런 화면이 뜬다.
1이 써져있으니 일단 제출을 눌러보았다.
GET방식을 사용하고 있다는 것과 제출 결과가 lv에 들어간다는 것을 알 수 있다.
저기 zzibong은 무엇일까… 소스코드를 한번 보자
index.phps가 있다!! 들어가보자.
HTML 코드는 제외하고 쿼리 부분만 가져왔다.
맨 윗 줄의 time()함수는1970년 1월 1일 0시 0분 0초부터 지금까지 지나온 초를 정수 형태로 리턴해주는 함수이다. 따라서 저 문장은 항상 true이다.
(1258110000은 Friday 13th November 2009 11:00:00 AM 이다)
쿼리문을 보면 members 테이블에서 lv 조건에 맞는 id를 가져온다,
해당 id가 admin이면 문제가 풀린다!!
그럼 lv부분을 sql injection으로 하여 없애버리고 id를 admin인 것을 가져오면 되는 것 아닐까?
-1 or id=’admin’를 생각해보았다.
그런데 or가 막혀있다. 이를 ||로 우회해서 시도해보았다.
-1||id=’admin’
?? 반응이 없다… 여기서 굉장히 멘붕이 왔다..
오랜시간동안 무엇 때문일까 알아보았더니
PHP에는 magic_quotes_gpc라는 기능이 있다.
이 기능이 설정되어 있으면 ‘, “, \가 자동적으로 \로 변환된다.
혹시 이것 때문일까 생각하여 이를 우회하는 방법을 찾아보았다.
즉, 문자열을 바로 입력하는 것 대신 우회해서 입력하는 것이다.
여기에는 두가지 방법이 존재한다.
아스키코드 이용
hex 값 이용.
먼저, 아스키코드 표를 이용하는 것을 생각해보았지만 ()가 필터링되어있기 때문에 불가능하다.
(만약 아스키코드를 이용한다면 id=char(97,100,109,105,110)으로 우회가 가능하다.)
따라서 다른 방법으로 hex를 이용하였다.
따라서 해당 값 앞에 0x를 붙여서
방식으로 적어주니 해결!!
'Solve Problem' 카테고리의 다른 글
[webhacking.kr] 20번 문제 (0) | 2015.07.06 |
---|---|
[webhacking.kr] 7번 문제 (0) | 2015.07.06 |
[webhacking.kr] 27번 문제 (0) | 2015.06.29 |
[webhacking.kr] 21번 문제 (0) | 2015.06.29 |
[webhacking.kr] 18번 문제 (0) | 2015.06.29 |