본문 바로가기
Web/LORD OF SQLINJECTION

LOS 3번 Goblin 문제

by secumark 2021. 9. 14.
728x90

 

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의 구조를 파악하는 것) 난 이 방법이 제일 나은 것 같다.

 

728x90

'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

댓글