2012-01-29 4 views
0

Я пытаюсь открыть оболочку bash (в Linux) из исполняемого файла C или C++. Я попробовал оба языка, но скомпилированный исполняемый файл больше 4 КБ из-за библиотек, необходимых для системного вызова.Как открыть bash из исполняемого файла?

Мне нужно сделать исполняемый файл менее или равным 4Kb. Как я могу это сделать?

+0

4k не такой уж большой ... чего вы пытаетесь достичь? –

+0

@DanFego Я пытаюсь сохранить исполняемый файл в буфере 4Kb (я пытаюсь использовать эксплойт безопасности на своей машине). –

+0

На тестовом поле у ​​меня есть, я попытался скомпилировать исполняемый файл с '-Os' только с' main() 'return' 0', и он больше 6k. Как насчет какого-то шеллкода? –

ответ

2

Вы разделили свою программу? Этот пример кода дает меньше, чем 4K как с C и C++:

$ 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. Я снимаю двоичные файлы все время и забыл сделать это здесь. –

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 байта. Это также имеет преимущество статической связи, которая подходит для использования.

Смежные вопросы