Skip to content

7、Bypass WAF

炁 edited this page Oct 10, 2024 · 2 revisions

对于冰蝎和哥斯拉,他们自己在流量和Java层都有很多可以提取的特征,这里没有办法去管控,需要各位自行去魔改,其实也并不难。本项目把一些大家实现的比较类似的一些特征进行了去除。

在一些情况下,流量层的 WAF 会在对流量数据包解析时对关键字、关键特征进行匹配,例如反序列化流量包中出现的一些关键类的包名、类名,但是流量设备受限于性能影响,不会无限制的解析请求包,可能会影响到实际业务,因此一般会有解析的时间 上或长度上的阈值,超过该阈值,将放弃检查。

脏数据

因此本项目添加了为反序列化数据添加脏数据用来绕过流量层面的 WAF 的功能,在生成反序列化数据时,指定 -dt 参数,即可根据不同类型生成封装后的带有随机脏字符的反序列化数据包。

例如:

java -jar JYso-[version].jar -y -g CommonsBeanutils1 -p 'EX-MS-TEXMSFromThread' -dt 1 -dl 50000

可以生成填充了 50000 个脏字符的序列化数据

UTF-8编码

通过UTF编码对原始序列化数据中 TC_CLASSDESC、TC_PROXYCLASSDESC、TC_STRING 这些强特征来3字节加密

java -jar JYso-[version].jar -y -g CommonsBeanutils1 -p 'EX-MS-TEXMSFromThread' -utf

RASP 层面

对于漏洞执行常使用的 Runtime、URLClassLoader 等,很多 RASP 都进行了 Hook,在攻击时可能会被拦截,这里我使用了一些反射调用 native 方法之类的技术去尝试 RASP 的防御,具体的技术实现就不细说了,感兴趣的朋友可以反编译 jar 包查看相关代码。 可以使用 -o 参数指定使用绕过 RASP 的相关技术。

目前已支持动态生成混淆的类名,不存在任何 qi4l 关键字。

Clone this wiki locally