ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 28 - frankenstein
    Wargame/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

    댓글

Designed by Tistory.