ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level 23 - hell_fire
    Wargame/L.O.S 2022. 12. 14. 09:09
    반응형

    Level 23 - hell_fire를 풀어보자.

    새로운 공격 기법을 사용하였다.

     

    이번 문제는 order 파라미터에 값을 넣어 order by를 이용해 공격을 수행해야 할 듯 하다.

    <hell_fire의 php 코드 내용>

     

    order에 1을 넣어 order by 1 을 만들었다.

    이것의 의미는 첫 번째 Column인 id를 기준으로 정렬을 하겠다는 것이다.

    그래서 출력된 결과로 admin 데이터가 먼저 나오고 rubiya 데이터가 나왔다.

    <order by 1의 결과>

     

    그렇다면 존재하지 않는 Column을 기준으로 정렬을 하면 어떻게 될까??

    order에 0을 넣어 order by 0이 실행되게 해보았다.

    그 결과 출력되는 데이터가 없는 것을 확인할 수 있다. 

    <order by 0의 결과>

     

    이 두 가지 사실을 이용해, 이번 문제는 if 문을 활용한 참, 거짓으로 해결해보도록 하자.

    id에 'admin'을 입력하고, if 문을 통해 email의 길이를 알아보도록 할 것이다.

    그런데 문제가 있다..

     

    아래의 두 사진을 보면, 참과 거짓일 때 수행되는 결과인 1과 0에서 똑같은 출력이 나온다.

    왜 이렇게 되는 것일까??

    그 이유는 모르지만, 이런 식으로 문제를 해결할 수는 없을 것 같다.

    다른 방법을 찾아보도록 하자. 

    <1과 0에서의 동일한 출력>

     

    if 문에 한 번 더 희망을 갖고, sleep을 이용해 문제를 풀어보도록 하자.

    결과가 참일 때, 3초 간의 지연을 주도록 하였다.

    그랬더니, 이번에는 참과 거짓일 때의 수행 결과가 달랐다.

    이번 문제는 응답의 참과 거짓이 불분명하니, Time-Based SQL Injection을 이용하면 될 것 같다.

    <Time-Based SQL Injection 이용>

     

    파이썬을 이용해 Time-Based SQL Injection 코드를 작성해보자.

    time 모듈을 import 하고, 시작 시간과 종료 시간의 차이로 결과를 알 수 있다.

     

    아래의 코드를 통해 id가 admin일 때, email의 길이가 28이 된다는 것이 나온다.

    <email의 길이 코드>

     

    이제 email의 값을 구하면 문제는 해결된다.

    아래의 코드를 수행해 email을 구했는데, 처음 나온 답을 입력하니 문제가 해결되지 않았다.

    admin_secure_까지는 맞는 것 같아, 그 뒤의 코드를 다시 수행하였다.

    그랬더니 뒤의 값이 달랐고, 이것을 입력하기로 하였다.

    <email의 값 코드 및 결과>

     

    나온 email을 email 파라미터에 넣어 입력을 하니, HELL_FIRE Clear!가 출력되며 문제가 해결되었다.

    <hell_fire 문제 완료>

    반응형

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

    [L.O.S] Level 25 - green_dragon  (1) 2022.12.27
    [L.O.S] Level 24 - evil_wizard  (0) 2022.12.17
    [L.O.S] Level 22 - dark_eyes  (1) 2022.12.12
    [L.O.S] Level 21 - iron_golem  (1) 2022.12.09
    [L.O.S] Level 20 - dragon  (0) 2022.12.08

    댓글

Designed by Tistory.