这个 bash 脚本如何启动程序?

How is this bash script launching a program?

我正在研究特定漏洞的工作原理,我选择查看程序 'chkrootkit' 中的一个漏洞,它允许任何用户以 root 身份 运行 恶意文件。这个易受攻击的shellscript源码如下

slapper (){
   SLAPPER_FILES="${ROOTDIR}tmp/.bugtraq ${ROOTDIR}tmp/.bugtraq.c"
   SLAPPER_FILES="$SLAPPER_FILES ${ROOTDIR}tmp/.unlock ${ROOTDIR}tmp/httpd \
   ${ROOTDIR}tmp/update ${ROOTDIR}tmp/.cinik ${ROOTDIR}tmp/.b"a
   SLAPPER_PORT="0.0:2002 |0.0:4156 |0.0:1978 |0.0:1812 |0.0:2015 "
   OPT=-an
   STATUS=0
   file_port=

   if ${netstat} "${OPT}"|${egrep} "^tcp"|${egrep} "${SLAPPER_PORT}">
/dev/null 2>&1
      then
      STATUS=1
      [ "$SYSTEM" = "Linux" ] && file_port=`netstat -p ${OPT} | \
         $egrep ^tcp|$egrep "${SLAPPER_PORT}" | ${awk} '{ print   }' |
tr -d :`
   fi
   for i in ${SLAPPER_FILES}; do
      if [ -f ${i} ]; then
         file_port=$file_port $i
         STATUS=1
      fi
   done
   if [ ${STATUS} -eq 1 ] ;then
      echo "Warning: Possible Slapper Worm installed ($file_port)"
   else
      if [ "${QUIET}" != "t" ]; then echo "not infected"; fi
         return ${NOT_INFECTED}
   fi
}   

我知道漏洞利用的原因是因为 'file_port=$file_port $i' 行将执行 $SLAPPER_FILES 中指定的所有文件,因为用户 chkrootkit 是 运行ning(通常是 root),如果 $file_port 为空,因为缺少引号 变量赋值。

我的问题是为什么执行命令

file_port=$file_port $i

执行文件的结果?假设$i指的是文件的路径(/tmp/update)

我看到 file_port 可能在前面的 if 语句中更改为一些长的 netstat 命令,这与它有关吗?

我整天都在努力解决这个问题,但无济于事,所以在这一点上,我们将不胜感激 :)

这是任何 Bourne shell 的 one-shot 变量赋值功能。任何命令都可以使用零个或多个变量赋值作为前缀:

VAR1=VALUE1 VAR2=VALUE2 command arguments ...

使用为此命令设置的相应环境变量运行 command arguments ...。典型的用法可能是

EDITOR=vim crontab -e