东升国际官网

EN
  • Linux权限提升:Python库劫持

    发布时间:2021-07-02
    浏览量: 14284

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

    1.介绍

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

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

    图片1.png

                       图1-1可以看到运行脚本程序会打开东升国际官网官网

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


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

    图片3.png

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

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

    图片4.png 

    图1-3

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

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

    图片5.png

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

    图片6.png

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

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

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

    图片6.png

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

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

    图片7.png

                                   图1-7

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

    方法二:

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

    漏洞构建:

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

    图片9.png

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

    图片10.png

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

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

    图片11.png

                                 2-3

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

    图片12.png

    图2-4

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

    漏洞利用:

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

    图片13.png

    图2-5

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

    图片14.png 

    图2-6 反弹shell代码

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

    图片15.png

    图2-7

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

    图片16.png

    图2-8提权为root权限

    方法3

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

    漏洞构建

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

    图片17.png

    图3-1运行该脚本会打开东升国际官网官网

    图片18.png 

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

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

    图片19.png 

    图3-3给东升国际官网文件加上SETENV标记配置环境变量

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

    漏洞利用

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

    图片20.png 

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

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

    图片21.png

    图3-5恶意 ?槲募里包含反弹shell的代码

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

    图片22.png 

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

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


    热点内容

    开始试用东升国际官网产品
    申请试用

    20年公安服务经验

    7*24小时应急响应中心

    自主知识产权的产品装备

    专家级安全服务团队

    网络空间数据治理专家

    荣获国家科学技术二等奖

    置顶
    电话

    400-700-1218

    官方热线电话

    咨询
    留言
    二维码
    767c1a96394fd651d8ff50290509ddbe 微信公众号
    ba7d00456f0791d9575d17b722e3b66e 公司微博
    【网站地图】