【发布时间】:2014-10-31 09:17:41
【问题描述】:
在深入研究之前我正在尝试使用 shellcode,所以我从 shellcoders 手册中找到了一个示例。示例如下:
char shellcode[] = "\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x4
\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1\xff\xff\xff\x2f\x62\x69
\x6e\x2f\x73\x68";
int main() {
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
}
shellcode 应该生成一个 shell。但是我得到一个分段错误错误。
我使用带有-fno-stack-protector 和-z execstack 选项的gcc 编译器编译了程序。我快速查看了readelf 命令,很明显堆栈是可执行的
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
【问题讨论】:
-
反引号用于引用代码,而不是强调。
标签: c gcc buffer-overflow shellcode