-
[L.O.S] Level 28 - frankensteinWargame/L.O.S 2022. 12. 31. 04:08반응형
Level 28 - frankenstein을 풀어보자.
이해가 되지 않는 부분들이 있어 조금 찜찜한 문제였다.
코드를 보면 괄호와 union이 필터링되고 있다.
그리고 error가 발생하면 error 문자가 나타나는 것으로 보아, Error-Based SQL Injection을 수행하면 된다.

<frankenstein의 php 코드 내용> union을 사용하지 못하니 error는 범위를 초과하는 수인 9e307*2를 이용해 발생시키도록 하자.
그리고 괄호를 사용하지 못하니 if 문 대신 case when을 사용하도록 하자.

<error 발생> 그런데, 여기서 이해가 가지 않는 부분이 있다.
아래의 사진을 보면 결과가 참인데 error가 출력된 것을 볼 수 있다.
(문제의 답이 0으로 시작한다는 것을 알고 있다.)
그리고 case when의 결과와 else의 결과를 바꾸면 정상적으로 출력이 된다.
(이것의 이유에 대해 설명해주시면 감사하겠습니다..)

<참의 결과에 error가 발생> 위의 사진처럼 쿼리를 작성할 것인데, 참과 거짓의 두 결과를 바꿔서 코드를 만들었다.
즉, 참일 때 error가 출력되므로 이때의 문자를 pw에 넣어주도록 하였다.
그리고 length는 따로 구하지 않고 20번의 반복을 시행하도록 했다.
아래의 결과를 보면, # 이후로는 모두 참이므로 결과는 0DC4EFBB임을 알 수 있다.

<pw를 찾기 위한 파이썬 코드> 
<pw의 값> 그런데, 여기서 대문자로 pw를 입력하면 정답이 되지 않는다.
아마 답을 찾을 때는 대소문자 구분을 하지 않고 입력을 해서 그런 것 같다.
(이것도 정확히 설명해주시면 감사하겠습니다..)
구해진 pw를 입력하면 FRANKENSTEIN Clear!가 출력되며 문제가 해결된다.

<frankenstein 문제 완료> 반응형'Wargame > L.O.S' 카테고리의 다른 글
[L.O.S] Level 30 - ouroboros (1) 2023.01.02 [L.O.S] Level 29 - phantom (0) 2023.01.01 [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 25 - green_dragon (1) 2022.12.27