freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Linux权限提升:Python库劫持
任子行 2021-07-02 10:15:49 269949

在这篇文章中,我们将介绍一些在基于Linux的设备上通过利用Python库和脚本提升权限的方法。

1.介绍

一般来说,当攻击者处于有python文件的环境中,可以用来提升其访问权限的方式比较有限。本文将介绍利用写权限、sudo权限和编辑Path变量,这三种提权方式。

为了方便演示,我们先创建一个导入一些库的示例脚本。在实际情况中,这可能是个一般的python脚本或是一个开发人员正在进行的项目。在CTF比赛中,可能很容易找到一个包含与此相类似的脚本。我们创建的示例脚本中,首先导入webbrowser模块,然后使用open函数来运行设备上的默认web浏览器,来打开http://www.1218.com.cn/网页(此处以任子行官网举例),如图1-1。

图1-1可以看到运行脚本程序会打开任子行官网

方法一:

这个漏洞利用是基于我们导入的模块文件要具有写权限。当被导入的模块文件具有允许任何用户编辑的权限时,它就可能成为一个漏洞。在我们创建的python示例脚本中,调用了webbrowser.py模块文件。为了更好地了解这种提权方式,我们将首先在ubuntu环境中创建脆弱性漏洞环境,然后使用另一个机器来攻击利用这个漏洞。

漏洞创建

正如前文所讲,在这种方法中,漏洞是基于模块文件的权限。为了构造这个漏洞,我们首先需要找到模块文件。我们可以用locate命令来找到它,当然也可以利用find之类的命令进行查找。我们可以看到它位于/usr/lib/python3.8/里面,然后我们可以看到,模块文件的默认权限是:所有者有读、写、执行的权限,组有执行和读的权限,其他用户只有执行的权限。这意味着除非用户是root权限,否则任何人不能编辑该文件。为了构造这个漏洞,我们需要用chmod命令改变一下权限,使每个用户都可以读取、写入和执行。这从下图1-2中可以看到。

图1-2可以看到所有用户对文件具有读,写,执行权限。

要想让Linux机器变得易受攻击,下一步要做的就是提供一个运行python脚本的方法。最简单的方法是写入sudoers文件中,这样攻击者(可以访问用户lele)就可以执行我们创建的python脚本(hack.py)。如图1-3。

图1-3

以上就是一个完整使机器容易受到Python库劫持的攻击的过程,其余没有提到的配置都为Linux的默认配置。

漏洞利用

该漏洞利用的前提是我们在目标机上已经获得初始立足点。然后我们可以利用这种方法在获得初始立足点后提升权限。为了模仿这种情况,我们先以用户lele的身份连接到目标机。作为一个需要提升权限的攻击者,我们运行sudo -l命令,看看哪些脚本或二进制文件是以提升的权限运行的。可以看到,我们能使用python3.8来运行hack.py。作为一个攻击者,我们使用cat命令查看脚本内容,看到它导入一个名为webbrowser的模块。我们使用locate命令找到该模块的位置,发现它位于/usr/lib/python3.8中。然后我们还可以发现lele用户拥有该模块的写权限。如图1-4,图1-5所示。

图1-4可以看到哪些脚本拥有root权限

图1-5可以看到目标脚本所处位置

我们用vim编辑器打开该模块文件,然后在被hack.py文件调用的函数里面加入了反弹shell的python脚本。在前面我们可以看到,它使用一个open函数在浏览器中打开了一个网页。因此,我们将反弹shell的代码添加到该模块文件中,如下图1-6所示。

vim /usr/lib/python3.8/webbrowser.py

图1-6将反弹shell的代码写入图中位置

编辑完模块文件后,我们保存并关闭编辑器。打开ctf机器的另一台终端,我们在shellcode脚本中指定的端口上打开一个Netcat监听器,然后以lele用户回到终端,用sudo执行hack.py脚本,如图1-7所示。

图1-7

当脚本运行时,我们就可以看到一个会话连接到了我们的Netcat监听器。通过whoami命令和id命令可以看到我们已经成功地将Linux权限从lele用户提升到了root权限用户。

方法二:

这个漏洞是基于Python库路径的优先级顺序,它适用于我们脚本正在导入的模块文件。当一个模块在脚本中被导入时,Python会以特定的优先顺序在默认目录中寻找特定的模块文件。在我们创建的python脚本中,我们有webbrowser.py模块文件被调用。因为如果在与原始脚本相同的目录下存在一个Python模块文件,它将获得优先于默认路径的地位。为了更好地了解背后发生了什么,以及怎么样导致权限升级的,我们先在ubuntu环境中创建漏洞,然后使用另一个机器Linux来利用这个漏洞。

漏洞构建

正如前面所讨论的,在这种方法中,漏洞是基于模块文件执行的优先顺序。为了构造这个漏洞,首先,我们需要把方法一加入的反弹shell的代码注释掉或者直接删掉(如图2-1),避免产生干扰,然后恢复我们先前赋予文件的权限(如图2-2)。这样,这台机器就不会在多个方面出现漏洞。

图2-1 注释掉先前加的反弹shell代码

图2-2恢复webbrowser.py的权限

