Ret2ret & Reo2pop
Last updated
Last updated
学习并练习AWS Hacking:HackTricks 培训 AWS 红队专家 (ARTE) 学习并练习GCP Hacking:HackTricks 培训 GCP 红队专家 (GRTE)
这种技术的主要目标是尝试通过滥用栈中现有指针来绕过 ASLR。
基本上,栈溢出通常是由字符串引起的,而字符串在内存中以空字节结尾。这使得可以尝试减少栈中已存在指针指向的位置。因此,如果栈中包含0xbfffffdd
,这种溢出可以将其转换为0xbfffff00
(注意最后一个被置零的字节)。
如果该地址指向我们在栈中的 shellcode,就可以通过向ret
指令添加地址,直到达到该地址。
因此,攻击将如下进行:
NOP 滑梯
Shellcode
用指向ret
的地址(RET 滑梯)覆盖从 EIP 开始的栈
由字符串添加的 0x00 修改栈中的地址,使其指向 NOP 滑梯
通过此链接可以看到一个易受攻击的二进制文件示例,以及这里是利用程序。
如果您可以在栈中找到一个完美的指针,您不想修改(在ret2ret
中,我们将最终的最低字节更改为0x00
),您可以执行相同的ret2ret
攻击,但是RET 滑梯的长度必须减少 1(因此最终的0x00
会覆盖完美指针之前的数据),并且RET 滑梯的最后一个地址必须指向**pop <reg>; ret
。
这样,完美指针之前的数据将从栈中移除(这是被0x00
影响的数据),而最终的ret
将指向栈中的完美地址**,而不会有任何更改。
通过此链接可以看到一个易受攻击的二进制文件示例,以及这里是利用程序。
学习并练习AWS Hacking:HackTricks 培训 AWS 红队专家 (ARTE) 学习并练习GCP Hacking:HackTricks 培训 GCP 红队专家 (GRTE)