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

时间:2017-01-21 15:39:57

标签: linux bash scripting execution exploit

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

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  $7 }' |
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正在运行(通常是root),如果$ file_port为空,因为周围缺少引号 变量赋值。“

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

file_port=$file_port $i

导致执行文件?假设$ i引用文件的路径(/ tmp / update)

我可以看到file_port可能会在之前的if语句中更改为某个long netstat命令,这与它有关吗?

我一直试图让这一整天都无所事事,所以在这一点上任何帮助都会非常感激:)

1 个答案:

答案 0 :(得分:2)

这是任何Bourne shell的一次性变量赋值功能。任何命令都可以带有零个或多个变量赋值前缀:

VAR1=VALUE1 VAR2=VALUE2 command arguments ...

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

EDITOR=vim crontab -e