引言
嘿嘿,没有,单纯就想教会所有人绕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 | 反转右侧条件的结果 |
当然这上面不重要,重要的看下面
知识点一:AND和OR和&&和||
场景:
SELECT * FROM WHERE Limit 1,1
一个简单的SQL语句,时间注入探测SQL注入点:
1' or sleep(5)-- -
1' and sleep(5)-- -
区别在什么地方?
你知道是为什么吗?
具体的解释可以图文解释可以参考:
SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户中的知识点四:IFNULL(a, b)语法
**OR的本质**:相当于“无条件全选”,因 True 覆盖了所有可能性。
**AND 的严格性**:必须所有条件同时满足,True 的存在仅作为冗余条件,不影响核心逻辑。
简单来说就是AND他只会检查id=1的这一行,OR他会检查这张表的所有行,检查一次执行一次sleep(5),这个表如果有10行,那么OR延时的就是10次,10*sleep(5),最终导致连接超时。
AND与OR还需要注意第二点是什么呢?那就是,除了返回1和0,还会返回一个null
AND --> 当所有操作数均为非零值且不为 NULL 时返回 1;任一操作数为 0 时返回 0;其他情况返回 NULL
OR --> 当任一操作数为非零值时返回 1;所有操作数为 0 时返回 0;若存在 NULL 且其他操作数非零则返回 1,否则返回 NULL
看解释就复杂了许多,其实并不是什么很难懂的东西
AND NULL 会使得整个条件的逻辑结果变为“未知”(即 UNKNOWN)
而 SQL 的 WHERE 子句仅接受“真”条件,因此会排除该行数据。
主播主播,结果上没有区别呀?
嘿嘿,那我们开启安全狗的WAF试试。
诶,这里是不是绕WAF了,是不是绕过了?对的,没错,这就是绕了安全狗的WAF成功探测到SQL注入点。
但这不是重点嗷,重点是我们可以明确两个概念:
AND与OR返回的不仅仅是1和0,还可能会返回null
null与0不是一样的,null代表的是空
示例查询 1:SELECT * FROM users WHERE AND 0
逻辑结果:0 导致条件恒假 → 无数据返回。
示例查询 2:SELECT * FROM users WHERE AND NULL
逻辑结果:NULL 使条件变为“未知” → SQL 默认排除“未知” → 无数据返回。
可能有新手师傅不太理解
返回1和0,为什么很多人会称之为真和假、True和False。
这里就再提一次,引用一下我写的文章中的内容
SQL注入绕WAF姿势:当if被过滤了怎么办? - FreeBuf网络安全行业门户
所以正确的说法是,1和0相当于true和false,是为了让别人更好的理解,并不是AND和OR真的会返回true和false。
|| 和 && 也是同理。
那么AND=&&, OR=|| 真的成立吗?不成立,他们是有区别的!优先级上的不同。但因为不是主要需要讨论的问题,所以这里就只是提一嘴~
知识点二:XOR 和 |
| 是位运算符,对 id 和 SLEEP(5) 的二进制值进行按位或运
XOR和| 在网络上,也常常被大家看到吧,关系是一个等于的符号XOR = |
但我们抽丝剥茧看看是不是一回事。
首先是XOR,两侧条件一真一假才返回真是我们大部分知道的,但如果两侧的条件同时为真呢?回返回假吗?
试试就知道了:
id=1存在为true,0会被隐性的转换为false,那么一真一假,会返回真。那么就会查询id=1的字段
当然XOR返回的其实也是1和0,并不是true和false
再理一遍逻辑:id='1'XOR 0 ,在表达式中,id=1是存在这行数据的,所以会返回1
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)