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攻击?

防御建议包括深度协议解析、动态行为监控、框架补丁管理和流量基线分析。

🏷️

标签

➡️

继续阅读