Webhacking.kr
#57
[Time-Based SQL Injection]
57번 문제를 열면 아래와 같은 화면을 볼 수 있다.
소스코드를 보면, 필터링 되는 문자열 또한 알 수 있다.
이 때 필터링 대상을 보면 흔히 나타나지 않았던 benchmark가 존재하는 것을 볼 수 있다.
Mysql manual 페이지를 보면 benchmark는 expression이나 function의 속도를 측정할 때 이용한다는 것을 알 수 있다.
Benchmark는 필터링 되어 사용할 수 없지만, 여기서 Time-Based SQL Injection이 가능하겠다는 추측을 할 수 있다.
출처: https://dev.mysql.com/doc/refman/5.5/en/select-benchmarking.html
예를 들면, pw의 길이를 알아오기 위해서는
se = if( length(pw)=1, sleep(3.0), 1)
과 같이할 수 있다. 이 경우, pw의 length가 1인 경우 3.0초간 sleep()하게 된다. 즉 응답 소요 시간을 비교하면 pw를 알아낼 수 있다.
아래 코드를 보면 form의 action이 get이므로 이에 맞게 요청하면 된다.
python 코드는 아래와 같다.
실행 결과이다.
이렇게 얻은 pw를 넣으면 clear할 수 있다.
'Wargame > webhacking.kr' 카테고리의 다른 글
webhacking.kr 55번 (0) | 2019.02.01 |
---|---|
webhacking.kr 45번 (0) | 2019.02.01 |
webhacking.kr 44번 (0) | 2019.02.01 |
webhacking.kr 40번 (0) | 2019.02.01 |
webhacking.kr 33번 (0) | 2019.02.01 |
댓글