如何设置你的 PWN 环境

你首先需要的是 Linux Shell ,因为大多数 pwn 挑战通常是 64 位 ELF 可执行文件 。我会写两个不同的部分,分别针对 Windows 和 MacOS。如果你已经用过任何 Linux 发行 版,这部分你就没问题了!对于剩下的 Windows/MacOS 用户,我强烈建议安装 Debian Bookworm 作为首选发行版,因为它目前使用 glibc 2.36,尚未实现完整的 RELRO, 且利用起来稍微容易一些。

Windows

对于正在阅读本文的 Windows 用户,你可以按照链接的说明书轻松下载 WSL。如果你懒得看,这里有一份你应该执行的命令列表。

安装使用 Debian for WSL

arduino 复制代码
wsl.exe --update
wsl --set-default-version 2
wsl install -d Debian

就是这样!从现在起,你可以通过开始菜单 中的 Debian 搜索 Debian,或者在命令行中运行 Debian,进入你的 Debian shell 。关于上述 WSL 2 的要求,WSL 2 允许你在 WSL 内部的集成桌面模式下使用 GUI 应用。这其实没什么特别的意义,除了你可以让你的调试器在一个新窗口里弹出,不用 tmux,这对我来说简直是个大胜利!!

补充一点,你可能需要更新系统包 ,并下载文本编辑器,以避免在 WSL 终端和其他窗口之间切换。你可以用以下命令完成: sudo apt update && sudo apt dist-upgrade && sudo apt(-get) install <editor of choice>

如果你想要完全懒散的体验和最少的 Linux shell 作,你可以挂载你的 Windows 文件系统 ,并在 Downloads 目录中使用以下命令(不区分大小写!): cd /mnt/c/users/your\ name/downloads

macOS

不幸的是,对于 MacOS 用户来说,我觉得没有像 Windows 用户那样的集成桌面。所以,我建议你按照这个指南作,尽可能多地在终端里作 ,你会在其中花费比预期更多的时间。好消息是,有 Lima ,我们可以用它帮助简化创建 x64 Linux 壳,即使是在 Apple Silicon 上。

这里有一份快速入门的推荐清单。

arduino 复制代码
brew install lima
limactl start --name=x64-debian template://debian --arch=x86_64
limactl shell x64-debian 
sudo apt install tmux

遇到终端颜色的问题,解决方案完全取决于你的终端模拟器 ,所以你自己找解决方案。

额外加分:可写主机文件系统!

LiMactl 编辑 x64-debian 以编辑配置 添加以下不安全的配置:

yaml 复制代码
mounts:
- location: "~"
  writable: true

现在你拥有了一个运行在 x64 上的 Linux Shell ,可以不受限制地访问你的主机文件系统! 你可以用标签自动补全你的虚拟机名字拼写!

恭喜你通过了 Linux 安装!繁琐的部分现在开始了......我们先着手安装调试器和基础工具。

工具安装


恭喜你完成了Linux安装!乏味的部分现在开始了...让我们先安装调试器和基本工具。

实用工具


pwntools
  1. sudo apt install python3 安装python
  2. sudo apt-get install python3-pwntools 安装pwntools
  3. pwn checksec /lib/x86_64-linux-gnu/libc.so.6 验证它是否工作
one gadget
  1. sudo apt install rubygems 安装gem
  2. gem install one_gadget 安装one gadget
  3. one_gadget /lib/x86_64-linux-gnu/libc.so.6 验证它是否工作
rop gadget
  1. sudo -H python3 -m pip install ROPgadget 安装ROPgadget
  2. ROPgadget /lib/x86_64-linux-gnu/libc.so.6 验证它是否工作(警告:输出量很大!!)

调试器


强烈推荐bata-gef,你也应该使用它!

我不建议盲目运行安装脚本。相反,克隆仓库 并在你的.gdbinit中source它的gef.py

bash 复制代码
cd ~
git clone https://github.com/bata24/gef
vi ~/.gdbinit

#.gdbinit
source /path/to/gef.py

对于没有集成桌面模式的MacOS用户,使用我们之前安装的tmux。只需运行以下命令:

  1. tmux 启动tmux
  2. [Ctrl] + B 进入命令模式
  3. ] 启用滚动
  4. [Ctrl] + C 重置状态
  5. [Ctrl] + B,然后<arrow> 切换焦点标签页

反编译器/反汇编器


太好了!现在我们有了开始编写和调试_pwn_脚本所需的一切,这技术上 就是我们需要的全部,但有时,挑战不提供源代码 。在这种情况下,需要进行一些逆向工程工作 。让我们下载**Ghidra**。

