Ret2syscall - ARM64
在以下位置找到arm64的介绍:
Introduction to ARM64v8代码
我们将使用以下页面中的示例:
Ret2win - arm64#include <stdio.h>
#include <unistd.h>
void win() {
printf("Congratulations!\n");
}
void vulnerable_function() {
char buffer[64];
read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability
}
int main() {
vulnerable_function();
return 0;
}编译时禁用 PIE 和 Canary:
机器码片段
为了准备syscall的调用,需要以下配置:
x8: 221 指定sys_execvex0: 指向"/bin/sh"的指针,指定要执行的文件x1: 0 指定不传递任何参数x2: 0 指定不传递任何环境变量
使用ROPgadget.py,我能够在机器的libc库中找到以下机器码片段:
使用前面的gadget,我们可以从堆栈中控制所有需要的寄存器,并使用x5跳转到第二个gadget以调用syscall。
请注意,从libc库中了解这些信息也允许进行ret2libc攻击,但让我们将其用于当前的示例。
攻击利用
最后更新于