我正在开发智能手机的固件更新功能。重新启动到更新模式时,手机将接受通过USB的命令并以root身份执行(但具有SELinux限制)。这非常方便,但它是一个非常有限的shell,因为更新程序只是将命令传递给execvp
(在分叉之后),并且没有连接大多数文件描述符。因此stderr丢失,任何交互式(如实际的shell)只是挂起等等。
我正在寻找一种方法来利用这个后门来提供合适的shell。到目前为止,这就是我所知道的:
execvp
。我不确定解析是否正确,但看起来它只是用一个NULL字节替换命令中的每个空格来构建参数列表。重定向不起作用; >
,|
,&
,;
等任何字符似乎只是作为参数直接传递。我怀疑有可能在IFS上使用一些技巧或者让/ bin / sh产生一个连接到正确文件描述符的shell,以便它实际可用,但我不是确定如何去做。