본문 바로가기
Wargame/webhacking.kr

webhacking.kr 57번

by morae23 2019. 2. 1.

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

댓글