문제 살펴보기

문제 코드는 위와 같다.
문제 푸는데 필요한 부분을 분석해보도록 하자.
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
위 코드를 보면 pw 파라미터로 데이터를 전달할 때 공백을 사용하면 안된다고 한다.
공백을 우회하는 법은 다양하게 있으니 그 중 아무거나 사용하면 될 것 같다.
$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";
...
$result = @mysqli_fetch_array(mysqli_query($db,$query));
...
if($result['id'] == 'admin') solve("wolfman");
해당 select문을 통해 id 컬럼의 값이 'admin'인 행을 반환할 경우 문제가 풀리게 된다.
매우 간단하니 바로 문제를 풀어보도록 하자.
문제 풀이 과정
공백을 막아서 or 연산자를 사용하지 못하게 하는 것 같다.
or 연산자는 그대로 사용할 경우 앞과 뒤에 공백이 있어야 사용이 가능하다.
하지만 or을 ||로 바꿔서 사용하면 공백 없이도 사용이 가능하다.
이를 통해 pw 파라미터에 '||id='admin'%23을 넣어주면 바로 문제가 풀릴 것이다.

wolfman 바로 clear
페이로드 : ?pw='||id='admin'%23
or 연산자를 ||로 대체할 수 있다는 것을 알고 있으면 바로 풀 수 있는 문제였다.
매우 쉬웠던 문제이니 바로 다음 문제를 풀어보도록 합시다.
'web > Lord of SQLInjection' 카테고리의 다른 글
| Lord of SQLInjection - 7번 : orge (1) | 2023.12.10 |
|---|---|
| Lord of SQLInjection - 6번 : darkelf (1) | 2023.12.10 |
| Lord of SQLInjection - 4번 : orc (0) | 2023.12.09 |
| Lord of SQLInjection - 3번 : goblin (0) | 2023.12.09 |
| Lord of SQLInjection - 2번 : cobolt (0) | 2023.12.08 |