我正在编写Linux shell代码漏洞。我的目标 C 代码是:
char code[] = "\xb0\x01\x31\xdb\xcd\x80";
int main(int argc, char **argv)
{
int(*func)();
func = (int (*)()) code;
(Int)(*func)();
}
为什么编译和运行此C程序会引发分段错误错误?该字符串是使用系统调用Int 0x80 / EAX = 1退出程序的shell代码。汇编中的原始漏洞利用代码是:
b0 01 mov al,0x1
31 db xor ebx,ebx
cd 80 int 0x80
答案 0 :(得分:1)
您没有设置eax=0x1
,而是设置了al=0x1
,所以如果您不知道在shellcode之前执行了哪些指令,那么您将拥有eax=xxxxxx01
。
正如评论所说,你必须在 shellcode 的开头做xor eax, eax
。