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) 运行脚本。该模式会忽略环境变量和当前工作目录,强制使用隔离的标准搜索路径,能有效防御此类劫持攻击。
相关推荐
安全小王子1 小时前
nssctf_easyapp
网络安全·逆向·ctf·nssctf
临沂GEO2 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白3 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
菩提小狗3 小时前
每日安全情报报告 · 2026-08-26
网络安全·漏洞·cve·安全情报·每日安全
荷蒲4 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)5 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机6 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6926 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy7 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
数据知道7 小时前
漏洞挖掘方法论:从 Fuzz 到 0day 的思维框架
网络·安全·web安全·网络安全