如何从可执行文件打开bash

How to open bash from executable?

本文关键字:bash 可执行文件      更新时间:2023-10-16

我正试图从C或C++可执行文件内部打开bash shell(在Linux中)。我尝试了这两种语言,但由于进行系统调用所需的库,编译后的可执行文件超过了4kb。

我需要使可执行文件小于或等于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编写,不要链接任何库。

如果你只需要执行一个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个字节。这也有静态链接的好处,这适用于利用漏洞。