XCTF-welpwn-WP

Posted on Nov 10, 2020

这道题非常的有意思。知识点很简单,就是无libc的ret2libc,最近已经做了两道了。不过这题有一点小限制,需要有一点特殊的处理。

我们直接来看payload,基本是pwn-100pwn-200结合了一下,区别就是多了一句payload = 'a'*24 + p64(PopFourTimes),这样处理的原因是

存在栈溢出漏洞的函数中,我们会发现它只会复制到'\x00'为止,但是既然我们要改变执行流程,必然要向栈中压入地址,必然有'\x00',但是我们会发现,这个栈帧紧接着的就是main的栈帧,如下图

那么先调用一个可以出四次栈的gadgets来跳过实际无效的载荷,然后执行真正的有效载荷,也就是说我们用原来main中无法溢出的buf数组作为了payload

然后就可以拿到flag。