Azn*_*ide 0 x86 assembly gdb buffer-overflow
我正在进行protostar漏斗练习#5.
基本上这是代码,目标是将代码执行重定向到shellcode.我的问题只涉及为什么我的指令没有执行.
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}
Run Code Online (Sandbox Code Playgroud)
这是一个缓冲区溢出问题.我已成功将返回地址重定向到我的nop sled的开头,然后是int3"\ xcc"shellcode,它阻止程序执行(只是检查它是否会执行)
"\x90\x90\x90\x90\xcc\xcc\xcc\xcc"
Run Code Online (Sandbox Code Playgroud)
基本上,当我走过我的nop雪橇时,它只是说
0xbffff7a2 in ?? ()
(gdb)
0xbffff7a3 in ?? ()
(gdb)
0xbffff7a4 in ?? ()
(gdb)
Run Code Online (Sandbox Code Playgroud)
请记住,我已成功将代码重定向到这些地址,并且我将这些地址分别视为"\ x90"和"\ xcc".但没有任何反应.该程序甚至没有收到来自"\ xcc"的中断.
我可能没有提供足够的信息,但基本上它应该执行这些指令,但似乎没有.
我想可能是指令需要字节对齐?但这甚至重要吗?
我想知道为什么即使你指向那个地址也不能执行指令的原因是什么.
This is x86 Architecture machine.
Run Code Online (Sandbox Code Playgroud)
gdb在内部使用int3,这就是为什么你没有看到效果.您应该告诉它忽略SIGTRAP信号并将其传递给进程.
(gdb) handle SIGTRAP nostop noprint pass
SIGTRAP is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal Stop Print Pass to program Description
SIGTRAP No No Yes Trace/breakpoint trap
(gdb) si
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
The program no longer exists.
Run Code Online (Sandbox Code Playgroud)
由于您尝试仅将此用于检测用户模式下的代码执行,因此请考虑使用其他一些会导致错误的指令HLT.这不会干扰调试器操作,因此您无需更改信号处理.