接下来,我们回到我们先前创建的python脚本。我们可以看到,它位于lele用户的home目录下,它仍然包含相同的代码,需要导入 webbrowser模块,如图2-3所示。

图2-3

sudoers文件中与方法一中的编写一致,使其包含脚本hack.py的正确路径,如图2-4所示。

图2-4

以上是一个完整的使机器容易受到Python库劫持的攻击过程。其余没有提到的配置都为Linux的默认配置。

漏洞利用

同样,该漏洞利用的前提是我们在目标机上已经获得初始立足点。然后我们可以利用这种方法在获得初始立足点后提升权限。为了模仿这种情况,我们以用户lele的身份连接到目标机器。作为一个需要提升权限的攻击者,我们运行sudo -l命令,看看我们可以用哪些脚本或二进制文件是以提升的权限运行的。我们看到,我们可以使用python3.8来运行hack.py。作为一个攻击者,我们使用cat命令查看该脚本,看到它导入了一个名为webbrowser的模块,如图2-5。

图2-5

由于 hack.py 位于 lele 用户的主目录内,而我们有 lele 用户的访问权限,我们可以在主目录内创建一个文件。在这种情况下,需要注意的是我们不能编辑 hack.py 文件。在这种情况下,我们将创建一个webbrowser.py文件。然后在创建的webbrowser.py文件中添加反弹shell的代码。如图2-6:

图2-6 反弹shell代码

接下来,我们需要运行一个Netcat侦听器端口,我们提到在反向shellcode。然后我们将继续使用sudo执行hakc.py脚本,如图2-7:

图2-7

当脚本运行时,我们看到一个会话连接到Netcat侦听器。会话的id命令证明在目标机器上已经是root权限。我们已经成功地把lele用户提升特权为root用户,如图2-8:

图2-8提权为root权限

方法三:

这个漏洞是通过Python PATH环境变量进行搜索的Python库来利用的。这个变量有一个目录列表,在这个列表中,Python会搜索导入模块的不同目录。如果攻击者能够改变或修改该变量,那么他们就可以利用它来提升目标机器的权限。为了更好地了解是怎么样导致权限升级的,我们和前面一样先在ubuntu环境中创建漏洞,然后使用另一台Linux来攻击利用这个漏洞。

漏洞构建

正如前面所讨论的,这个方法的漏洞利用是基于python环境path变量的。为了构造这个漏洞,首先,和前面一样,我们需要恢复Linux环境到最初的配置。然后,在tmp目录内创建hack.py脚本,我们可以验证该脚本的内容与之前一样,如图3-1,图3-2所示。

图3-1运行该脚本会打开任子行官网

图3-2 可以看到脚本内容

接下来,我们需要在sudoers文件中做一些修改。首先,我们把文件的位置改为/tmp目录,然后在文件中加入SETENV标记,如图3-3所示。这意味着lele用户可以使用具有sudo权限的SETENV命令,而无需输入root密码。SETENV是个可以改变Python PATH环境变量的值,并将任何位置纳入我们在前面的方法中学到的执行顺序的命令。

图3-3给我们的文件加上SETENV标记配置环境变量

以上就是使机器容易受到Python库劫持的完整过程。其余没有提到的配置都被设置为Linux的默认配置。

漏洞利用

同样,该漏洞利用的前提是我们在目标机上已经获得初始立足点。然后我们可以利用这种方法在获得初始立足点后提升权限。为了模仿这种情况,我们以用户lele的身份连接到目标机器。作为一个需要提升权限的攻击者,我们运行sudo -l命令,看看我们可以用哪些脚本或二进制文件是以提升的权限运行的。我们看到,我们可以用root权限使用SETENV,这意味着我们可以用它来改变导入模块的优先顺序。由于hack.py位于/tmp目录内,我们进入其中并检查hack.py脚本,如图3-4所示。

图3-4 可以看到已经以root权限进行设置环境变量

由于它需要导入webbrowser模块,我们首先将创建一个名为webbrowser.py的恶意模块文件,然后利用改变环境变量Python PATH的能力导入我们的恶意模块文件,恶意模块文件中包含反弹shell的代码。如图3-5接着在脚本中提到的同一端口上启动一个Netcat监听器,并继续将/tmp目录添加到Python路径中,然后执行hack.py文件以提升我们的访问权限。

图3-5恶意模块文件里包含反弹shell的代码

当脚本运行时,我们可以看到一个会话连接到了我们的Netcat监听器。whoami和id命令表明了我们已经成功地将权限从lele用户提升到了root权限用户,如图3-6:

图3-6已经从普通访问权限提权为root权限

在这篇文章中,我们通过人为的为Python库的环境设置三个真实的场景,然后介绍了一些错误的配置可能导致攻击者将其访问权限提升到root权限级别的方法。

# web安全 # 漏洞分析 # CTF # 网络安全技术
本文为 任子行 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
任子行移动互联网安全月报
任子行 LV.6
任子行官方账号
  • 171 文章数
  • 16 关注者
创新力领先|任子行荣获云安全联盟2021安全创新奖
2022-03-10
任子行移动互联网安全年报
2022-01-28
任子行视频网解决方案,专注视频监控数据安全防护!
2022-01-20
文章目录