4、Python3环境:Python3、pip、pwntools 库的安装与验证

做二进制漏洞利用,Python3 是绕不开的工具。我见过不少新手在环境配置上卡一整天,其实没必要。说白了,这步就是装个解释器、装个包管理器、再装个核心库。十分钟搞定的事,别搞复杂了。

4.1 为什么非要用 Python3?

你可能想问:Python2 不行吗?嗯,这里要注意。Python2 在 2020 年就停止维护了。pwntools 的最新版本也全面转向 Python3。我在项目中遇到过用 Python2 跑老脚本,结果一堆兼容性报错,最后全重写了。你想想看,何必给自己挖坑?

我个人习惯是直接装 Python3.8 以上版本。太老的版本有些新特性不支持,太新的版本(比如 3.12)某些库可能还没适配。3.8 到 3.10 是最稳的区间。

4.2 安装 Python3 和 pip

不同系统安装方式不一样。我列个表,你对着自己的系统来就行。

操作系统 安装命令 / 方式 备注
Ubuntu / Debian sudo apt update && sudo apt install python3 python3-pip -y 自带 Python3,但 pip 可能需要单独装
Kali Linux sudo apt update && sudo apt install python3 python3-pip -y Kali 默认已装,但建议更新到最新
CentOS / RHEL sudo yum install python3 python3-pip -y 可能需要先启用 EPEL 源
macOS brew install python3 Homebrew 会自动安装 pip3
Windows 从 python.org 下载安装包 安装时记得勾选「Add Python to PATH」
我的小技巧:装完后检查一下版本。运行 python3 --version 和 pip3 --version。如果 pip3 找不到,试试 python3 -m pip --version。我曾经在 Windows 上遇到过 PATH 没配好,折腾了半小时才发现是安装时忘了勾选那个复选框。

4.3 安装 pwntools

pwntools 是 CTF 和漏洞利用的瑞士军刀。它封装了网络交互、汇编、反汇编、ROP 链构造等一堆功能。我个人觉得,没有 pwntools 的二进制利用就像没有锤子的木匠——也能干活,但效率差太多。

安装命令很简单:

pip3 install pwntools

如果你在 Linux 或 macOS 上遇到权限问题,加个 --user 参数:

pip3 install --user pwntools
注意:别用 sudo pip3 install。这会把包装到系统级目录,容易和系统自带的 Python 包冲突。我见过有人这么干,结果系统包管理器坏了,最后重装了系统。用 --user 或者建个虚拟环境,安全得多。

如果你想用虚拟环境(我个人强烈推荐),可以这样:

python3 -m venv pwn_env
source pwn_env/bin/activate   # Linux/macOS
# 或者 pwn_env\Scripts\activate  # Windows
pip3 install pwntools

虚拟环境的好处是隔离。你在这个环境里装什么都不会影响系统。我平时每个项目都建一个独立的虚拟环境,避免依赖冲突。

4.4 验证安装是否成功

装完了,怎么知道能不能用?写个简单脚本测一下。

创建一个 test_pwn.py 文件:

from pwn import *

# 检查版本
print(f"pwntools 版本: {__version__}")

# 测试汇编功能
code = asm('xor eax, eax')
print(f"xor eax, eax 的机器码: {code.hex()}")

# 测试反汇编功能
disassembled = disasm(b'\x90')
print(f"0x90 反汇编结果: {disassembled}")

# 测试连接功能(连接一个测试服务器)
try:
    r = remote('example.com', 80, timeout=5)
    r.send(b'GET / HTTP/1.0\r\n\r\n')
    resp = r.recvline()
    print(f"网络连接测试通过,收到响应: {resp[:50]}")
    r.close()
except Exception as e:
    print(f"网络连接测试跳过(正常,因为 example.com 可能不可达): {e}")

print("所有测试完成!")

运行它:

python3 test_pwn.py

如果输出类似下面这样,说明环境配好了:

pwntools 版本: 4.12.0
xor eax, eax 的机器码: 31c0
0x90 反汇编结果: 0:  90                      nop
网络连接测试跳过(正常,因为 example.com 可能不可达): ...
所有测试完成!

看到版本号和汇编结果了吗?那就对了。网络连接那步可能会报错,因为 example.com 不一定能连上,这不影响——核心功能正常就行。

4.5 常见问题与避坑

我整理了几个我踩过的坑,你遇到了直接对照着看:

  • pip3 安装超时:国内网络问题。加个国内镜像源:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pwntools
  • ImportError: No module named 'pwn':说明没装成功。检查一下是不是用了 pip 而不是 pip3,或者当前虚拟环境没激活。
  • asm() 报错:缺少 binutils。Ubuntu 上装 sudo apt install binutils,macOS 上装 brew install binutils。
  • Python 版本冲突:系统同时有 Python2 和 Python3。用 python3 和 pip3 明确指定版本,别偷懒用 python 和 pip。
我的经验:曾经有一次我在 Docker 容器里装 pwntools,结果 asm() 一直报错。查了半天发现是容器里没装 libc6-dev。装了个 apt install libc6-dev 就好了。所以如果你在精简系统上装,记得把基础开发包也装上。

4.6 环境验证清单

最后,给你一个检查清单。每完成一项打个勾:

  1. ☐ python3 --version 输出 3.8 以上
  2. ☐ pip3 --version 正常显示版本
  3. ☐ pip3 install pwntools 成功安装
  4. ☐ 测试脚本能正常运行,输出汇编和反汇编结果

这四步走完,你的 Python3 环境就齐活了。下一章我们开始用 pwntools 写第一个漏洞利用脚本。嗯,到时候你会觉得,前面这些配置工作都是值得的。

咨询更多资料,