SQL注入绕waf姿势:AND和OR被过滤了怎么办?

2025-04-03 2 0

引言

嘿嘿,没有,单纯就想教会所有人绕WAF

需要准备的环境

1. sql-labs靶场

2. 安全狗WAF

3. 思考的思维(嘿嘿)

为什么写?

首先我们常说的八种符号:

and 、 &&、or 、 ||、xor 、 |、not 、 !

他们的关系是这样的:

and = &&、or = ||、xor = |、not = !

我不知道有多少人看过这个关系式子,但说实话,我在找绕waf的文章的时候,10篇文章有8篇文章都提到了这些。但却没有提到具体应该怎么用,愁啊 。因为也误导了我挺久,直到我真正下定决心开始绕WAF的现在,才弄明白一些东西。

以这八个常见的测试SQL点为题,给它一一的抽丝剥茧!!!

总而言之,言而总之,今天我们要将其掰开一个程度,进入一个深度,而不是只停留在公式化的关系上。

系列大饼

我打算从绕SQL注入点为开始,绕时间注入,绕注入数据库,绕注入数据库实际数据,一一的写过去,让所有人都能学会绕WAF(嘿嘿,不一定实现),因为之前写过一篇绕IF过滤的,感觉其实并不好,看完以后有人反馈学不到啥,所以我以后的文章都会实战结合~

你能获得什么

1.得到一个AND和OR的绕WAF的payload

2.得到一个NOT绕WAF的payload

3.学会绕WAF的思维

正式开始

先了解一些基础吧~

AND

要求两侧条件均为真才会返回结果
OR 只需一侧条件为真即返回结果
XOR 要求两侧条件一真一假才返回真
对 id 和 SLEEP(5) 的二进制值进行按位或运
! 反转右侧条件的结果。
NOT 反转右侧条件的结果

当然这上面不重要,重要的看下面

知识点一:ANDOR和&&和||

场景:

SELECT * FROM WHERE Limit 1,1

一个简单的SQL语句,时间注入探测SQL注入点:

1' or sleep(5)-- -

1' and sleep(5)-- -

区别在什么地方?

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图1

你知道是为什么吗?

具体的解释可以图文解释可以参考:

SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户中的知识点四:IFNULL(a, b)语法

​**OR的本质**:相当于“无条件全选”,因 True 覆盖了所有可能性。

​**AND 的严格性**:必须所有条件同时满足,True 的存在仅作为冗余条件,不影响核心逻辑。

简单来说就是AND他只会检查id=1的这一行,OR他会检查这张表的所有行,检查一次执行一次sleep(5),这个表如果有10行,那么OR延时的就是10次,10*sleep(5),最终导致连接超时。

ANDOR还需要注意第二点是什么呢?那就是,除了返回10,还会返回一个null

AND --> 当所有操作数均为非零值且不为 NULL 时返回 1;任一操作数为 0 时返回 0;其他情况返回 NULL

OR --> 当任一操作数为非零值时返回 1;所有操作数为 0 时返回 0;若存在 NULL 且其他操作数非零则返回 1,否则返回 NULL

看解释就复杂了许多,其实并不是什么很难懂的东西

AND NULL 会使得整个条件的逻辑结果变为“未知”(即 UNKNOWN)

而 SQL 的 WHERE 子句仅接受“真”条件,因此会排除该行数据。

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图2

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图3

主播主播,结果上没有区别呀?

嘿嘿,那我们开启安全狗的WAF试试。

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图4

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图5

诶,这里是不是绕WAF了,是不是绕过了?对的,没错,这就是绕了安全狗的WAF成功探测到SQL注入点。

但这不是重点嗷,重点是我们可以明确两个概念:

ANDOR返回的不仅仅是10,还可能会返回null

null0不是一样的,null代表的是空

​示例查询 1:SELECT * FROM users WHERE AND 0

逻辑结果:0 导致条件恒假 → 无数据返回。

​示例查询 2:SELECT * FROM users WHERE AND NULL

逻辑结果:NULL 使条件变为“未知” → SQL 默认排除“未知” → 无数据返回。

可能有新手师傅不太理解

返回10,为什么很多人会称之为真和假、TrueFalse

这里就再提一次,引用一下我写的文章中的内容

SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图6

所以正确的说法是,10相当于truefalse,是为了让别人更好的理解,并不是ANDOR真的会返回truefalse。

|| 和 && 也是同理。
SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图7SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图8

那么AND=&&, OR=|| 真的成立吗?不成立,他们是有区别的!优先级上的不同。但因为不是主要需要讨论的问题,所以这里就只是提一嘴~

知识点二:XOR 和 | 

| 是位运算符,对 id 和 SLEEP(5) 的二进制值进行按位或运

XOR| 在网络上,也常常被大家看到吧,关系是一个等于的符号XOR = |

但我们抽丝剥茧看看是不是一回事。

首先是XOR,两侧条件一真一假才返回真是我们大部分知道的,但如果两侧的条件同时为真呢?回返回假吗?

试试就知道了:

SQL注入绕waf姿势:AND和OR被过滤了怎么办?插图9

id=1存在为true0会被隐性的转换为false,那么一真一假,会返回真。那么就会查询id=1的字段

当然XOR返回的其实也是10,并不是truefalse

再理一遍逻辑:id='1'XOR 0 ,在表达式中,id=1是存在这行数据的,所以会返回1


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

80端口深度解析:从协议原理到工程实践
那我问你,MCP是什么?回答我!
EMBA 安装与使用
2025年最佳渗透测试工具Top 30榜单
城堡的小门:v8类型混淆漏洞CVE-2024-4761分析
【企业src】 金融水洞小技巧

发布评论