Как открыть bash из исполняемого файла? - PullRequest
0 голосов
/ 29 января 2012

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

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

Ответы [ 2 ]

2 голосов
/ 29 января 2012

Если все, что вам нужно сделать - это запустить exec shell, скомпилировать

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

2 голосов
/ 29 января 2012

Вы удалили свою программу? Этот пример кода дает менее 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 и не связывайте никакие библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...