Java漏洞在黑盒实战中的技巧——JNDI注入篇

💡 原文中文,约7000字,阅读约需17分钟。
📝

内容提要

JNDI注入利用Java资源访问接口,攻击者可通过控制查找地址加载恶意类,实现远程代码执行。关键条件为使用低版本Java和未过滤的输入点。漏洞可通过HTTP参数或文件上传构造Payload并发送。防御措施包括升级依赖、禁用JNDI功能和加强输入验证。

🎯

关键要点

  • JNDI注入利用Java资源访问接口,攻击者可通过控制查找地址加载恶意类,实现远程代码执行。
  • 关键条件为使用低版本Java和未过滤的输入点。
  • 漏洞可通过HTTP参数或文件上传构造Payload并发送。
  • 防御措施包括升级依赖、禁用JNDI功能和加强输入验证。
  • 黑盒发现JNDI注入漏洞的方法包括识别潜在输入点和构造探测Payload。
  • 利用步骤包括环境准备、生成恶意Payload和触发漏洞。
  • 典型案例包括Log4j2的Log4Shell漏洞,触发条件为使用Log4j2版本≤2.14.1。
  • 防御建议包括升级Log4j2到≥2.17.1,禁用JNDI功能和加强输入验证。
  • 实战技巧包括使用工具和混淆技术,优先在测试环境中验证Payload。
  • Fastjson反序列化漏洞中的JNDI注入利用步骤包括构造恶意RMI服务和发送构造的JSON Payload。
  • Spring框架中的JNDI注入利用步骤包括通过HTTP参数注入和结合SpEL。
  • Tomcat BeanFactory绕过JDK高版本限制的利用流程包括构造恶意服务端和触发漏洞。
  • LDAP协议结合UnboundID库的JNDI注入漏洞场景包括搭建LDAP服务器和触发LDAP查询。

延伸问答

JNDI注入是如何实现远程代码执行的?

JNDI注入通过控制查找地址,攻击者可以加载恶意类,从而实现远程代码执行。关键在于使用低版本Java和未过滤的输入点。

如何发现JNDI注入漏洞?

可以通过识别潜在输入点,如HTTP参数、文件上传和API接口,构造探测Payload进行验证。

有哪些防御JNDI注入的措施?

防御措施包括升级依赖、禁用JNDI功能、加强输入验证和使用WAF规则拦截可疑请求。

Log4j2的Log4Shell漏洞是如何被利用的?

攻击者通过在日志中注入JNDI Payload,触发JNDI解析,动态加载恶意类,影响Log4j2版本≤2.14.1。

在高版本Java中如何绕过JNDI的限制?

可以结合Tomcat的ELProcessor或Groovy等本地类进行二次攻击,绕过远程类加载的限制。

Fastjson反序列化漏洞中的JNDI注入是如何工作的?

攻击者通过@type属性指定恶意类,利用Fastjson的反序列化功能触发JNDI加载远程恶意类。

➡️

继续阅读