18번 문제를 접속하면 아래와 같이 SQL Injection 문제임을 확인 할 수 있다.



index.phps 도 주어졌으니 index.php의 소스를 확인 했다.



내가 알기론 webhacking,kr에는 magic_quotes_gpc가 기본적으로 켜저있다.


하지만 이 문제의 경우 no=$_GET[no] 와 같이 SQL 쿼리문에 쿼터를 사용하지 않고 바로 input 값을 넣어주기 때문에 인젝션이 가능하다.


문제는 id가 admin인 경우에 풀리는 것 같다.


따라서 0 or id='admin'이라는 값을 넣어주면 전체 쿼리는


select id from challenge18_table where id='guest' and no=0 or id='admin'


으로 id가 admin인 row가 리턴될 것 이다.



하지만 여기서 2가지 문제가 있다.


첫 번째로 띄어쓰기(스페이스바)를 필터링 하기 때문에 %20을 %0a로 우회해야 한다.


두 번째로 쿼터를 사용할 수 없다는 것이다.

따라서 admin을 hex값으로 encodeing하여 mysql 쿼리문으로 넘겨주는 방법으로 우회가 가능하다.




하지만 0x를 필터링 하기 때문에 다른 방법을 사용해야한다.


admin을 hex값이 아닌 bin값으로 표현 하는 것이다.



위와 같이 admin을 한글자씩 bin값을 구해서 이어 붙이면 0110000101100100011011010110100101101110값이 나온다.



mysql에서도 정상적으로 bin값들을 문자열으로 인식한다.


따라서 아래와 같이 no값을 0%0aor%0aid=0b0110000101100100011011010110100101101110 로 보내주면 문제를 풀 수 있다.



끝!

'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 20번  (0) 2016.11.17
webhacking.kr 19번  (0) 2016.11.17
webhacking.kr 18번  (0) 2016.11.16
webhacking.kr 17번  (0) 2016.11.16
webhacking.kr 16번  (0) 2016.11.15
webhacking.kr 15번  (0) 2016.11.15

+ Recent posts