python 库劫持:原理、利用与防御

Python 库劫持(Library Hijacking)是一种常见的权限提升或持久化攻击手段。其核心逻辑在于利用 Python 解析器加载模块时的搜索路径优先级,诱使程序加载攻击者伪造的恶意模块,而非合法的标准库或第三方库。


一、 Python 模块搜索机制

了解劫持的前提是掌握 Python 的 sys.path 加载顺序。当执行 import 语句时,Python 会按以下优先级依次查找:

  1. 当前脚本目录 :执行脚本(如 python test.py)所在的文件夹优先级最高。
  2. PYTHONPATH 环境变量:用户手动设置的附加搜索路径。
  3. 标准库路径 :Python 安装时的内置库目录(如 /usr/lib/python3.x)。
  4. 第三方库路径 :通过 pip 安装的模块所在目录(site-packages)。

二、 库劫持的实现方式

如果攻击者拥有目标系统的高优先级路径写入权限,即可实施劫持。

1. 目录种植(Path Planting)

这是最简单的方式。若目标脚本 admin.py 中引用了 import os,攻击者只需在 admin.py 同级目录下创建一个名为 os.py 的文件。由于当前目录优先级最高,Python 会忽略系统标准库,直接运行攻击者的 os.py

2. 环境变量污染

通过修改 PYTHONPATH 环境变量,攻击者可以强制 Python 优先从其控制的目录(如 /tmp)中搜索模块。

  • 示例 :设置 PYTHONPATH=/tmp,并将恶意模块放入 /tmp 中。

三、 恶意代码构造

劫持成功后,攻击者通常会编写后门代码。为了不让程序崩溃(暴露攻击),恶意脚本通常会在执行攻击逻辑后,再通过绝对路径加载真正的原始库。

  • 常规劫持示例

    python 复制代码
    import os
    # 提权逻辑:复制 bash 并赋予 SUID 权限
    os.system("cp /bin/sh /tmp/sh; chmod u+s /tmp/sh")
  • 若劫持目标正是 os 库

    为避免递归导入错误,可使用 subprocess 替代:

    python 复制代码
    import subprocess
    # 为系统 bash 增加 SUID 权限
    subprocess.run(["chmod", "+s", "/bin/bash"])

四、 防御与安全建议

  1. 权限控制 :严格限制生产环境和敏感脚本所在目录的写入权限,防止被植入非法 .py 文件。
  2. 清理环境变量 :在运行关键脚本前,重置或清理 PYTHONPATH,避免被外部注入。
  3. 使用绝对路径 :在极其敏感的场景下,检查 sys.path 的合法性。
  4. 运行参数 :使用 python3 -I (Isolated mode) 运行脚本。该模式会忽略环境变量和当前工作目录,强制使用隔离的标准搜索路径,能有效防御此类劫持攻击。
相关推荐
小江的记录本4 分钟前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
APIshop37 分钟前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
deepin_sir37 分钟前
10 - 函数
开发语言·python
charlee441 小时前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
枫叶林FYL1 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
Chockmans3 小时前
春秋云境CVE-2020-21652(极速版)
计算机网络·安全·web安全·网络安全·安全威胁分析·春秋云境·cve-2020-21652
渣渣xiong4 小时前
从零开始:前端转型AI agent直到就业第五十七天-第五十八天
前端·人工智能·python
小L~~~4 小时前
基于贪心策略的混合遗传算法求解01背包问题
python·算法
才兄说5 小时前
机器人二次开发机器人动作定制?动作迁移数据优化
python
C2H5OH5 小时前
PortSwigger SQL注入LAB10
网络安全