ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 29 - phantom
    Wargame/L.O.S 2023. 1. 1. 07:25
    반응형

    Level 29 - phantom을 풀어보자.

    SQL의 서브쿼리에 대한 개념이 있어야 풀 수 있는 문제이다.

     

    문제 페이지를 보면, 다른 문제들과는 달리 입력 쿼리가 보이지 않는다.

    그 대신 표가 출력이 되어 있다.

     

    소스 코드가 꽤 긴데, joinmail을 파라미터로 입력해야 한다는 것을 알 수 있다.

    duplicate가 필터링 되고, insert into를 통해 테이블에 값이 들어 가는데 0과 접속 주소, joinmail이 입력된다.

    <phantom의 php 코드 내용>

     

    우선 아무거나 입력을 해서 어떤 변화가 생기는지를 확인해보자.

    joinmail 파라미터에 127.0.0.1을 입력해보았다.

    그랬더니 insert into의 쿼리가 출력되고, 접속 ip와 입력한 값이 표에 추가로 출력되는 것을 볼 수 있다.

    <joinmail 파라미터에 값 입력>

     

    여기까지 동작을 보고 어떻게 이번 문제를 해결할 수 있을까??

     

    여기서 문제를 해결할 수 있는 두 가지 정보를 알 수 있다.

    먼저 joinmail 파라미터를 이용해 값을 입력할 때, 항상 no, ip, email이 입력된다는 것을 알 수 있다.

    그 중 no과 ip는 고정이다. (0, 접속 ip)

     

    두 번째로 문제를 풀기 위해 이용할 것은 자동으로 표로 출력되는 email을 이용하라는 것을 알 수 있다.

    즉, no이 1일 때의 email을 출력하는 쿼리 문을 입력한다면 자동으로 email이 출력된다는 것이다.

     

    여기서 서브쿼리를 이용하도록 하자.

    insert into의 값을 입력할 values는 ','를 기준으로 여러 개를 한 번에 입력할 수 있다.

    (insert into [table] values (a,b,c), (d,e,f), (g,h,i), ... )

     

    그래서 쿼리 문은 먼저 아무 값이나 넣고, 괄호를 닫은 다음 ','로 원하는 값을 입력할 것이다.

    아래 사진을 보면 select 문을 넣어 no이 1일 때의 email을 출력하는 모습을 볼 수 있다.

    그런데 select 문을 두 번 사용하였는데 그 이유는 무엇일까??

     

    만약 prob_phantom 테이블에서 바로 email을 select 한다면 마지막 코드가 동작할 것이다.

    그래서 select email from 뒤에 한 번 더 select 문을 사용하고, as를 통해 다른 테이블처럼 지정하는 것이다.

    그 결과로 no이 1일 때의 email인 admin_secure_email@rubiya.kr이 출력되는 것을 볼 수 있다.

    <서브쿼리를 통한 입력 및 출력>

     

    혹시 이해가 되지 않을까봐 select 문을 하나만 사용해 입력을 한 결과이다.

    소스 코드의 마지막 부분에 있는 delete 명령으로 no이 1이 아닌 값이 모두 삭제되는 것을 볼 수 있다.

    <delete 명령 동작으로 삭제된 데이터>

     

    이제 알아낸 email을 입력해주면, PHANTOM Clear!가 출력되며 문제가 해결된다.

    <phantom 문제 완료>

    반응형

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

    [L.O.S] Level 31 - zombie  (0) 2023.01.04
    [L.O.S] Level 30 - ouroboros  (1) 2023.01.02
    [L.O.S] Level 28 - frankenstein  (0) 2022.12.31
    [L.O.S] Level 27 - blue_dragon  (0) 2022.12.30
    [L.O.S] Level 26 - red_dragon  (0) 2022.12.28

    댓글

Designed by Tistory.