我正在学习rop链。 我正在处理来自站点https://ropemporium.com的挑战“pivot” 给定的程序要求用户输入2次:第一次将输入放入堆内存(应该是主rop链),第二次应该是有效负载,使缓冲区溢出,将esp设置为第一个rop链的地址。 我正在使用pwntools与程序交互。由于改变了程序流程,rop链应在末尾给出错误。 但是我在控制台中没有看到任何错误。我知道rop链的工作原理与dmesg输出一致。但是程序除了原始的字符串外什么也不显示。 我没有打印这个标志,而是制作了一个名为printf_call和fake_str_addr的rop链,以查看它是否正常工作。是的。 那么,如何通过pwntools获得带错误的完整输出和printf呢? 下面是使用pwntools的代码段:
import pwnlib
from pwnlib.tubes import process
p = process.process('./pivot')
addr = get_addr(p.recvuntil('>'))
print('addr: ', addr)
# first input
__main = main_sploit()
# second input
__overfl = 'a' * 0x28
__overfl += 'x' * 4 # ebp
__overfl += buf_overflow(addr)
p.sendline(__main + __overfl)
print(p.recvall())
我使用http://docs.pwntools.com/en/stable/tubes/processes.html中的示例构建了上面的代码
目前没有回答
相关问题 更多 >
编程相关推荐