ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 21 - iron_golem
    Wargame/L.O.S 2022. 12. 9. 04:30
    반응형

    Level 21 - iron_golem을 풀어보자.

    새로운 공격 방법을 이용해야 하는 문제이다.

     

    얼핏 보기에 코드에서 필터링하는 부분은 많이 없는 것 같다.

    그런데, 앞의 Level들과는 달리 Blind SQL Injection을 하기 위해 출력을 보여주던 부분이 없다.

    어떻게 해결해야 할까??

    <iron_golem의 php 코드 내용>

     

    sleep과 benchmark 함수가 필터링되는 것을 보니, Time Based SQL Injection은 아닌 것 같다.

    중간의 if문에 mysqli_error가 있으니, Error Based SQL Injection을 이용해 공격해보도록 하자.

     

    우선 에러가 났을 때의 변화를 확인해보도록 하자.

    pw 파라미터를 싱글쿼터(')로 닫았을 때 MySQL의 옳은 구문을 사용하라는 내용의 에러가 나타난다.

    이것을 보니, Error Based SQL Injection을 이용한 공격이 맞는 것 같다.

    <Error 출력>

     

    우선 Column의 갯수를 구하기 위해 union select all 을 이용해 Column의 수를 입력하였다.

    1에서만 참인 것으로 보아 column은 1개인 것으로 생각된다.

    (왜 1개인 것일까를 생각해봤는데, 아마 pw에 관련된 Column만 있는 것 같다..)

    <Column의 갯수 1개>

     

    그런데, 이 과정 이후 문제가 있었다.

    필터링 때문에 DB 명이나 Column 명 등을 구하기 위한 쿼리문을 작성할 수가 없다.

     

    여기서 한참을 헤맨 끝에 sql에서 if 문을 활용해 Error를 일으켜 공격하는 방법을 찾았다.

    (최대한 안 보려고 했지만, 결국 많은 블로그들을 찾아 다녔다.)

     

    sql에서 if 문은 'if(조건문, 참, 거짓)'으로 표현이 된다.

    이것을 이용해 if(pw 관련 조건문, Error 문, 0)과 같이 입력해 문제를 해결할 수 있다.

     

    아래의 사진을 보면 조건이 참일 때 Error 문이 동작하고, 거짓일 때 일반 페이지가 나타난다.

    여기서 Error 문은 Double 자료형의 범위를 넘는 값을 입력하는 것을 이용하였다.

    (9e307 * N의 형식으로 입력하면 되는데, 왜 그보다 큰 9e123456... 등은 안되는지 모르겠다..)

    <조건문이 참일 때 페이지>
    <조건문이 거짓일 때 페이지>

     

    이것을 이용해 pw의 길이부터 알아보도록 하자.

    다른 특별한 것은 없고, sql의 if 문을 잘 작성해주면 쉽게 코드를 만들 수 있다.

    실행하면 pw의 길이로 32가 출력된다.

    <pw의 길이 32>

     

    다음으로 pw의 값을 알아보는데, 이번에도 코드가 복잡하지는 않다.

    32 자나 되기 때문에 4개씩 끊어서 출력하였다.

    <출력된 pw의 값>

     

    출력된 비밀번호를 입력하면 IRON_GOLEM Clear!가 출력되며 문제가 해결된다.

    <iron_golem 문제 완료>

     

    이번 문제는 새로운 공격 방법이 나왔다고는 해도 관련 자료가 많이 있어 찾기가 쉽다.

    그래서 기본 개념만을 알아내 해결을 하려고 했지만, 그러지 못했고 많은 블로그들을 참고하게 되었다.

    생각을 더 많이 해야 한다.

    반응형

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

    Level 23 - hell_fire  (0) 2022.12.14
    [L.O.S] Level 22 - dark_eyes  (1) 2022.12.12
    [L.O.S] Level 20 - dragon  (0) 2022.12.08
    [L.O.S] Level 19 - xavis  (1) 2022.12.07
    [L.O.S] Level 18 - nightmare  (0) 2022.12.06

    댓글

Designed by Tistory.