我想從C或C++可執行文件中打開一個bash shell(在Linux中)。我嘗試了兩種語言,但編譯的可執行文件大於4kb,因爲需要進行系統調用的庫。如何從可執行文件打開bash?
我需要可執行小於或等於爲4KB。我怎樣才能做到這一點?
我想從C或C++可執行文件中打開一個bash shell(在Linux中)。我嘗試了兩種語言,但編譯的可執行文件大於4kb,因爲需要進行系統調用的庫。如何從可執行文件打開bash?
我需要可執行小於或等於爲4KB。我怎樣才能做到這一點?
你有沒有剝奪你的計劃嗎?使用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編寫,不要鏈接任何庫。
Facepalm。我總是把二進制文件剝離,忘記在這裏做。 – 2012-01-29 17:18:18
如果你需要做的就是Exec中殼,編譯
#include<unistd.h>
int main(){
static char* bash[] = {"/bin/bash", NULL};
execv(*bash, bash);
}
隨着dietlibc爲diet -Os gcc test.c
產生的2929個字節的可執行文件。用strip a.out
去除二進制數產生1464字節。這也具有靜態鏈接的好處,這適用於漏洞利用。
4K是沒有那麼大......你有什麼要完成? – 2012-01-29 05:51:18
@DanFego我正在嘗試將可執行文件存儲在4Kb緩衝區中(我正在試用我的機器上的安全漏洞)。 – 2012-01-29 05:53:01
在我的測試框中,我嘗試用'-Os'編譯可執行文件,只用'main()'返回'0',它已經超過了6k。那麼一些shellcode呢? – 2012-01-29 05:55:37