漏洞复现—Jenkins反序列化漏洞CVE-2017-100035/ CVE-2018-1000861

Jenkins反序列化漏洞CVE-2017-1000353/ CVE-2018-1000861

    • 基础知识
    • 漏洞原理
    • 涉及版本
    • 复现思路
    • 复现—CVE-2017-1000353 (使用vulhub靶场环境未复现成功,在本文中仅叙述原理和方法)
      • 代码层面学习
      • 攻击方法
    • 复现—CVE-2018-1000861
      • URL构造命令执行
      • 脚本命令执行

基础知识

  序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。
  java反序列化漏洞,一定是command在序列化信息中,反序列化时候直接执行了该命令。
  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

漏洞原理

CVE-2017-1000353

  该漏洞存在于使用HTTP协议的双向通信通道的具体实现代码中,jenkins利用此通道来接收命令,恶意攻击者可以构造恶意攻击参数远程执行命令,从而获取系统权限,造成数据泄露。

CVE-2018-1000861

  Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。

涉及版本

  CVE-2017-12149/CVE-2017-7504:
  Jenkins Version <= 2.56
  Jenkins LTS Version <= 2.46.1

复现思路

  1. 云主机的内置vulhub8080端口搭建实验靶场
  2. 加载攻击脚本,编译并生成序列化数据
  3. 序列化恶意数据至文件,将该文件作为请求数据主体发送数据包
  4. 云主机开启端口监听反弹过来的shell

复现—CVE-2017-1000353 (使用vulhub靶场环境未复现成功,在本文中仅叙述原理和方法)


  前情提要:云主机作为攻击方,云主机内部靶场镜像开启CVE-2018-1000861漏洞容器作为受害方。但由于靶场环境问题,并未复现成功。

  java反序列化漏洞,是在command在序列化信息中,反序列化时候直接执行了该命令,因此一般思路为先将攻击命令序列化到payload中然后发送给受害者,受害者在反序列化过程中命令执行。

代码层面学习

  1、首先要发送一个下载请求,这个请求是要启动一个双向数据传输频道。频道的标识就是session。而side字段则是用来标识传输方向
  2、然后是第二个请求:双向信道发送组件,第一个请求被阻塞,一直到第二个请求被发送。此时session与之前保持一致,side改成upload,(session是一个uuid,类型为4,对应即可)服务器端对应处理,反序列化command对象:

你可能感兴趣的:(渗透测试,jenkins,安全漏洞,安全)