SQL injection 왕왕초보 3번문제부터 버벅대기 시작
이번 문제는 id에 guest가 입력되어 있기 때문에 pw만 입력하면 되는데.. pw가 아니라 no라고 적혀있다.
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
no에 적합한 변수를 입력해주면 값을 가져올 것 같은데....
일단 출력하는법은 앞이랑 똑같다.
?no=3
특이점이 있다면.. no를 입력하는 구문에는 작은 따옴표가 없다. 자세히보니 윗부분에서 ', ", \를 필터링하고 있다.
일단 no=no로 참이되게 입력해봤더니 id=guest니까 guest를 환영해주고 있다.
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
이 부분을 수행한듯.
그리고 바로 밑에
if($result['id'] == 'admin') solve("goblin");
이 명령어가 있으니까 id=admin을 입력해주어야 한다.
참고로 작은 따옴표를 인코딩하면 %27인데 지금 이걸 우회하고 있으니까 다른 방법을 사용해야 한다.
바로 hex값(16진수)..를 사용해야 한다는 것..
admin -> 0x61646d696e
즉, no=2%20or%20id=0x61646d696e 이렇게 사용해주어야 한다.
참고로 no값이 참이되면 뒤는 더이상 참거짓 판별을 안하기 때문에 no=2 또는 아무값으로 변경해준다.
그러면 이런식으로 해결이 됨. 몰랐던건 여기서 hex을 입력할때는 작은 따옴표를 쓰지 않아도 된다는 것..
다른 방법으로 푸는 과정도 있는데 (hex대신 char를 입력하는 것, no의 구조를 파악하는 것) 난 이 방법이 제일 나은 것 같다.
'Web > LORD OF SQLINJECTION' 카테고리의 다른 글
LOS 6번 darkelf 문제 (0) | 2021.09.17 |
---|---|
LOS 5번 Wolfman 문제 (0) | 2021.09.16 |
LOS 4번 orc 문제 (풀이실패) (0) | 2021.09.15 |
LOS 2번 Cobolt 문제 (0) | 2021.09.13 |
LOS 1번 Gremlin 문제 (0) | 2021.09.12 |
댓글