-
[L.O.S] Level 25 - green_dragonWargame/L.O.S 2022. 12. 27. 05:11반응형
Level 25 - green_dragon을 풀어보자.
오랜만에 입력한 query 문에 대한 출력을 보여주는 문제이다.
그런데, 그 출력을 두 개나 보여준다. (인심이 좋다..)
출력이 두 개, 그리고 싱글쿼터(')와 더블쿼터(")가 모두 필터링 된다는 것을 알 수 있다.

<green_dragon의 php 코드 내용> id 파라미터에 admin을 넣어 그것이 db에 있다면 문제가 해결된다고 하니, 넣어보도록 하자.
당연히 문제는 풀리지 않는다.
pw의 값을 모르니, 우회를 하여 다시 시도해보도록 하자.

<풀리지 않는 문제> 우회를 하기 전, 항상 참 값을 입력했을 때 어떻게 출력이 되는 지를 확인해보도록 하자.
그런데 두 번째 query 문의 출력이 나타나지 않는 것을 확인할 수 있다.

<나타나지 않는 두 번째 query 문> 이것은 문제의 테이블인 prob_green_dragon에 값이 없다는 것을 의미한다. (아니라면 댓글 부탁드려요.)
그렇다면 id에 어떻게 값을 입력하고, 출력을 시킬 수 있을까??
여기서 필요한 것은 union select의 기능이다.
id 파라미터는 '\'을 입력하여 우회하고, pw 파라미터에 union select를 넣어 원하는 입력을 할 수 있다.
아래의 사진을 보면 Column 수를 맞춰 두 개의 1을 넣어주었다.
그 결과, id와 pw에 1이 들어간 두 번째 query 문의 출력이 나타나는 것을 볼 수 있다.

<나타난 두 번째 query 문> 두 번째 query 문에 admin을 입력하기 위해서는 첫 번째 query 문에 'admin'를 입력해야 한다.
하지만 싱글쿼터와 더블쿼터가 모두 필터링되고 있으므로, Level 3에서 했던 방식을 사용하도록 하자.
hex 값을 입력하여 문자열을 입력하는 방법이다.
그런데 두 번째 query의 id 파라미터에 입력할 값만 변환해서는 되지 않는다는 것을 알 수 있다.

<id의 값만 변환 시 결과> 두 번째 query에 입력하는 문자열들을 모두 hex 값으로 변환을 해주어야 한다.
즉 id에 입력할 '\'를 변환하고, pw에 입력할 'or id=0x61646d696e#'을 변환해야 한다.
하지만, 여전히 통과가 되지 않는 것을 보아 답은 아닌 듯 하다.

<오답으로 미통과> 여기까지 풀어보고, 헤맨 끝에 다른 분들의 블로그를 참고했다.
사실 문제를 다 푼 것이었고, 한 번 더 응용을 하면 됐었다.
현재 테이블에 값이 없으니, union select를 한 번 더 사용해 id에 admin을 합쳐주면 되는 것이었다.
즉, 두 번째 쿼리의 pw 파라미터에 'union select 0x61646d696e #'을 hex 값으로 넣어주면 되는 것이었다.
그 결과, GREEN_DRAGON Clear!가 출력되며 문제를 해결하였다.

<green_dragon 문제 완료> 반응형'Wargame > L.O.S' 카테고리의 다른 글
[L.O.S] Level 27 - blue_dragon (0) 2022.12.30 [L.O.S] Level 26 - red_dragon (0) 2022.12.28 [L.O.S] Level 24 - evil_wizard (0) 2022.12.17 Level 23 - hell_fire (0) 2022.12.14 [L.O.S] Level 22 - dark_eyes (1) 2022.12.12