Webhacking.kr 9번 문제 풀이!!


무려 900점 짜리..


9번 문제 클릭!!



하자마자 아래와 같은 창이 뜬다


SQL Injection 이라고 써있어서


SQL Injection이 되는줄 알고


이것저것 해봤다..


삽질을 엄청했다


이런 인증에 SQL Injection이 되는지 ...



그냥 webhacking.kr 사이트 아이디와 패스워드를 입력도 해봤다..ㅜㅜ



도저히 모르겠어서 살짝 검색했었다


HTTP Method 를 이용하는 것이였다..


아래와 같이 페이지를 요청할 때 GET 을 사용하지만



아래와 같이 GET 말고 다른 PUT 이나 OPTIONS, COPY 등 여러가지 Method를 사용하면..



아래와 같은 페이지를 볼 수 있다



페이지 이동 마다 인증 창이 떠서 귀찮긴 하지만 우회에 성공했다


전에 배운 기법이였는데 이걸 이렇게도 이용할 수 있다는 것을 이제야 알았다


이제 소스보기를 해봤다


no라는 값으로 1,2,3 페이지로 이동 가능하고


pw라는 값으로 password를 제출할 수 있게 되어있다



1번 페이지로 이동해 보았다



Apple..?


머징..



2번 페이지 화면..


Banana..?



3번 페이지 화면..은..!?


hint가 적혀있다


길이가 11이고


컬럼이 id와 no가 있다고 알려주었다



url을 보면 no=3 라는 식으로 


값이 전달되도록 되어있는걸 봐서는


no 값에 SQL Injection을 시도하여 no=3일 때의 id 값을 알아내라는거 같다



여러가지 시도 끝에


if(질문,참,거짓)


을 이용하게 되었다


if(    substr(id,자릿수,1)in(대입값),    참,    거짓)


이런식으로 사용할 수 있다


잘 보면


no의 값에 따라서 페이지가 변하는데 1번 페이지에는 apple


2번 페이지에는 banana라는 글이 있던걸 알 수 있다


참일 경우 no값이 지정된 페이지로 이동하고


이동된 페이지의 특수한 문구가 있다는 점을 이용하여


id 값을 알아내기로 한다


SQL Injection을 이용하여 참일 경우 no=3이 되도록 하였고


소스에서 Secret라는 값이 있는지 검사하여 참인지 거짓인지 판별하고 있다


이렇게 파이썬 코드를 짜서 no=3 일 때의 ID 값을 알아내봤다


정말 몇일 동안 고생했다ㅠㅠ


Python 코드 공유 (파이썬은 2.x 대를 사용하였다)


no3id.zip


(초보라서)


(코드가 아주 더럽다...)




test 로 no=1 페이지 ID 알아낸 화면 올려봄





no=3 페이지의 ID를 알아낸 뒤




처음 1 2 3 하고 Password 입력하는 창에 입력하면


문제는 해결된다





정리가 안된점 죄송해용


이 문제 푼다고 노가다 하다가..


힘들어서...ㅋㅋ


죄송합니당!