Java webshell的绕过
💡
原文中文,约8300字,阅读约需20分钟。
📝
内容提要
本文介绍了多种Java WebShell绕过WAF的技术,包括基础绕过、类加载、EL表达式注入和反射混淆,旨在规避静态检测和黑名单。通过动态注册Filter、利用JNDI和分块传输等手段,实现无文件持久化和隐蔽攻击。同时,提出了防御建议,如深度协议解析和动态行为监控。
🎯
关键要点
- 基础绕过:使用混淆和编码技术绕过静态检测,避免明文命令暴露。
- 类加载绕过:自定义ClassLoader直接加载字节码,绕过黑名单检测。
- 利用框架特性:通过EL表达式注入执行命令,绕过静态检测。
- 反射+字符串拆分:动态拼接方法名,隐藏敏感方法名以绕过静态匹配。
- 内存马:通过动态注册Filter实现无文件持久化,隐蔽性强。
- 利用JNDI绕过:结合JDK特性绕过RASP检测,加载恶意类。
- 协议层绕过:使用分块传输编码绕过WAF对固定长度内容的检测。
- 框架特性利用:通过OGNL表达式拼接绕过Struts2的关键词拦截。
- 动态代理与Lambda表达式:隐藏恶意代码执行链,难以被静态分析捕获。
- JNI调用:通过Java Native Interface调用本地代码,绕过Java层检测。
- 内存马注入:基于Java Agent的无文件驻留,动态修改字节码。
- 利用Java反序列化漏洞:通过混淆和编码绕过WAF,执行命令。
- HTTP参数污染与畸形请求:利用HTTP协议解析差异绕过WAF规则。
- 防御建议:深度协议解析、动态行为监控、框架补丁管理和流量基线分析。
❓
延伸问答
Java WebShell绕过WAF的基本技术有哪些?
Java WebShell绕过WAF的基本技术包括基础绕过、类加载绕过、EL表达式注入和反射混淆等。
如何利用反射和字符串拆分来绕过静态检测?
通过将方法名拆分为多个部分动态拼接,然后使用反射调用,可以绕过静态检测。
什么是内存马,它是如何实现无文件持久化的?
内存马是通过动态注册Filter或Servlet实现的,能够在内存中执行恶意代码而不写入文件。
如何通过JNDI绕过RASP检测?
通过利用JNDI特性,结合特定JDK版本,可以加载恶意类,从而绕过RASP检测。
分块传输编码是如何帮助绕过WAF的?
分块传输编码可以将恶意代码拆分成多个块,避免WAF对固定长度内容的检测。
有哪些防御建议可以抵御Java WebShell攻击?
防御建议包括深度协议解析、动态行为监控、框架补丁管理和流量基线分析。
➡️