[los - SQL injection] wolfman ( 5단계 )
[ 풀이과정 ]
wolfman은 if($result['id'] == 'admin') 조건을 만족하게 되면 solve("wolfman"); 가 실행되면서 문제가 풀린다.
여기서는 pw에 prob _ . ( ) 스페이스바 입력을 막아두었다.
whitespace 우회인데 우회가 가능한 문자들은 미리 파악 해둬야한다.
- whitespace 우회
-> %0d, %09, (), /**/, %0a, %0b, %0c, ...
스페이스바 입력이 되지 않기 때문에 SQL 쿼리를 입력할때 각각을 구분 주려면 다른 방법을 이용해야 한다.
처음에 '+' 기호를 이용해서 하려고 했더니 다른 화면으로 넘어가면서 'No whitespace ~_~'라는 문장이 떳다..
SQL에서는 입력을 할때 ;으로 문장의 마지막을 알려주기 때문에 그 전까지는 엔터키를 쳐도 계속해서 입력이 된다.
그래서 이번에는 엔터키를 이용해보기로 했다.
url 주소 창에서 그냥 엔터키를 칠수는 없고 LF 문자를 이용해서 엔터키의 역할을 했다.
그래서 LF의 헥사값인 %0A( 엔터키의 값은 0x0D0A )를 이용하고 참/거짓 식을 만들어보니
우선 Hello guest라고 뜨는걸 확인하고 이러한 방식이 통한다는게 증명이 됬다.
이번엔 length() 함수를 이용해서 pw의 길이를 알아내려고
select id from prob_wolfman where id='guest' and pw='' or length(pw)=22 #' 와 같이 쿼리를 추가시켜 알아냈고
비밀번호의 길이는 22였다.
그리고 문제가 풀렸다...?
코드를 다시한번 살펴보면서 생각을 정리해보니
select id from prob_wolfman where id='guest' and pw='' or length(pw)=22 #'가 실행되면서
결국 select id from prob_wolfman where false or length(pw)=22와 같은 문장이 실행 되므로
뒤에 있는 where의 결과는 참이 되어서 select id from prob_wolfman 쿼리가 실행되는데
비밀번호를 입력하지않았는데도 바로 문제가 풀린걸 보니 해당 테이블안에 admin에 대한
정보가 제일 첫행에 출력이 되어 mysql_fetch_array()가 한번만 실행이 됬는데도 문제가 풀린 이유로 판단된다..
5단계 클리어~~~~~~~
'워게임 > LOS' 카테고리의 다른 글
[los - SQL injection] orge ( 7단계 ) (0) | 2017.09.23 |
---|---|
[los - SQL injection] darkelf ( 6단계 ) (0) | 2017.09.23 |
[los - SQL injection] orc ( 4단계 ) (0) | 2017.09.23 |
[los - SQL injection] goblin ( 3단계 ) (0) | 2017.09.23 |
[los - SQL injection] cobolt ( 2단계 ) (0) | 2017.09.23 |
댓글