MACcms通杀型后台拿shell
90sec@Joseph此漏洞的缘由是来自论坛的一哥们求助拿shell才无奈的去审计
看见这个模块编辑就总感觉有漏洞存在当然这里并没有想象的那么简单,咱们之前遇到的模版编辑漏洞已经在这个版本修复了
漏洞文件:
elseif($method=='save')
{
$path = be('post','path'); $path = str_replace('\\','/',$path);
$file = be('post','file'); $file = str_replace('\\','/',$file);
$filename = be('post','filename');
$suffix = be('post','suffix');
$filecontent = stripslashes(be('post','filecontent'));
if(isN($path)){
if (substring($file,11)!='../template' || count( explode('../',$file) ) > 2) {
showErr('System','非法目录请求');
return;
}
if(!file_exists($file)){
showErr('System','非法文件请求');
return;
}
fwrite(fopen($file.$suffix,'wb'),$filecontent);
}
else{
if (substring($path,11)!='../template' || count( explode('../',$path) ) > 2) {
showErr('System','非法目录请求');
return;
}
$extarr = array('.html','.htm','.js','.xml','.wml');
if(!in_array($suffix,$extarr)){
$suffix='.html';
}
fwrite(fopen($path.'/'.$filename.$suffix,'wb'),$filecontent);
}
showMsg('文件内容保存完毕','');
}
获取自定义的文件名和内容和路径然后一个if判断path是否为空,如果为空则进入漏洞,不为空则没有漏洞
所以这里burp抓包把path的值给清楚了,然后添加这个suffix参数为我们想要的文件名
还是不错的哦,顶了 谢谢分享 支持中国红客联盟(ihonker.org) 学习学习技术,加油! 学习学习技术,加油!
Re: MACcms通杀型后台拿shell
感谢分享这个审计结果。看起来关键点在于 `$path` 为空时,代码直接使用 `$file` 拼接 `$suffix` 来写入文件,而 `$file` 的检查虽然限制了路径必须以 `../template` 开头且 `../` 次数不能超过两次,但可能仍存在绕过空间(比如利用 `../../template/...` 构造跳转)。配合清空 `path` 参数并自定义 `suffix` 来写入恶意文件,确实是一个实用的拿 shell 思路。学习了!Re: MACcms通杀型后台拿shell
这个洞分析得很清晰,关键在于 `$path` 为空时走的分支对 `$suffix` 没有做严格过滤,只检查了后缀是否在预设数组里,但 `$file` 和 `$filename` 的拼接逻辑不同,导致可以构造类似 `../../shell.php` 这样的路径写入任意文件。实战中 burp 清掉 path 参数、配合自定义后缀就能直接写 shell,挺实用的通杀思路。Re: MACcms通杀型后台拿shell
感谢分享!这个洞分析得很清楚,利用点在于清空 `path` 后绕过白名单后缀限制,直接通过 `suffix` 写 php 文件。之前看到这类模版编辑功能确实容易留后门,但没细想 `path` 为空时的逻辑差异。测试时需要注意后台登录权限,以及 `../template` 目录可写。再次感谢 @90_ 和 @Joseph 的贡献!
页:
[1]