代码审计:百家CMSv4.14

前言

本章使用百家CMS v4.14作为代码审计

环境为 Win7 + PHPstudy

安装

1.把下好的百家CMS源码文件baijia放到phpStudyWWW目录下

2.访问地址:http://localhost/baijia/index.php 就会进入到安装界面,按照提示配置好参数,注意数据库用户名和密码要与你的mysql匹配

3.再访问:http://localhost/baijia/index.php,可以看到已经安装好了

漏洞

我们使用Seay源代码审计系统自动审计下

image-20230727103929770

1、后台任意路径删除

漏洞点:/includes/baijiacms/common.inc.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function rmdirs($path='',$isdir=false)
{
if(is_dir($path))
{
$file_list= scandir($path);
foreach ($file_list as $file)
{
if( $file!='.' && $file!='..')
{
if($file!='qrcode')
{
rmdirs($path.'/'.$file,true);
}
}
}

if($path!=WEB_ROOT.'/cache/')
{
@rmdir($path);

}
}
else
{
@unlink($path);
}
}

判断 $Path 是否为目录,不是目录直接 unlink 删除,如果是目录的话遍历文件和子目录将结果存入 $file_list 列表中,foreach 循环遍历目录中的文件和子目录,在循环中排除当前目录和上级目录,判断子目录名称如果不是 qrcode 就继续递归 rmdirs ,在处理完目录下文件和子目录,尝试删除自身,条件是自身不为 cache

这里我们搜索全局调用 rmdirs 函数,在 /system/manage/class/web/database.php 处调用了

1
2
3
4
5
6
7
8
9
10
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' => 'manager','do' => 'database','op'=>'restore')),'success');
}
}

功能是删除备份文件

利用

在后台删除备份文件时抓包

image-20230727150927121

image-20230727151148855

修改id处为我们要删除的目录,base64加密下,这里我们创建一个test文件夹,将 ../../test base64后填入id重放

即可任意删除目录