정구리의 우주정복

webhacking.kr 18번 문제 본문

WEB HACKING/STUDY

webhacking.kr 18번 문제

Jungry_ 2018. 9. 21. 22:10
반응형

sql 인젝션 알못이라서 결국 마지막에 풀이를 봐버렸기 때문에 카테고리는 study인 걸루 ..


시작하자마자 sql injection 이래서 잔뜩 쫄았다 리얼


index.phps를 봐보자


쏘쓰코드다




eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack")  라고한다

select, , from 등등등 이런 문자들이 들어가면 종료하게 된다 !


q 에는 select id from challenge18_table where id='guest' and no=$_GET[no] 라는 쿼리가 있다


만약 no 가 guest와 일치하면 hi guest 를 반환해주고

id= admin 이고  no 가 admin꺼랑 일치하면 solve !


값을 입력하면 no 에 들어가게 되는 형태 ! 그래서 일단 1을 넣어줬다




1을 넣자 hi guest 라고 나왔다  그렇다면 테이블은

[0]    [1]

guest  1  

admin   ?   


이러한 형태로 생겼지 않았을까 ?! 하지만 다른 값을 넣어주려고 해도 이미 id에 guset값이 있기 때문에

문제 해결을 위해서는 id='guest' 부분을 무시해줘야하고 no에는  admin 의 no를 넣어줘야하는데 guest가 1이였으니 일단 2값을 넣어보고싶다 !



-----------------------------------------여기까지 생각했고 그 이후는 풀이를 봤따....(나레기조무레기)------------------------------------



해결하지 못한것 (1) id='guset'의 무시

                                      (2) 무시한 이후에는 어떻게 할지 


sql 연산의 순서는 and>or  즉 and연산이 or연산보다 먼저 이루어져야한다

따라서

select id from challenge18_table where id='guest' and no=$_GET[no] or no=2

쿼리를 이렇게 만들어주면 


select id from challenge18_table where ( id='guest' and no=$_GET[no] ) ( or no=2 )

이렇게 연산이 이루어지게 되는것이다! 그렇다면 no에 1이 아닌 다른 값을 넣어주면 첫번째 연산이 실행되지 않을것이고 두번째 연산이 실행되어 (1) 이 해결되게 된다 !!


하지만 form 태그에 0 or no=2  (0자리엔 1 빼고 다 됨)라고 넣어주면 위의 eregi에 의해 프로그램이 종료가 되게 된다 따라서

공백을 우회시켜줘야한다 


공백우회에는

1. \n : %0a

2. \t : %09

3. \r : %0d

4. 주석 : /**/

5. 괄호 : ()

6. 더하기 : +


이렇게 있다 하지만 eregi에 의해 막힌게 몇개 있으니 막히지않은 %0a 를 사용해서


0%0aor%0ano=2  라고 입력해주면

Clear!


반응형

'WEB HACKING > STUDY' 카테고리의 다른 글

webhacking.kr 31번 문제 (미완성)  (0) 2018.09.28
extract() 함수  (0) 2018.09.22
ereg, eregi 함수  (0) 2018.09.21
Comments