从目录遍历到getshell
某游戏厂商新增了一个网站,授权让我测试一下。
前台微信登录,未找到后台,功能简单,无常规漏洞,开始目录扫描。
/_notes/dwsync.xml泄露其真实ip,物理路径,以及一个旁站。
阿里云服务器,20001端口上有wdcp
爆破wdcp无果,旁站似乎是测试网站,使用和主站同一套模板,但主页空白,无数据。
查看cookie发现关键词XXX,怀疑是某cms的超级魔改版本。
github上搜索cookie['XXX'],出来很多套此cms的改版,仔细对比文件,发现目标站精简了很多东西,大部分php文件都没有。不过有/kindeditor/php/demo.php
KindEditor存在两个XSS漏洞,一是附件上传可以直接上传htm和html文件,二是demo.php可以POST content1参数反射出来。
<?php
$htmlData = '';
if (!empty($_POST['content1'])) {
if (get_magic_quotes_gpc()) {
$htmlData = stripslashes($_POST['content1']);
} else {
$htmlData = $_POST['content1'];
}
}
?>
<?php echo $htmlData; ?>
这是都是最鸡肋的反射XSS,属于凑漏洞的。
但我发现这个cms的KindEditor还有一个漏洞,目录遍历。
漏洞发生在file_manager_json.php,这个文件是用来浏览已上传的文件的。
$php_path = dirname(__FILE__) . '/';
________________________________
$root_path = $php_path . '../attached/';
________________________________
if (empty($_GET['path'])) {
$current_path = realpath($root_path) . '/';
$current_url = $root_url;
$current_dir_path = '';
$moveup_dir_path = '';
}
如果不存在attached目录,realpath($root_path)就为空,$current_path就为/也就是系统根目录,那么浏览文件时就可以看到/etc,/tmp,/var等文件夹了。虽然后面有禁止../的防护,但从根目录开始浏览防护就形同虚设了。
if (preg_match('/\.\./', $current_path)) {
echo 'Access is not allowed.';
exit;
}
实际效果是这样的
通过path=www/web/xxx/就可以进行目录遍历了。
找到后台,找到后台一些越权的查询接口,最重要的是,在旁站找到了备份文件。2020xxxxx.tar.gz
果断下载备份文件开始代码审计。File路由中存在一个uploadBase64方法
没有任何校验,直接img_data=base64code&filetype=phpgetshell