【pwn入门】用gdb调试32位程序

本文介绍了如何在B站的学习笔记中深入理解C语言编程中的漏洞利用技巧,包括使用`gets`函数导致的越界写入,以及32位和64位程序在地址长度、寄存器命名和汇编指令上的区别。通过GDB调试和实际操作演示了程序执行流程的分析。

声明

本文是B站你想有多PWN学习的笔记,包含一些视频外的扩展知识。

问题源码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char sh[]="/bin/sh";
int func(char *cmd){
   
   
	
### BUUCTF PWN 入门教程与解题方法 #### 一、PWN题目概述 PWN是一种CTF竞赛中的常见类别,主要涉及程序漏洞利用技术。BUUCTF平台提供了丰富的PWN练习题,适合初学者学习并掌握基本的漏洞挖掘和利用技巧[^1]。 #### 二、工具准备 在解决BUUCTF上的PWN题目之前,需要准备好必要的环境和工具: - **操作系统**: 推荐使用Ubuntu或Kali Linux作为实验环境。 - **编程语言**: Python是最常用的脚本编写语言,尤其是`pwntools`库可以极大简化payload生成和交互过程[^4]。 - **调试器**: 使用GDB进行动态分析,配合PEDA插件增强功能[^2]。 - **静态分析工具**: `checksec`用于查看目标可执行文件的安全特性设置情况。 #### 三、典型解题流程 以下是针对BUUCTF上简单PWN题目的通用解决方案框架: ##### 1. 静态分析 通过`file`命令确认目标文件类型及其架构;运用`strings`查找可能存在的敏感字符串;借助`readelf`, `objdump`等进一步了解ELF结构细节以及是否存在保护机制如NX, ASLR等[^3]。 ```bash $ file pwn1 $ strings pwn1 | grep win $ checksec pwn1 ``` ##### 2. 动态调试 启动GDB加载待测程序,在可疑置设断点观察寄存器状态变化及内存布局状况。如果存在栈溢出,则尝试定返回地址被覆盖的具体偏移量。 ```python from pwn import * context.log_level='debug' io = process('./pwn1') gdb.attach(io,"b *0x4011a6\nc") io.recvuntil('>') io.sendline(cyclic(1024)) io.wait() core = io.corefile stack = core.rsp offset = cyclic_find(stack) print(f"Offset is {offset}") ``` ##### 3. 构造Payload 基于前面获得的信息设计合适的载荷数据包送入服务端触发预期行为完成Flag获取操作。 ```python payload = flat({ offset: [ next(u.search(b'/bin/sh\x00')), elf.symbols['system'] ] }) p.sendlineafter('> ', payload) p.interactive() ``` 以上仅为理论模型展示,请根据实际遇到的不同类型的挑战灵活调整策略。 #### 四、注意事项 - 学习过程中注重理解原理而非机械模仿现有代码片段。 - 多加实践积累经验,逐步深入探索更复杂的攻击手法比如ROP链构造等等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值