我正在研究特定漏洞是如何工作的,我选择查看程序'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命令,这与它有关吗?
我一直试图让这一整天都无所事事,所以在这一点上任何帮助都会非常感激:)
答案 0 :(得分:2)
这是任何Bourne shell的一次性变量赋值功能。任何命令都可以带有零个或多个变量赋值前缀:
VAR1=VALUE1 VAR2=VALUE2 command arguments ...
使用为此命令设置的相应环境变量运行command arguments ...
。典型用途可能是
EDITOR=vim crontab -e