ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 22 - dark_eyes
    Wargame/L.O.S 2022. 12. 12. 19:43
    반응형

    Level 22 - dark_eyes를 풀어보자.

     

    문제의 코드를 보면 앞의 iron_golem에서 col과 if, case, when이 추가로 필터링된다.

    비슷한 문제인 듯 하니, 이번에도 참과 거짓을 통한 에러를 이용하면 되지 않을까??

    <dark_eyes의 php 코드 내용>

     

    우선 에러가 나도록 입력을 해보자.

    pw에 싱글쿼터(')만 입력을 했더니, 빈 페이지가 나왔다.

    이번 문제는 mysqli_error 시 빈 페이지로 exit를 하도록 설정되어 있다.

    <에러 시 빈 페이지 출력>

     

    그리고 앞의 문제와 마찬가지로, 참을 입력해도 출력되는 문구가 없다.

    이번에는 if 문을 사용하지 못하는데 어떻게 해결을 해야될까??

    (case ~ when도 if 문과 비슷하게 활용할 수 있지만 여기에서는 사용할 수 없다.)

    <참 입력 시 화면>

     

    앞의 문제는 if 문을 활용해  참과 거짓일 때, 에러와 정상을 표현했다.

    이번에는 참과 거짓과는 상관없이 에러와 정상을 표현해 문제를 해결하도록 하자.

     

    필요한 것은 조종할 수 있는 에러문이다.

    여기서 조종할 수 있다는 것은, 수를 통해 길이를 구하고 문자를 표현할 수 있어야 한다는 것이다.

    이것을 위해 사용할 것은 union select 이다.

     

    아래의 사진을 보면 (select 1 union select 1) #을 입력하였다.

    이것을 입력하면 sql 내부에서는 Table에서 1을 select하여 Column의 한 Row에 1을 출력한다.

    (or는 where 절에 대한 것으로 앞의 id와 pw는 거짓, 뒤의 id와 select는 참이므로 뒤의 입력이 표현된다.)

    <union select를 이용한 정상 입력>

     

    이것은 select와 union select에서 구하는 것이 모두 1이기 때문이다.

    중복되는 Row는 합쳐져 하나만 표현을 하는 것이다.

     

    이번에는 (select 1 union select 2) #을 입력하면 에러로 인해 빈 페이지가 나타난다.

    1과 2는 중복되지 않기 때문에 1과 2의 두 개의 Row가 표현이 되면서 생기는 에러이다.

    (원래 에러 구문은 'Subquery returns more than 1 row'로 서브쿼리에서는 값이 한 줄을 넘으면 안된다.)

     

    union all을 사용하면 조금 더 이해가 쉬울 것이다.

    union all select는 중복되는 Row도 모두 표현을 한다.

    아래의 사진을 보면 (select 1 union all select 1) #을 입력했는데 에러가 발생하였다.

    이것은 1로 된 두 개의 Row가 출력되면서 발생한 에러이다.

    <select 1 union select 2의 에러>
    <union all select의 에러>

     

    문제의 원리는 알았으니, 코드를 작성해 빠르게 문제를 해결해보도록 하자.

    pw의 길이를 구할 건데, select와 union select의 값이 다를 때, 길이가 늘어나도록 구성하자.

    그 후 아무 문구가 포함된 페이지가 나타났을 때의 길이가 pw의 길이가 되도록 한다.

    코드를 실행하면 pw의 길이로 8이 나온다.

    <pw의 길이 코드>

     

    이제 pw의 값을 구하면 되는데, 마찬가지로 select와 union select를 이용해 구하면 된다.

    아래의 사진에서 나오듯 pw의 값은 '5a2f5d3c'라고 한다.

    <pw의 값>

     

    페이지로 돌아와 pw에 구한 값을 입력하면 DARK_EYES Clear!가 출력되며 문제가 해결된다.

    반응형

    'Wargame > L.O.S' 카테고리의 다른 글

    [L.O.S] Level 24 - evil_wizard  (0) 2022.12.17
    Level 23 - hell_fire  (0) 2022.12.14
    [L.O.S] Level 21 - iron_golem  (1) 2022.12.09
    [L.O.S] Level 20 - dragon  (0) 2022.12.08
    [L.O.S] Level 19 - xavis  (1) 2022.12.07

    댓글

Designed by Tistory.