0x01 其他
在分析yxcms的sql注入之前, 我看了一下appmanage
模块下的index
有个在线安装模块引起了我的注意:
<?php
//在线安装
public function onlineinstall()
{
$url = $_GET['url'];//在线安装地址
if( empty($url) ){
$this->error('参数传递错误');
}
$content = file_get_contents($url);
if( empty($content) ){
$this->error('数据下载错误');
}
$zip_file = BASE_PATH . 'cache/tmp/' .md5($url) .'.zip';
if( file_put_contents($zip_file, $content) ){
$this->import($zip_file);
}else{
$this->error('数据写入错误');
}
}
直觉告诉我这个地方应该又问题。这是一堆死代码,但是可以通过url访问。他会通过url读入你的安装模块,并调用import
方法。 1. 如果我能阻止import
里的unlink,那么这个zip包就被file_put_contents
到了可访问的位置,而且就算不unlink我也可以条件竞争啊。我没试,这是后台洞,我开个脚本一直抢,然后csrf?
- 再看
import
:
如果$zip_file
存在的话,就完美绕过了$this->isPost()
中的csrf检查。
然后然后如果解压成功,我们只要满足app格式的要求在压缩包文件夹里放一个config.php
, 那么就能把这个文件夹传到apps里面去。问题就在这里
这个解压功能不能用!正常功能也不能用,有没有人还在维护这个项目,帮我修复这个bug啊