格式化字符串类盲pwn的dump方法

本文介绍了在遇到盲pwn题目,特别是存在格式化字符串漏洞但无法获取二进制文件时,如何通过dump方法获取程序内容进行分析。通过示例和步骤解析,展示了如何确定_start地址,利用%n$p指令读取内存,以及如何判断dump结束,从而帮助解决此类安全挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一类题目,不会给任何文件,只给一个ip和端口,这种称为blind pwn(盲pwn),如果这类pwn存在格式化字符串漏洞的话,可以通过一些手法拿到整个二进制程序,这对我们的逆向分析和解题是十分重要的,举个例子:

在2022年的Insomni’hack teaser比赛上,有一道题CovidLe$s,就是一道盲pwn,输入什么就回显什么,但是存在格式化字符串漏洞,并且应该是栈上的,通过不断的尝试是可以大致猜测出栈结构的:
在这里插入图片描述
从偏移12开始是栈上的缓冲区,29那里是canary,31是返回地址,根据后三位可以猜到libc大版本

但是到这里也就结束了,无法继续推进了,此时就需要用到接下来将要介绍的方法,将整个程序dump下来才能继续分析

首先来看看dump下来的文件:
在这里插入图片描述

可以看到虽然不是很完整,但是大致的逻辑结构是能看到的,如果不dump下来的话,就不可能拿到这道题目的密钥,也就不可能做出来这道题,所以有些时候dump文件是必要的

dump的原理其实也很简单,其实就是利用格式化字符串的%n$p这类指令进行任意地址读

由于比赛已经结束,端口已经关闭,所以我们来自己写一个小demo:

#include<stdio.h>
#include<stdlib.h>
int main()
{
   
   
	setbuf(stdin, 0LL);
        setbuf(stdout, 0LL);
	setbuf(stderr, 0LL);
	char s[0x100];
	memset(s,0,0x100);
	while(1)
	{
   
   
		read
<think>好的,用户现在想了解pwndbg的具体使用方法或者指导。之前他们遇到了安装问题,现在安装解决了,需要学习如何使用这个工具。首先,我需要确定用户对pwndbg的了解程度,可能他们刚开始接触,所以需要从基础开始讲解。 用户之前的问题是关于安装中的依赖和Python版本问题,现在转向使用,可能需要一些入门指南。pwndbg作为GDB的增强插件,主要用于二进制分析和漏洞利用开发,所以应该涵盖基本命令、内存查看、断点设置、漏洞利用辅助功能等。 需要结构清晰,分步骤介绍。可能需要包括安装后的验证、常用命令、实战例子,比如栈溢出分析,以及高级功能如ROP链构造。同时,用户可能对如何调试特定类型的漏洞感兴趣,比如堆溢出或格式化字符串漏洞,所以需要举一些例子。 还要注意用户的系统环境,可能他们使用的是Ubuntu或其他Linux发行版,需要确保命令的兼容性。另外,用户可能对如何结合其他工具(如pwntools)感兴趣,可以提到一些整合方法。 最后,需要检查是否有遗漏的重要功能,比如自定义配置、插件扩展,或者常见问题解答。确保用户能够顺利开始使用,并在遇到问题时知道如何查找帮助,比如官方文档或社区资源。</think>以下是 pwndbg 的详细使用指南,涵盖核心功能和实战技巧: --- ### **一、基础环境验证** ```bash gdb -q ./target_binary # 启动后应显示 pwndbg> 提示符 pwndbg> version # 查看 pwndbg 版本 ``` --- ### **二、核心功能速查表** #### **1. 内存可视化** | 命令 | 功能说明 | 示例 | |---------------------|-----------------------------------|-------------------------------| | `vmmap` | 显示内存映射 | `vmmap` | | `telescope <地址>` | 递归解析指针链 | `telescope $rsp` | | `hexdump <地址>` | 十六进制+ASCII显示内存 | `hexdump $rip 32` | | `search <字符串>` | 内存搜索 | `search "/bin/sh"` | #### **2. 断点管理** ```bash b *main # 主函数入口断点 b *0x400500 # 地址断点 b fopen if $rdi==0 # 条件断点 watch *(int*)0x7fffffffdc # 硬件观察点 ``` #### **3. 寄存器/堆栈操作** ```bash context regs # 显示寄存器上下文 stack 20 # 显示堆栈顶部20个条目 set $rip=0x401000 # 强制修改指令指针 ``` --- ### **三、漏洞利用实战示例** #### **案例:栈溢出漏洞分析** 1. **定位溢出点** ```bash pattern create 200 # 生成定位字符串 r < input.txt # 触发崩溃 context regs # 查看覆盖的寄存器值 pattern search $rsp # 计算溢出偏移 ``` 2. **构造ROP链** ```bash rop --gadgets # 查找可用gadget rop --chain execve # 自动生成execve链 ``` 3. **调试shellcode** ```bash shellcraft -f hex amd64.linux.sh # 生成shellcode checksec # 检查保护机制 ``` --- ### **四、高级调试技巧** #### **1. 堆利用调试** ```bash heap bins # 显示堆管理结构 heap chunks # 列出所有堆块 vis_heap_chunks # 图形化堆布局 ``` #### **2. 格式化字符串漏洞** ```bash fmtarg 0x7fffffffdc0 # 检测格式化字符串参数位置 fmtstr-helper # 自动生成利用载荷 ``` #### **3. 与pwntools联动** ```python # exploit.py from pwn import * gdb.attach(p, gdbscript=''' b *vuln_func c ''') ``` --- ### **五、配置文件优化** 在 `~/.gdbinit` 中添加: ```bash set follow-fork-mode child set detach-on-fork off set print pretty on source /path/to/pwndbg/gdbinit.py ``` --- ### **六、常用调试工作流** 1. **自动化脚本** ```bash gdb -x exploit.gdb -q ./target ``` `exploit.gdb` 内容: ```bash b *main r < payload telescope $rsp 20 ``` 2. **崩溃现场分析** ```bash pwndbg> bt # 查看调用栈 pwndbg> x/10i $pc # 显示当前指令上下文 pwndbg> checksec # 检查安全机制状态 ``` --- ### **七、推荐学习路径** 1. 通过 `pwndbg> help` 查看完整命令列表 2. 实战练习:https://github.com/io12/pwninit 3. 官方文档:https://github.com/pwndbg/pwndbg/wiki > **提示**:结合 `gef` 或 `peda` 的混合使用可通过切换插件实现: ```bash pwndbg> gef # 临时切换至gef pwndbg> peda # 切换回peda模式 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值