[Dreamhack Web - Lv 1] php-1

문제 정보

php로 작성된 Back Office 서비스입니다.

LFI 취약점을 이용해 플래그를 획득하세요. 플래그는 /var/www/uploads/flag.php에 있습니다.

풀이 힌트

1. 공격 백터 파악

2. PHP Wrapper

문제 풀이

더보기

문제 페이지에 들어가니, List와 View 페이지가 있었다.
공격 백터를 확인하기 위해 두 페이지를 살펴보겠다.

 

List 페이지를 확인해보니, 두 가지 목록이 있었다.

 

제일 의심가는 flag.php를 확인해보니, View 페이지로 이동하였고 flag.php의 내용을 보지 못하게 막았다.

 

hello.json은 잘 읽어지는 것으로 보인다.

 

근데 이상한 점이 보통 페이지를 이동할 때, /list.php?param=~~로 제어할텐데 index.php의 page 파라미터로 페이지를 제어하는 것으로 보인다. 예상하는 것은 index.php의 page 파라미터는 include에 들어가는 것으로 보인다.


현재 파악한 공격 백터는 밑과 같다.

  • index.php의 page 파라미터
  • index.php의 file 파라미터

 가장 유력한 공격 백터는 page 파라미터이니, page 파라미터에 공격을 시도하겠다.

 

직접적으로 flag.php를 호출하면, can you see $flag?를 출력하는 것으로 보인다.

 

나는 위와 같은 검사를 우회하기 위해 PHP wrapper를 이용하여 LFI 공격을 시도하였다.

  1. expect://
    /?page=expect://ls
    expect는 작동이 안되는 것을 확인 할 수 있었다.

  2. php://filter/
    /?page=php://filter/convert.base64-encode/resource=../uploads/flag
    다행히 php://filter는 작동되어 base64로 인코딩된 flag.php의 내용이 출력되었다.

    확인해보니, 직접 flag.php를 호출하면 can you see $flag?가 출력된 이유는 php 특성상 안 나왔던 것 였다.
    그래서 $flag이라는 문구를 줘서 php 코드 상에 flag가 있다고 힌트를 주는 것이 아닐까? 라는 생각을 하게 되었다.