设置相当简单,你只需要一个Java运行时 ,我推荐Temurin,你可以在

这里 找到它。

一旦你安装了运行时,只需运行ghidraRunghidraRun.bat来启动Ghidra

使用Ghidra

Ghidra实际上相当不错且用户友好,你所要做的就是创建一个空项目 ,然后拖放你的挑战二进制文件到其中,并给它一点时间来生成反汇编和反编译!

容器化和服务器复制


恭喜你走到这一步!你已经准备好处理几乎所有pwn挑战了。然而,我们可以做得更好。

有时,善意的挑战作者会提供libc、ld和/或Dockerfile 。这些文件特别有用,因为它们帮助你确保你的挑战使用与服务器相同的库,确保你永远不会遇到_"在我的机器上可以运行"_的问题!所以,我将介绍如何处理这些文件的各种组合。

给定了Libc、ld和Dockerfile


这是最好的情况,因为你不需要做太多。这里有一个你可以运行的命令来使用给定的libcld

./ld-linux-x86-64.so.2 --library-path . ./chal

这将运行链接器 ,并告诉它使用你目录中的库 来启动挑战。就这样! 你现在正在使用给定的库。但是,我们如何复制服务器呢?

首先,我们必须安装Docker。过程相当长,但请相信

文档 并遵循它。

一旦你安装了Docker,你所要做的就是运行以下命令:

docker run -p YOUR_PORT:CONTAINER_PORT -d --privileged $(docker build -q .)

这将构建容器,然后以特权 运行它,这通常是_pwn.red/jail_模板所需要的。请将CONTAINER_PORT占位符替换为容器提供挑战的端口,将YOUR_PORT替换为宿主机上的任何未使用端口。默认情况下,这将绑定到所有接口

设置完成后,你可以像这样连接到容器并运行挑战:

nc 127.0.0.1 YOUR_PORT

就这样!你已经成功复制了服务器使用的库,以及服务器本身!完成后,你应该通过运行docker ps找到容器哈希,然后运行docker stop <hash>来清理正在运行的容器。

只提供了Dockerfile


有时,作者只提供Dockerfile。这很糟糕,但没关系,因为我们可以自己提取libcld。我们首先使用上述步骤启动容器,然后执行以下操作:

bash 复制代码
docker cp 1a2b:/lib/x86_64-linux-gnu/libc.so.6 ./libc.so.6
docker cp 1a2b:/lib/x86_64-linux-gnu/ld-linux-x86-64 ./ld-linux-x86-64.so.2

记得将1a2b替换为容器哈希的前4个字符 ,启动时会显示给你。有时,Dockerfile 会从另一个Linux发行版 复制文件到一个文件夹来提供服务,以便使用该发行版的libc。在这种情况下,只需在路径前加上前缀。使用一个容器执行COPY --from=debian:bookworm / /srv的例子,我们只需在/lib前加上/srv来从服务器的文件中复制。

结论


通过以上所有设置和安装,你应该拥有所有工具,以及开始处理pwn挑战的基本知识。快乐pwning! 如果你现在想了解更多关于pwn的一般知识,请阅读我的博客文章

相关推荐
学习中的DGR15 小时前
[GXYCTF2019]Ping Ping Ping 1和[SUCTF 2019]EasySQL 1新手解题过程
sql·安全·web安全·网络安全·php
上海云盾商务经理杨杨15 小时前
付费网站的攻防战:2026年,如何破解并抵御爬虫攻击
网络·安全
夜勤月15 小时前
给AI装上“文件之手”:深入解析MCP文件系统服务的安全沙箱与读写实践
人工智能·安全
飞函安全17 小时前
飞函:为政企沟通加上“安全锁“
安全
weixin_4624462317 小时前
使用 jsr:@langchain/pyodide-sandbox 构建 Python 安全沙箱(完整入门教程)
python·安全·langchain·sandbox
猿码优创17 小时前
过滤境外ip和域名访问的解决方案
网络·网络协议·tcp/ip·安全·阿里云
九河云21 小时前
纺织印染“数字色差仪”:光谱+AI模型一次调色成功省染料12%
大数据·人工智能·安全·机器学习·数字化转型
KKKlucifer21 小时前
数据安全服务的技术深耕与场景适配:行业实践全景解析
网络·安全
虹科网络安全21 小时前
艾体宝方案|人工智能如何重塑威胁检测与身份安全
人工智能·安全
2301_780789661 天前
2025年UDP洪水攻击防护实战全解析:从T级流量清洗到AI智能防御
服务器·网络·人工智能·网络协议·安全·web安全·udp