Gdb 利用基于mips堆栈的溢出(rop链)

Gdb 利用基于mips堆栈的溢出(rop链),gdb,mips,exploit,Gdb,Mips,Exploit,我正在尝试开发我的第一个基于MIPS堆栈的漏洞,使用零运气的ROP链技术……我在第一个ROP小工具上失败了,我不知道为什么。我正在关注Bowcaster python框架和我在谷歌上搜索过的一些博客文章。由于溢出允许我覆盖太少的S寄存器(仅S0和S8),我需要跳转到一个函数尾声,该函数将从堆栈中设置S0-S8。我使用IDA PRO和mipsrop插件来定位这些小工具。我尝试了来自易受攻击的二进制文件和libc的小工具,但结果相同。我在GDB中看到,$RA寄存器被正确设置为我用mipsrop选择的

我正在尝试开发我的第一个基于MIPS堆栈的漏洞,使用零运气的ROP链技术……我在第一个ROP小工具上失败了,我不知道为什么。我正在关注Bowcaster python框架和我在谷歌上搜索过的一些博客文章。由于溢出允许我覆盖太少的S寄存器(仅S0和S8),我需要跳转到一个函数尾声,该函数将从堆栈中设置S0-S8。我使用IDA PRO和mipsrop插件来定位这些小工具。我尝试了来自易受攻击的二进制文件和libc的小工具,但结果相同。我在GDB中看到,$RA寄存器被正确设置为我用mipsrop选择的地址,但由于某些原因,S0-S8寄存器没有被覆盖。ASLR在这里不是问题,因为我可以通过运行ldd几次来确认这一点。我用IDA PRO选择了一个地址为000112EC的小工具,看起来是这样的:(我不能发布更多图片-声誉)

我已经向它添加了基本libc地址(echo'obase=16;ibase=16;2AABE000+112EC'| bc),得到了0x2AACF2EC。由于它是Big-Endian处理器,因此我发送了如下字符串:

下面您可以看到GDB的完整输出:

如您所见,只有S0和S8被覆盖,并且没有从堆栈中恢复任何S寄存器

我做错了什么?请帮忙:)

一些checksec.sh输出:

RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
No RELRO        No canary found   NX enabled    No PIE          No RPATH   No RUNPATH   /bin/vulnbin
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
Full RELRO      No canary found   NX enabled    DSO             No RPATH   No RUNPATH   /lib/libc.so.0

您在指令运行之后有gdb输出,但在之前(或期间)没有

您应该单步执行,并使用x/wx$sp手动检查每个负载+

可能是您的字符串已损坏,而s0-s7中的那些值实际上是按照您的要求从堆栈中提取的,您的缓冲区以前在堆栈中,但现在已损坏

另外,在新的$ra值之后,溢出字符串中是否有额外的字节,或者是否终止了该字符串?如果终止字符串,则s0-s7寄存器将填充垃圾堆栈数据

底线:中断第一次加载,在每次加载之前手动x/wx$sp+x,然后执行步骤I并确认结果


如果你需要一个静态gdbserver,我有很多不同的ARM、MIPS和MIPSEL架构/ABIs@

同样,我不会太依赖一个框架,除非你已经“手工”完成了至少几次。这一点怎么强调都不过分
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
No RELRO        No canary found   NX enabled    No PIE          No RPATH   No RUNPATH   /bin/vulnbin
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
Full RELRO      No canary found   NX enabled    DSO             No RPATH   No RUNPATH   /lib/libc.so.0