0

在将 IP 地址传递给程序之前,有 awk (BusyBox v1.26.2 awk) 语句可以解析 /proc/cmdline。而我无法改变它们。

/bin/t `awk 'BEGIN{FS="ip="}{print $2}' /proc/cmdline | awk 'BEGIN{FS=":"}{print $2}'`

这样 /proc/cmdline 中的 ip=192.168.0.1:192.168.0.2:xxx:xxx:xxxx 将打印 192.168.0.2 作为 /bin/t 的参数

我对 awk 不太熟悉,但我认为这是安全的,尝试注入一些会成为安全问题的东西(例如 $(reboot)、0.0.0.0`reboot` 等)会失败。(/bin/t 对传递给它的命令行参数有自己的检查)。

在这种情况下,攻击者可以控制 uboot bootargs 变量,因此可以控制 /proc/cmdline 中的 ip= 行。

我希望 awk 专家能够放心,如果可能的话,这是不可注射的。

非常感谢。

澄清说明:我可以在 /proc/cmdline 中放入任何导致 shell 执行的内容吗?

4

1 回答 1

0

与 awk 无关,但你的命令不安全,因为你没有引用参数,t所以 shell 会评估它。尝试echo `echo '*'` echo "`echo '*'`" . 您的 awk 命令管道也可以减少,您应该使用$(...)而不是反引号。这应该是安全、简洁、高效和健壮的:

/bin/t "$(awk 'BEGIN{FS="ip=|:"}{print $2}' /proc/cmdline)"
于 2022-02-08T01:45:27.293 回答