문제 살펴보기

해당 query를 보면 자체적으로 "and pw=" 부분을 주석처리하고 있다.
풀이에 필요한 코드를 보도록 해보자.
$query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'";
...
$result = @mysqli_fetch_array(mysqli_query($db,$query));
...
if($result['id'] == 'admin') solve("dragon");
pw 파라미터를 통해 데이터를 전달할 수 있는데 해당 부분이 #으로 주석처리 되어 있다.
그런데 해당 select문이 id='admin'인 행을 반환하면 문제가 풀린다고 한다.
바로 풀어보도록 하자.
문제 풀이 과정
#은 해당 줄에서 #이후의 내용을 주석처리한다.
그렇다면 #과 같은 줄을 사용하지 않으면 되는 문제이다.
\n을 통해 줄바꿈을 해주면 #으로 주석처리 되는 부분을 빠져나갈 수 있다.
다음 줄에서 and 1=0을 통해 id='guest' and ~ 부분을 거짓으로 만들고,
or id='admin'# 을 통해 select 문이 id='admin'인 행을 반환하게 하면 된다.

페이로드 : ?pw=%0a and 1=0 or id='admin'%23
조금만 생각하면 풀 수 있는 문제였다.
xavis 문제에 비하면 매우 선녀...
'web > Lord of SQLInjection' 카테고리의 다른 글
| Lord of SQLInjection - 22번 : dark eyes (0) | 2024.01.06 |
|---|---|
| Lord of SQLInjection - 21번 : iron golem (0) | 2024.01.06 |
| Lord of SQLInjection - 19번 : xavis (1) | 2023.12.10 |
| Lord of SQLInjection - 18번 : nightmare (0) | 2023.12.10 |
| Lord of SQLInjection - 17번 : zombie assassin (0) | 2023.12.10 |