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) 运行脚本。该模式会忽略环境变量和当前工作目录,强制使用隔离的标准搜索路径,能有效防御此类劫持攻击。
相关推荐
心运软件32 分钟前
基于机器学习的智能邮件分类系统:从数据采集到模型部署全流程实战
人工智能·python·算法·随机森林·机器学习·分类·scikit-learn
ZHOU_WUYI1 小时前
5. fastwam 模型 video expert pre dit过程
pytorch·python·世界动作模型
过期的秋刀鱼!2 小时前
机器学习开发的迭代循环
人工智能·python·深度学习·神经网络·机器学习
小白学大数据2 小时前
基于Python的抖音网页版视频点赞数增长趋势追踪系统设计与实现
开发语言·爬虫·python·搜索引擎·音视频
Yan_chen6662 小时前
HTTP和HTTPS 完整指南
网络协议·web安全·http·网络安全·https
艺杯羹2 小时前
从攻击者视角拆解12306:SYN泛洪、CC攻击与候补机制的攻防博弈
网络·web安全·网络安全·网络攻击模型·攻防
circuitsosk2 小时前
平台整体能力与功能特性设计:分群、联运、ABTest与运营位系统
python·机器学习·搜索引擎·ab测试·vllm·rag检索
Livia要学习2 小时前
Python三种常见高阶函数--map、filter、sorted
开发语言·python
冷咖啡离 我的笨笨2 小时前
用最简单的例子,从最简单的设计开始,重构着讲解设计原则与模式——从DIP中“倒置”的含义说接口的正确使用
python·重构·依赖倒置原则
PC2005-cloud3 小时前
FinalShell 自定义背景图片教程
ide·python·pycharm