![是否可以利用使用 XML 覆盖文件的能力来执行代码?](https://linux22.com/image/133810/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%88%A9%E7%94%A8%E4%BD%BF%E7%94%A8%20XML%20%E8%A6%86%E7%9B%96%E6%96%87%E4%BB%B6%E7%9A%84%E8%83%BD%E5%8A%9B%E6%9D%A5%E6%89%A7%E8%A1%8C%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
我们有一个 Ubuntu 18.04 用户,通过 SSH 连接并具有受限制的 shell。更准确地说,/etc/passwd 中的 shell 是 /bin/bash,但其中的command=
设置authorized_keys
限制它们运行 Python 脚本。除其他外,该脚本将一些用户提供的数据写入文件。文件路径也可以由用户操作。假设攻击者能够利用此漏洞覆盖任意文件(用户具有写入权限)。他们能否利用这一点以该用户身份执行任意代码,从而实际上获得不受限制的 shell?
攻击者控制的数据并不位于文件的开头,而是包装在 XML 中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<blah>
<blah blah="ATTACKER_CONTROLLED_DATA" />
<blah>
我尝试.bashrc
用类似的东西覆盖
<?xml version="1.0" encoding="utf-8"?>
<blah>
<blah blah=""
echo exploit?
"" />
<blah>
但 bash 无法解析它,因此它不会执行。
用户无法直接覆盖这些authorized_keys
文件,因为该文件由 root 用户拥有并且具有只读访问权限。与目录相同.ssh
。它对其主目录具有写访问权限,但脚本无法移动/删除目录。
显然这是理论上可以利用,但我想证明它确实可以发生。
答案1
如果数据输出文件路径可以由用户操作,并且其写入的数据是用户提供的,则该用户可以有效地将任何内容写入他们具有写访问权限的任何位置。
您已经通过 SSH 进行了执行限制,这应该会阻止用户执行他们可能留下的代码,这是一个好的开始。如果您不小心,他们可能会更改在服务/服务器重新启动时生效的配置文件,或者更改服务脚本以在正常进程运行时执行额外的操作。
如果您不希望他们设置其.bashrc
,为什么要授予他们对该文件的写入权限?确保您的权限设置正确,以便恶意用户无法通过覆盖任何内容来通过该脚本造成任何问题,本质上只允许他们写入您希望写入数据的确切位置。