是否有可能通过 root 拥有且全局可写的损坏的符号链接成为 root?

信息安全 linux 开发 特权升级 符号链接
2021-08-13 07:44:22

我正在寻找服务器上的漏洞。我正在查看/var目录,我得到了这样的东西:

drwxr-xr-x  3 root root 4.0K Aug 14 21:02 kerberos
drwxr-xr-x 12 root root 4.0K Nov 11 05:04 lib
drwxr-xr-x  2 root root 4.0K Jun 10  2014 local

lrwxrwxrwx  1 root root   11 Aug 14 21:00 lock -> ../run/lock     <-- CHECK THIS

drwxr-xr-x  3 root root 4.0K Aug 14 21:05 log
lrwxrwxrwx  1 root root   10 Aug 14 21:00 mail -> spool/mail
drwxr-xr-x  2 root root 4.0K Jun 10  2014 nis
drwxr-xr-x  2 root root 4.0K Jun 10  2014 opt
drwxr-xr-x  2 root root 4.0K Jun 10  2014 preserve
lrwxrwxrwx  1 root root    6 Aug 14 21:00 run -> ../run
drwxr-xr-x  4 root root 4.0K Aug 14 21:00 spool

如果我查看lock“文件”的权限,我会看到其他人的权限是rwx. 因此,我想另一个不是所有者的用户(在这种情况下为 root)可以读取、执行和写入这个“文件”,所以我检查了什么样的文件lock

file lock
lock: broken symbolic link to `../run/lock'

stat lock

File: ‘lock’ -> ‘../run/lock’
  Size: 11          Blocks: 0          IO Block: 4096   symbolic link
Device: fb01h/64257d    Inode: 6424574     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-11-14 00:18:52.218518690 +0000
Modify: 2015-08-14 21:00:52.000000000 +0000
Change: 2015-11-11 04:56:35.543404826 +0000
 Birth: -

根据这个信息,是否可以获取root,使用这个权限访问其他信息或执行命令?

例如我试过:

echo  "ls /etc" >> lock

但我明白了Permission denied

一些问题:

  1. 我对锁定权限的解释是否正确?

  2. 我可以做些什么来利用这个损坏的符号链接获得优势吗?

  3. 这个损坏的符号链接必须问什么样的问题?

2个回答

符号链接上的权限大多是没有意义的。如果您没有读取权限,则看不到它指向的位置,如果您没有写入权限,则无法重新定位它,仅此而已-实际上是创建具有 0777 以外权限的链接是相当的伎俩。链接目标上的权限决定了您可以对目标执行的操作:如果您要用您创建的文件替换根拥有的断开链接的目标,则目标将归您所有,并且无论如何都会采取适当的行动无论您是直接访问还是通过链接访问。

不,通常不可能使用此类链接获得 root 权限。

要回答您更具体的问题:

1.我对锁权限的解释是否正确?

如果此“文件”是实际文件而不是符号链接,则您的解释会正确,但事实并非如此。

符号链接(又名符号链接)权限几乎总是被忽略:符号链接从它们指向的文件继承它们的实际权限,rwxrwxrwx显示的权限可以仅仅被视为填充。确实如此,以至于POSIX 标准甚至没有定义操作系统应该为符号链接显示哪些权限:

创建的符号链接的文件模式位的值未指定。POSIX.1-2008 指定的所有接口都应该表现得好像符号链接的内容总是可以被读取,除了在 stat 结构的 st_mode 字段中返回的文件模式位的值是未指定的。

一些系统显示所有权限位集(rwxrwxrwx,如您的情况),其他一些显示链接文件的权限(如果存在),一些系统做一些更花哨的东西(如链接和目标权限之间的按位操作...... )。

我在上面说过,这些权限几乎总是被忽略,这是因为在少数操作系统上并不完全正确。例如,Mac OS X 系统偏离了上面引用的 POSIX 标准,并且读取权限控制了链接​​解析能力,这在安全性方面几乎没有影响(无论好坏)(它只是使系统更难维护)。

那么,考虑到所有这些,您目前对这个断开的链接的许可是什么?如果存在,则与目标相同但是,由于目标不存在,即使您有足够的参数,您也不能对链接进行任何操作(这就是它被破坏的原因:它只是不起作用)。

2. 我可以做些什么来利用这个损坏的符号链接获得优势吗?

断开的链接本身并不异常,也不存在任何安全漏洞。您经常会在使用chroot或网络共享的环境中发现此类断开的链接,其中符号链接只会成功解析您使用正确的根目录或已安装正确的网络共享的链接。

3. 这个损坏的符号链接必须问什么样的问题?

您有一个链接,其路径/var/lock指向不存在的目录/run/lock您只需篡改这两条路径中的一条即可接管该/var/lock路径。

  • 您是否对目标的父目录或构成其路径的目录具有写权限?如果是,您将能够创建并接管丢失的目录。如果没有,您将无法以任何方式篡改丢失的目标目录:它将一直丢失。
  • 您是否对链接的父目录或组成其路径的目录具有写权限?是的,您将能够用另一个链接替换链接,指向您拥有的目录(/home/myuser/fakelock例如指向),从而控制应用程序尝试放入var/lock路径中的所有锁。

如果你对这些目录都没有写权限,那么你就完蛋了,只需要继续你的调查:这里没有什么可以利用的。