如何绕过 WAF 和本地防火墙双重防护?
waf 拦截
在打某市 Hvv 第一天就找到一个文件上传的点,经过测试,可以直接任意文件上传,没有什么道理。
直接尝试上传 Php 文件,被 waf 拦截了
2021最新整理网络安全/渗透测试/安全学习/100份src技术文档(全套视频、CTF、大厂面经、精品手册、必备工具包、路线)一>获取<一
尝试了一系列的绕过,发现利用换行+chunk 可以过后缀
之后就要过内容检测的 waf,但是在这里死活过不去
Webshell 内容+chunk 编码过后缀 会提示 502
之后尝试上传 txt,想先看看能不能先绕过内容检测,发现这个 waf 检测不能同时存在<? 和 ()如<?phpinfo(); 这种语句,就会被拦截。因为他同时出现了<?和 ()如果你的内容检测没有同时出现()和<?时,就可以过内容检测,不知道市面上有没有这种类型的 webshell,我找了一圈好像都有。
host 碰撞绕过
该站点为某个单位的类似官网的站点,然后网站有超链接,该超链接定向跳转到某些 ip
因为这种单位很喜欢将自己的服务器部署在 C 段的分散的 IP 上,于是猜测,这个类似官网网站的站点也很有可能就搭建在这个超链接的 C 段上,我们不妨 host 碰撞一下,如果找到了真实 IP 的话,那么久可能绕过云 waf
于是直接用 host 碰撞的 py 脚本去碰撞一下该 C 段 IP,发现居然成功了。
直接修改 Target 为碰撞出来的真实 IP,之后就不用 chunk +后缀换行也能过后缀 waf 拦截了(需要换行,不用 chunk)。
但是这里内容检测还是过不了,但是不会显示云 waf 地址或者 502 了,猜测肯定是过了 cdn, 但是不知道是什么拦截住了(可能为本地的硬件防火墙)
content-Encoding 绕过
于是翻了翻笔记,找到以前屡试不爽的上传 Tips ————添加 Accept-Encoding: deflate 发现这种方法已经过时了,换成 Accept-Encoding: gzip 发现还是过不了这个拦截
在 http 协议中,可以对内容(也就是 body 部分)进行编码, 可以采用 gzip 这样的编码。从而达到压缩的目的。也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
Accept-Encoding——浏览器发给服务器,声明浏览器(客户端)支持的编码类型。当服务端接收到请求,并且从 header 里拿到编码标识时,就可以选择其中一种方式来进行编码压缩,然后返给客户端。
发现还有一个 header 字段 Content-Encoding 这个字段大概意思是:决定文件接收方将以什么形式、什么编码读取这个文件,指定服务器响应的 HTTP 内容类型。
一般来说:
尝试了一下,发现 content-Encoding 居然可以绕过
如果没找到真实 IP,这样也是过不了的。
之后就可以直接上传了。但是后来发现该服务器的 disable_function 贼难绕,这是后话了。
总 结:
gzip 也是能绕的
评论