好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

maccms8由于涉及缺陷可以再系统内部随意创建文件

maccms8 由于涉及缺陷可以再系统内部随意创建文件目录(开启文件缓存!!!!!!)

今天在查看苹果cms的时候发现一个任意创建文件目录的代码,本想着可以任意创建文件,但是由于对于文件各方面的过滤,还有一些目录遍历方面的过滤,只能审计到此,啥也不说了,直接看代码

index.php(41-42):  

$tpl->ifex(); setPageCache($tpl->P['cp'],$tpl->P['cn'],$tpl->H); $tpl->run(); echo $tpl->H;

setPageCache这个函数功能就是把页面内容缓存起来,那么我们进入到缓存的函数里面查看  

function setPageCache($cp,$cn,$cv) { if($GLOBALS['MAC']['app']['dynamiccache'] ==0){ return false; } $cf = MAC_ROOT.'/cache/'.$cp.'/'.$cn.'. html '; $path = dirname($cf); mkdirs($path); @fwrite(fopen($cf,'wb'),$cv); }

这时候我们看到了 这里有一个mkdirs($path),那我们可不可以在cache底下随意穿件我们认为的文件名,由于苹果cms的请求机制都是伪静态的,而且与$cp和$cn相关的地方都进行了初始化,或者说是进行了转移,那么我们是否可以找到一个部队$cp做任何处理的请求呢,经过一番苦苦寻觅,如下: module/comment.php的save函数存在这样的可能  

elseif($method=='save') { $c_vid = intval(be("all", "vid")); $c_name = be("all", "c_name"); $c_type = intval(be("all", "aid")); $c_content = be("all", "c_content"); $c_code = be("all","c_code"); if($c_type>=16 && $c_type<=18){ $c_type=16; } if (isN($c_name) || isN($c_content)){ echo '请输入昵称和内容'; exit; } //if ($MAC['other']['commentverify']==1 && $_SESSION["code_comment"] != $c_code){ echo '验证码错误'; exit; } if (getTimeSpan("last_commenttime") < $MAC['other']['commenttime']){ echo '请不要频繁操作';exit; } $pattern = '/[^\x00-\x80]/'; if(!preg_match($pattern,$c_content)){ echo '内容必须包含中文,请重新输入!';exit; } $c_name = badFilter($c_name); $c_content = badFilter($c_content); $c_ip = ip2long(getIP()); $c_time = time();

发现没有进行任何处理,这里我们注释掉验证码检测部分(之后输入验证码,截获发出去就行) url: http://192.168.10.70/maccms8_mfb_/maccms8_mfb/index.php?m=comment-save-cp-testdir-cn-a%2500sdasda post_data: c_content=请输111&c_name=2222&c_code=xxxx 如图所示:  

下来我们去cache文件夹底下查看:  

看似危害不大,我们猜想一下,如果页面有一个反射型xss,那么该反射性就会被缓存到cache里面,转白成为了真真正正的存储型,而且 无限制的创建文件 修复方案:

对不适用到cp的地方做初始化

查看更多关于maccms8由于涉及缺陷可以再系统内部随意创建文件的详细内容...

  阅读:54次