Webhacking.kr 40번 문제를 풀어보자


40번 문제는 500점 짜리 문제이다


난이도가 좀 있을거 같다


일단 어떤 문제인지 확인해 보자


40번 문제 클릭



로그인 창이 보이는데 no 값도 입력을 해야 한다


한 번 로그인 해보자



Success -guest 라고 나오고 약 2초 뒤에 다시 원래 페이지로 이동된다



소스 보기를 해보자


별 다른 내용은 없는거 같다



index.phps 페이지가 있나 들어가 봤지만 없었다




그럼 no 값을 바꾸면 어떻게 될까 하고 바꿔서 로그인 해보았다



Failure 라고 뜬다



그럼 or을 사용하여 보았다



access denied


이건 아마 필터링 되어었을 때 나오는거 같은 느낌이다



이것 저것 시도해보다가 


&&이나 || 을 사용해보기로 했다


1&&1=1



로그인 성공!



거짓이 되도록 1&&1=0을 넣었더니



Failure 가 나왔다



이 결과를 이용하여 Blind SQL Injection을 해보기로 했다


1&&substr(id,1,1)=g



1&&substr(pw,1,1)=g



이제 no 값을 바꿔서 admin의 ID와 PW를 찾으면 되는 줄 알았지만


admin일 때는 결과 페이지가 다르기 때문에 똑같이 하면 찾지 못한다


그리고 &&으로 하면 먹히지 않고


|| 해야 한다



그럼 아래와 같이 admin password 를 입력하게 되어있다



이 결과 값을 이용해서 다시 Blind SQL Injection을 시도해보았다


id 값은 제대로 찾아냈다



이제 pw를 알아내야 하는데


||을 사용하기 때문인지 guest에도 반응을 한다


admin의 두 번째 pw 가 u 인데 guest의 두 번째 pw가 u 이기 때문에


guest의 결과 페이지가 나오게 된다;;


그래서 소스 코드를 admin 결과 페이지에서 찾아보고 못찾으면


guest 결과 페이지를 찾게해서 패스워드를 찾아냈다



Wargame40.zip


문제를 풀 때 사용한 코드를 올린당..


쓰레기 코드지만 필요하신 혹시 몰라서 올려두어욤..


이제 admin 의 pw를 알아 냈으니 아까의 admin 페이지로 이동하여


pw를 입력하면


Confratulation! 이 뜨면서



500점을 얻을 수 있다




Blind SQL Injection 할 때 찾아내는 문자는 대문자를 찾아내는데


소대문자를 구별하지 않는 거 같다


만약 A를 찾아 냈다면.. A일 수도 a 일수도 있다고 생각해야 할 거 같다