-
[L.O.S] Level 24 - evil_wizardWargame/L.O.S 2022. 12. 17. 19:15반응형
Level 24 - evil_wizard를 풀어보자.
코드를 보면 앞의 Level인 hell_fire와 비슷하다.
다른 점은 union, sleep, benchmark 함수를 사용할 수 없다.

<evil_wizard의 php 코드 내용> 앞에서 했던 Time-Based SQL Injection은 할 수 없지만, if 문을 이용해 문제를 풀어보도록 하자.
먼저 email의 길이를 구해보자.
order by가 정렬될 수 있도록 참일 때, 1을 입력할 수 있도록 한다.
그랬더니 admin, rubiya 순으로 데이터가 정렬되는 것을 볼 수 있다.

<참일 때의 정렬> 다음으로 에러가 나오도록 거짓일 때의 값을 order by의 범위를 넘어가도록 설정하였다.
그런데, 출력이 된다..
rubiya, admin 순으로 앞과는 다른 결과지만, 분명 출력이 되고 있다.
혹시나 싶어 거짓일 때 0을 넣을 수 있도록 입력했지만, 출력이 되는 것을 확인할 수 있다.
심지어 0을 넣었을 때는 참 값일 때와 거짓일 때가 똑같이 출력이 된다..
왜 이런 건지는 잘 모르겠지만, 정렬의 순서가 바뀐다는 사실을 이용해 문제를 풀도록 하자.


<이상한 결과> 길이를 구하는 코드를 작성하여 실행하였더니, email의 길이 값이 30이 나왔다.
(admin이 나오는 위치에 따라 페이지에 출력되는 테이블 태그가 다른 점을 이용했다.)

<email의 길이 코드> 이제 email의 값을 구하는 코드를 작성해보자.
아래와 같이 코드를 작성해 3의 길이마다 출력이 되도록 하였다.
이 코드를 실행시켜 email의 값이 나오는 것을 확인할 수 있다.


<email의 값> 페이지로 돌아와 코드를 통해 구한 email의 값을 입력하면 EVIL_WIZARD Clear!가 출력된다.
문제는 해결되었지만, 의문이 남아 조금 찜찜한 느낌이 있다.

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