코드를 보면 create_function으로 임의의 함수를 만들어 사용한다.
source)
<?php
ini_set('display_errors', 'on');
ini_set('error_reporting', E_ALL);
$success = '
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
Function declared.
</div>
';
include "flag.php";
if (isset ($_POST['c']) && !empty ($_POST['c'])) {
$fun = create_function('$flag', $_POST['c']);
print($success);
//fun($flag);
if (isset($_POST['q']) && $_POST['q'] == 'checked') {
die();
}
}
?>
근데 중요한건 함수를 정의한 후에 이 함수를 아예 쓰지를 않는다. 코드 자체의 결함으로 뭔갈하기에는 무리가 있어보였고 create_function자체의 취약점이 있는지 찾아봤더니 exploit-db에 RCE가 되는 취약점이 있었다.
poc이용해서 플래그를 따냈다.
'Wargame > websec.fr' 카테고리의 다른 글
Websec.fr babysteps Level28 (0) | 2018.12.13 |
---|---|
Websec.fr babysteps level 25 (0) | 2018.12.12 |
Websec.fr easy level 11 (0) | 2018.03.08 |
Websec.fr easy level10 (0) | 2018.03.08 |
Websec.fr easy level 08 (0) | 2018.03.08 |