将execvp()转换为适当的shell

时间:2015-08-14 01:11:59

标签: android linux shell fork execvp

我正在开发智能手机的固件更新功能。重新启动到更新模式时,手机将接受通过USB的命令并以root身份执行(但具有SELinux限制)。这非常方便,但它是一个非常有限的shell,因为更新程序只是将命令传递给execvp(在分叉之后),并且没有连接大多数文件描述符。因此stderr丢失,任何交互式(如实际的shell)只是挂起等等。

我正在寻找一种方法来利用这个后门来提供合适的shell。到目前为止,这就是我所知道的:

  • 当您通过USB发送命令时,守护程序分叉,然后子进程将命令传递给execvp。我不确定解析是否正确,但看起来它只是用一个NULL字节替换命令中的每个空格来构建参数列表。重定向不起作用; >|&;等任何字符似乎只是作为参数直接传递。
  • 守护进程以root身份运行,但SELinux阻止写入大多数地方,[重新]安装文件系统等。所有可写区域都安装为noexec,因此无法推送二进制文件并执行它,如据我所知。
  • 进程的标准输出通过USB发回,但其stderr和stdin连接到/ dev / null。
  • 有一个可执行的/ bin / sh,但没有stdin,就无法执行任何内容。
  • 拥有一个实际的shell可能不会绕过任何这些限制,但会更方便。

我怀疑有可能在IFS上使用一些技巧或者让/ bin / sh产生一个连接到正确文件描述符的shell,以便它实际可用,但我不是确定如何去做。

0 个答案:

没有答案