2012-01-29 76 views
0

我想從C或C++可執行文件中打開一個bash shell(在Linux中)。我嘗試了兩種語言,但編譯的可執行文件大於4kb,因爲需要進行系統調用的庫。如何從可執行文件打開bash?

我需要可執行小於或等於爲4KB。我怎樣才能做到這一點?

+0

4K是沒有那麼大......你有什麼要完成? – 2012-01-29 05:51:18

+0

@DanFego我正在嘗試將可執行文件存儲在4Kb緩衝區中(我正在試用我的機器上的安全漏洞)。 – 2012-01-29 05:53:01

+0

在我的測試框中,我嘗試用'-Os'編譯可執行文件,只用'main()'返回'0',它已經超過了6k。那麼一些shellcode呢? – 2012-01-29 05:55:37

回答

2

你有沒有剝奪你的計劃嗎?使用C和C++,此示例代碼的分辨率低於4K:

$ cat shell.c 
#include <stdlib.h> 

int main() { 
    system("echo hello"); 
    return 0; 
} 
$ gcc -o shell shell.c 
$ strip -s shell 
$ ./shell 
hello 
$ du -b shell 
2836 shell 
$ g++ -o shell shell.c 
$ strip -s shell 
$ ./shell 
hello 
$ du -b shell 
3216 shell 

當然,您可以使可執行文件更小。用asm編寫,不要鏈接任何庫。

+0

Facepalm。我總是把二進制文件剝離,忘記在這裏做。 – 2012-01-29 17:18:18

2

如果你需要做的就是Exec中殼,編譯

#include<unistd.h> 

int main(){ 
    static char* bash[] = {"/bin/bash", NULL}; 
    execv(*bash, bash); 
} 

隨着dietlibcdiet -Os gcc test.c產生的2929個字節的可執行文件。用strip a.out去除二進制數產生1464字節。這也具有靜態鏈接的好處,這適用於漏洞利用。