MYSQL注释:
Mysql中存在4种注释 我们可以利用这四种注释达到一些我们想要的效果分别是:
1,--
2,/**/
3,#
4,;%00
内联注释:
1,/*!*/,2,/*!50001*/
内联注释的意义:
1,内联注释是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!...*/中
2,这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别,执行。
3,/*!50001*/表示数据库版本>=5.00.01时中间的语句才能被执行
在下面的语句中,我使用了内联注释但Mysql依然执行了我的语句
- mysql> select Host from user where User="root" /*!and*/ 1=1;
- +-----------+
- | Host |
- +-----------+
- | 127.0.0.1 |
- | ::1 |
- | localhost |
- +-----------+
- 3 rows in set (0.01 sec)
复制代码
WAF的种类:
1,云WAF
2,主机WAF
3,网关WAF
4,源码WAF
网关WAF的绕过:
各位可以看下上面那张图 我们从外网访问的所有流量都会经过网关设备 网关会将流量进行过滤
如果存在危险请求网关会将这个请求包丢弃。如果不存在危险请求网关会放行。
那么此时有一个假设 能否发送长请求来阻塞网关?答案是可以的。我们考虑到了网关的开发者也会考虑到这个问题
所以网关一般会设置一个阈值如果请求长度超过这个阈值就不进行检测。当请求不进行检测的时候会有两个选项:
放包
丢包
答案不言而喻 网关会放包 因为网关不知道他后面的业务是干嘛的。有什么用?所以我们一般可
以使用垃圾请求去超过网关WAF的阈值来绕过网关WAF:
- a=xxxxxxxxxxxxxxxxxxxxxxx*?&id=1 and 1=2 union select ....
复制代码
这个就是超长字符串绕过网关WAF的原理了。
云WAF:
相信用过百度云CDN或者是其他CDN的朋友都能从中发现点什么?所谓的云WAF其实就是将你域
名的解析权交到运营商手中在由运营商去寻找离你最近的服务器进行转发 而转发的过程中会检测
你的请求包是否存在危险请求。
当我们不能确定对方是主机WAF或者云WAF时可以尝试使用超级ping去看IP:
上图是没有CDN超级ping的解析情况,下图是用了CDN超级ping的解析情况:
知道原理后我们绕过云WAF的方案也呼之欲出 找到真实IP去直接绑定他就能绕过云WAF了。
源码WAF与主机WAF的区别
我们应该如何去区分源码WAF和主机WAF 其实非常简单。有如下一段脚本:
- <?php
- if(strpos($_GET['s'],'select')>0){
- echo "危险请求";
- }
- ?>
复制代码
当我们在url中输入:http://www.redsec.club/index.php?s=a select,那么页面会显示危险请求但是当我们输入
http://www.redsec.club/index.php?aaa=a select页面则不作任何响应。因为服务器端的脚本并没有接收aaa参
数但主机WAF则不同,尽管你脚本没有接收到。但是主机WAF却接收到了 所以还是会拦截你。
主机WAF的绕过(以某狗为例):
假如有这样一个注入点:http://www.redsec.club/index.php?id=1:
那么我们输入http://www.redsec.club/index.php?id=1 and 1=1 会被拦截:
因为我们触发了SafeDog的拦截规则 在此尝试将and包含进入注释中:
当危险语句被注释后安全狗会放行
我们思考一个问题:动态脚本会处理id参数 但是不会处理其他参数 而安全狗会接收到其他参数
所以我们能否在其他参数上面进行注释然后绕过安全狗呢?
很轻松就绕过了安全狗,为什么?因为安全狗接收到的请求为:
- /index.php?qtcs=-- -a/*qwer&id=1 and 1=1&qerr=*/
复制代码
他认为我们的语句已经被注释掉了 所以会给我们放行,而实际上qtcsqerr都是垃圾参数并没有被我们
的动态脚本所处理。所以也不会影响程序功能。
当加上测试:
绕过: