点击上方蓝字“Ots安全”一起玩耍
介绍
通常,每当在具有 python 文件的环境中引入攻击者时。攻击者可以用来提升其访问权限的选项是有限的。我们将在本文中发现 3 种方法。一些错误配置包括写入权限、sudo 权限和编辑路径变量。
Python脚本创建
为了演示使用 python 脚本提升权限的操作,我们创建了一个导入一些库的示例脚本。在现实生活中,这可以是一群开发人员正在开发的通用 Python 脚本或项目。在夺旗场景中,这些很容易找到,并且可能包含与此类似的脚本。该脚本导入 webbrowser 模块,然后继续使用 open 函数运行设备上的默认 Web 浏览器以打开 hackingarticles 网页。
nano hack.py
import webbrowser
webbrowser.open("https://hackingarticles.in")
cat hack.py
为了查看脚本是如何工作的,我们运行脚本并发现 Web 浏览器打开了 hackingaricles 网页,如下所示。
python3 hack.py
方法一
此漏洞基于应用于脚本导入的模块文件的权限。当正在导入的模块文件具有允许任何用户进行编辑的权限时,它就会成为一个漏洞。在我们创建的python脚本中;我们有被调用的 webbrowser.py 模块文件。当您拥有一个具有所有默认权限的未更改环境时,这不是问题,但在开发环境中,往往会因次要便利而牺牲一些安全性。为了更好地了解后台发生了什么,哪些权限会导致权限提升,我们将首先在我们的 ubuntu 环境中创建漏洞,然后使用 Kali Linux 来利用此漏洞。
漏洞创建
如前所述,在这种方法中,漏洞基于模块文件的权限。要创建此漏洞,我们需要先定位模块文件。我们使用 locate 命令来找到它。我们看到它位于/usr/lib/python3.8/里面。这可能因安装而异。因此,请尝试在您的环境中找到它。然后我们可以看到,模块文件默认的权限是拥有者的读、写、执行权限,组的执行和读取权限,只有其他的执行权限。这意味着除非用户是 root,否则它不能编辑文件。为了创建漏洞,我们更改了权限,以便每个用户都可以读取、写入和执行这些权限。这可以从下图验证。
locate webbrowser.py
ls -la /usr/lib/python3.8/webbrowser.py
sudo chmod 777 /usr/lib/python3.8/webbrowser.py
ls -la /usr/lib/python3.8/webbrowser.py
使我们的机器易受攻击的下一个任务是提供一种运行 python 脚本的方法。最简单的方法是在 sudoers 文件中创建一个条目,以便攻击者(可以访问用户 pavan)能够执行我们创建的 python 脚本 (hack.py)
nano /etc/sudoers
pavan ALL=(root) NOPASSWD: /usr/bin/python3.8 /home/pentest/hack.py
这是一个完整的过程,使机器容易受到 Python 库劫持。没有提到的所有配置都设置为Linux的默认值。没有进行任何其他更改。是时候冒充攻击者了。
开发
漏洞利用不会包含在目标机器上获得初始立足点的方法。它将包含在攻击者获得初始立足点后提升特权的方法。为了刺激这一点,我们作为用户 pavan 连接到目标机器。作为任何需要提升权限的攻击者,我们运行 sudo -l 命令来查看我们可以使用提升的访问权限运行哪些脚本或二进制文件。我们看到可以使用python3.8来运行hack.py。作为攻击者,我们使用 cat 命令调查脚本以查看它是否正在通过 webbrowser 的名称导入模块。我们使用locate命令查找模块的位置,发现它位于/usr/lib/python3.8里面。接下来,我们检查模块的权限,发现它可由我们有权访问的 pavan 用户写入。
ssh [email protected]
sudo -l
cat /home/pentest/hack.py
locate webbrowser.py
ls -la /usr/lib/python3.8/webbrowser.py
我们使用 nano 编辑器打开模块文件,并在 hack.py 文件调用的函数中添加了 python 反向 shell 脚本。我们之前看到它在浏览器中打开了一个网页。因此,它将使用 open 函数。因此,我们将添加如下所示的反向 shellcode。
nano /usr/lib/python3.8/webbrowser.py
编辑完模块文件后,我们保存并关闭编辑器。回到 Kali Linux 控制台,我们在反向 shell 脚本中提到的端口上打开一个 Netcat 侦听器,然后以 pavan 用户身份返回 shell 并使用 sudo 执行 hack.py 脚本,如图所示。
sudo /usr/bin/python3.8 /home/pentest/hack.py
一旦脚本运行,我们就会看到一个会话连接到我们的 Netcat 侦听器。whoami 命令阐明了我们拥有的会话是针对目标机器上的 root 用户的。我们已经成功地将权限从 pavan 用户提升到了 root 用户。
nc -lvp 1234
whoami
方法二
此漏洞基于 Python 库路径的优先级顺序,该路径应用于我们的脚本正在导入的模块文件。在脚本中导入模块时,Python 将在默认目录中按特定优先级顺序查找特定模块文件。在我们创建的python脚本中;我们有被调用的 webbrowser.py 模块文件。正在搜索的模块将位于默认路径之一。尽管如果在与原始脚本相同的目录中存在 python 模块文件,它将优先于默认路径。为了更好地了解后台发生了什么,它是如何导致权限提升的,我们将首先在我们的 ubuntu 环境中创建该漏洞,然后使用 Kali Linux 来利用该漏洞。
漏洞创建
如前所述,在这种方法中,漏洞基于模块文件执行的优先级顺序。要创建此漏洞,首先,我们需要恢复之前创建的易受攻击的权限。这样这台机器就不会以多种方式受到攻击。我们更改 webbrowser.py 的权限。
ls-la /usr/lib/python3.8/webbrowser.py
接下来,我们回到之前创建的 python 脚本。我们可以看到它位于 pavan 用户的家中,它仍然包含与我们开始时相同的代码。它仍然导入 webbrowser 模块。
ls
cat hack.py
由于我们将脚本从 pentest 用户主目录移动到 pavan 用户的主目录,我们还需要在 sudoers 文件中进行更改,以便它包含脚本 hack.py 的正确路径。
nano /etc/sudoers
pavan ALL=(root) NOPASSWD: /usr/bin/python3.8 /home/pavan/hack.py
这是一个完整的过程,使机器容易受到 Python 库劫持。没有提到的所有配置都设置为Linux的默认值。没有进行任何其他更改。是时候冒充攻击者了。
开发
同样,利用不会包含在目标机器上获得初始立足点的方法。它将包含在攻击者获得初始立足点后提升特权的方法。为了刺激这一点,我们作为用户 pavan 连接到目标机器。作为任何需要提升权限的攻击者,我们运行 sudo -l 命令来查看我们可以使用提升的访问权限运行哪些脚本或二进制文件。我们看到可以使用python3.8来运行hack.py。作为攻击者,我们使用 cat 命令调查脚本以查看它是否正在通过 webbrowser 的名称导入模块。
ssh [email protected]
sudo -l
ls
cat hack.py
由于 hack.py 位于 pavan 用户的主目录中,并且我们以 pavan 用户的身份访问,因此我们可以在主目录中创建一个文件。在这种情况下,需要注意的是我们无法编辑 hack.py 文件。如果是这种情况,我们将直接编辑该文件并在其中添加一个反向 shellcode,但在这种情况下,我们将创建一个 webbrowser.py 文件。我们将在我们刚刚创建的 webbrowser.py 文件中添加 python 反向 shellcode。
nano webbrowser.py
cat webbrowser.py
接下来,我们需要在我们在反向 shellcode 中提到的端口上运行一个 Netcat 侦听器。然后我们将继续使用 sudo 执行 hack.py 脚本。
sudo /usr/bin/python3.8 /home/pavan/hack.py
一旦脚本运行,我们就会看到一个会话连接到我们的 Netcat 侦听器。id 命令阐明了我们拥有的会话是针对目标机器上的 root 用户的。我们已经成功地将权限从 pavan 用户提升到了 root 用户。
nc -lvp 1234
id
方法三
此漏洞基于通过 Python PATH 环境变量搜索的 Python 库。这个变量包含一个目录列表,python 在其中搜索导入模块的不同目录。如果攻击者可以更改或修改该变量,则他们可以使用它来提升目标机器上的权限。为了更好地了解后台发生了什么,它是如何导致权限提升的,我们将首先在我们的 ubuntu 环境中创建该漏洞,然后使用 Kali Linux 来利用该漏洞。
漏洞创建
如前所述,这种方法的漏洞是基于环境路径变量的。要创建此漏洞,首先,我们需要恢复之前创建的易受攻击的权限。这样这台机器就不会以多种方式受到攻击。我们在 tmp 目录中创建 hack.py 脚本。我们可以验证脚本的内容和之前的一样。
cd /tmp
ls
cat hack.py
接下来,我们需要在 sudoers 文件中进行一些更改。首先,我们将文件的位置更改为 /tmp 目录,然后将 SETENV 标记添加到文件中。这意味着 pavan 用户可以使用具有 sudo 权限的 SETEV 命令,而无需输入 root 密码。SETENV 是一种工具,它可以更改 PYTHONPATH 环境变量的值,以将任何位置包含到我们在前面的方法中学到的执行顺序中。
nano /etc/sudoers
pavan ALL=(root) NOPASSWD:SETENV /usr/bin/python3.8 /tmp/hack.py
这是使机器容易受到 Python 库劫持的完整过程。没有提到的所有配置都设置为Linux的默认值。没有进行任何其他更改。是时候冒充攻击者了。
开发
同样,利用不会包含在目标机器上获得初始立足点的方法。它将包含在攻击者获得初始立足点后提升特权的方法。为了刺激这一点,我们作为用户 pavan 连接到目标机器。作为任何需要提升权限的攻击者,我们运行 sudo -l 命令来查看我们可以使用提升的访问权限运行哪些脚本或二进制文件。我们看到我们可以使用具有提升访问权限的 SETEV。这意味着我们可以使用它来改变导入模块的优先级顺序。由于 hack.py 位于 /tmp 目录中,我们进入它并检查 hack.py 脚本。
ssh [email protected]
sudo -l
cd /tmp
ls
由于它正在导入 webbrowser 模块,我们首先将创建一个名为 webbrowser.py 的恶意模块文件,然后使用更改环境变量 PYTHONPATH 的功能,我们将创建一个条目以包含我们的恶意模块文件。恶意模块文件包含反向shellcode。我们在脚本中提到的相同端口上启动一个 Netcat 侦听器,然后继续将 /tmp 目录添加到 Python 路径中,然后执行 hack.py 文件以提升我们的访问权限。
cat hack.py
nano webbrowser.py
cat webbrowser.py
sudo PYTHONPATH=/tmp/ /usr/bin/python3.8 /tmp/hack.py
一旦脚本运行,我们就会看到一个会话连接到我们的 Netcat 侦听器。whoami 命令阐明了我们拥有的会话是针对目标机器上的 root 用户的。我们已经成功地将权限从 pavan 用户提升到了 root 用户。
nc -lvp 1234
id
结论
在本文中,我们能够为 Python 库的环境设置三个真实场景,然后引入了一些可能导致攻击者将其访问权限提升到根级别的错误配置。开发环境是最有针对性的环境之一,因为在这些环境中,执行任务的便利性优先于环境的安全性。本文证明,单个错误配置的设置会导致毁灭性的结果。
本文始发于微信公众号(Ots安全):【渗透测试】Linux 提权:Python 库劫持
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论