![dee74ae00e0e7bc5dc215775fdf19a83.png](https://i-blog.csdnimg.cn/blog_migrate/db6b5cd39082fce55560ced081f875d2.jpeg)
本文作者:霾
团队交流群:673441920
-----------------------------------------------------------
前言
POC镇楼!!!
POST
漏洞演示过程:
首先我们利用D盾监听下我们的项目以外的目录。
![1358eda9ade7801b853d11fea6a68dab.png](https://i-blog.csdnimg.cn/blog_migrate/8034ac8ad8c74d66a41bb762b246708c.jpeg)
这里刚刚我们创建了这个文件现在我们要从CMS去删除他。
![acfe67a480b8231d485777ed6db58d5b.png](https://i-blog.csdnimg.cn/blog_migrate/696b084cbcc988501c79468329558693.jpeg)
随便找了一个目录去点击,然后我们用burp去抓包。
![e0488945dd0316af4000f70fd5759ec3.png](https://i-blog.csdnimg.cn/blog_migrate/c516516105c9cf42e03dd92759ec66d7.jpeg)
我们去修改下fname这个参数再去删除
![297bbacb67c95114e3ebc846cf5cada5.png](https://i-blog.csdnimg.cn/blog_migrate/dc5e8af97b9f60c541647eff529db95c.jpeg)
这里可以看到我们的文件和文件夹都给删除了。
漏洞审计:
路径:controladmin_filemanager.php
![0b99ea123e44c3380fbc889678b90ea1.png](https://i-blog.csdnimg.cn/blog_migrate/2f7b03673d5dc27ed0978599c86b46bf.jpeg)
第158行,if(isset($this->post['currentdir']) && isset($this->post['fname'])),判断post中的currentdir是否有设置并且判断fname是否有设置。
第161行,if(!file_exists($fname)),判断文件或者目录是否存在。
第164行,if($this->post['isdir']== '0'),判断isdir的值是否等于0。
第165行,@unlink($fname);,删除文件。
第167行,else if($this->post['isdir'] == '1'),或者判断isdir的值是否等于1。
第168行,$str=$_ENV['dir']->dir_delete($fname);,进入自定义方法。
路径:modeldir.class.php
![463c2390909e0e1f05402c654e22acb1.png](https://i-blog.csdnimg.cn/blog_migrate/19e47b28712da6a2727d62b5d96006b8.jpeg)
第46行,if(!is_dir($dir)) return FALSE;,判断是否是目录。
第47行,$systemdirs = array('', HDWIKI_ROOT.'control', HDWIKI_ROOT.'langzh', HDWIKI_ROOT.'data', HDWIKI_ROOT.'model', HDWIKI_ROOT.'view', HDWIKI_ROOT.'install', HDWIKI_ROOT.'js', HDWIKI_ROOT.'lib', HDWIKI_ROOT.'plugins', HDWIKI_ROOT.'block', HDWIKI_ROOT.'api', HDWIKI_ROOT.'lang', HDWIKI_ROOT.'ss');,声明自定义的路口
第48行,if(substr($dir, 0, 1) == '.' || in_array($dir, $systemdirs)) exit("Cannot remove system dir $dir !");,substr代表字符串切割并且等于.,或者判断数组是否存在值。
第49行,$dir=$dir."";,声明一个变量。
第50行,$list = glob($dir.'*'),glob代表返回匹配指定模式的文件名或目录。
第51行,foreach($list as $v),foreach循环。
第52行,is_dir($v) ? $this->dir_delete($v) : @unlink($v);,3元运算符,is_dir判断是否是目录,如果是目录那么就递归,如果不是目录那么就删除文件。
第54行,@rmdir($dir);,删除文件夹。
漏洞修复:
利用str_replace去吧字符串过滤掉。
![38b0444f6b3892eb3528fbbb27997f0e.png](https://i-blog.csdnimg.cn/blog_migrate/9b306d6f2c8ec928c7c2d5b1057bb3d9.jpeg)