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) 运行脚本。该模式会忽略环境变量和当前工作目录,强制使用隔离的标准搜索路径,能有效防御此类劫持攻击。
相关推荐
茗创科技27 分钟前
CGE连接组:用基因表达解码脑疾病的异质性(附高分文献下载)
python·matlab·脑网络
汤米粥29 分钟前
Python调用百度搜索触发安全验证
开发语言·python
HackTwoHub32 分钟前
AntiDebug Mcp、AI逆向绕过前端,Hook 加密接口,抓取 Vue 路由漏洞,接入 MCP 让 AI 自动化挖掘前端漏洞
前端·vue.js·人工智能·安全·web安全·网络安全·系统安全
杠杠的blog35 分钟前
企业级提示词管理
python·agent·提示词·生产级实践
JS_SWKJ1 小时前
【无标题】
网络安全
小小放舟、1 小时前
VS Code Code Runner 中文乱码修复与 IDEA 风格输出配置
vscode·python·code runner
俺不中嘞2 小时前
python常用函数
开发语言·python
薛定猫AI2 小时前
【技术干货】大模型文档结构化提取实战:Python解析PDF发票并批量生成CSV
java·python·pdf
zhiSiBuYu05172 小时前
RAG 性能优化与缓存策略实战指南
人工智能·python·机器学习
荣码2 小时前
Prompt工程实战:同一个需求换3种写法,效果差10倍
java·python