티스토리 뷰
728x90
반응형
이번 문제는 다른 문제와는 다르게 별다른 필터링이 없습니다. 그리고 희한하게도 query문에 주석(#)이 포함되어 있습니다. 언뜻보면 pw 에 어떤 걸 입력해도 모두 주석처리되어서 mysql 쿼리 결과를 조작할 수 없는 것처럼 보이는데 말이죠.
정말 그랬다면, 문제로 나오지도 않았겠지만 말입니다. 사실 mysql 에서 # 주석문은 한 줄 주석문입니다. 말그대로 한 줄에 대한 주석이기 때문에 다음 줄에는 해당되지 않습니다.
SQL 쿼리문은 여러줄을 입력할 수 있습니다. 다음 예시를 보도록 하겠습니다.
mysql> select * from user
-> where user='guest';
+----+-------+----------+
| id | user | pass |
+----+-------+----------+
| 2 | guest | guest123 |
+----+-------+----------+
1 row in set (0.00 sec)
select * from user 다음에 엔터키를 입력한 다음에 바로 다음 줄에 where 절을 사용했습니다. 이처럼 위 문제에서도 # 주석문을 우회하기 위해서 개행문자(\n)를 삽입할 수 있겠습니다.
그리고 이 개행문자는 아스키코드로 0A 에 해당하고, URL 인코딩을하면 %0A 가 됩니다.
현재 문제에서는 아래와 같이 쿼리문이 이루어져있습니다.
select id from prob_dragon where id='guest'# and pw=''
그렇기 때문에 pw='' 다음에 개행문자를 넣어줘서 다음 문장을 만들어보겠습니다.
select id from prob_dragon where id='guest'# and pw=''
and pw='' or id='admin'
and pw='' 을 넣어줘서 앞의 guest 부분은 쿼리의 결과를 거짓으로 만들고, or 다음에 나오는 id='admin' 으로 admin 에 대한 쿼리 결과가 나오도록 했습니다.
이제 위 쿼리문을 URL에 넣어서 표현해보겠습니다. 개행문자를 제외한 특수문자들은 모두 URL 디코딩하였습니다.
// ?pw=%27%0Aand%20pw%3D%27%27%20or%20id%3D%27admin
?pw='%0Aand pw='' or id='admin
위와 같이 pw 파라미터를 입력하게 되면 아래와 같이 문제를 풀 수 있습니다.
- 끝 -
728x90
반응형
'보안 > Wargame' 카테고리의 다른 글
[FTZ] level6 문제풀이/Writeup - 해커스쿨(Hackerschool) (0) | 2021.11.04 |
---|---|
[FTZ] level5 문제풀이/Writeup - 해커스쿨(Hackerschool) (0) | 2021.10.28 |
[Lord of SQLi] xavis Writeup/문제풀이 (0) | 2021.10.22 |
[Hackthebox] - breaking grad Writeup(문제풀이) (0) | 2021.10.18 |
[FTZ] level4 문제풀이/Writeup - 해커스쿨(Hackerschool) (0) | 2021.10.14 |
댓글