ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 25 - green_dragon
    Wargame/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

    댓글

Designed by Tistory.