-
Level 23 - hell_fireWargame/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