2017-01-21 4 views
0

Я изучаю, как работает конкретный эксплойт, и я решил посмотреть на него в программе chkrootkit, которая позволяет любому пользователю запускать вредоносный файл с правами root. Исходный код для этой уязвимой shellscript выглядит следующим образомКак этот скрипт bash запускает программу?

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 пользователя работает (обычно корень), если $ file_port пуст, из-за отсутствия в кавычки присваивания значения переменной «.

Мой вопрос почему делает команда

file_port=$file_port $i 

результат выполнения файла? Предполагая, что $ i ссылается на путь файла (/ tmp/update)

Я вижу, что file_port может быть изменен на некоторую длинную команду netstat в предыдущем операторе if, это как-то связано с этим?

Я пытаюсь получить мою голову вокруг этого весь день без толку, поэтому на данном этапе любая помощь будет принята с благодарностью :)

ответ

2

Это один выстрел особенность присвоение переменной любого Борна. Любая команда может начинаться с нуля или более переменных заданий:

VAR1=VALUE1 VAR2=VALUE2 command arguments ... 

command arguments ... прогонов с соответствующими переменными окружения, установленные только для этой команды. Типичным использованием может быть

EDITOR=vim crontab -e 
+0

Право, что имеет смысл теперь, вы хоть представляете, что такое file_port на самом деле? в вашем примере очевидно, что вы настраиваете редактор для использования при редактировании crontab, но как вы думаете, в этом случае? Должен ли я просто предположить, что file_port - это какая-то переменная, которую червь будет искать, если он присутствует? – ASliceOfBread

+0

@ASliceOfBread Удивительное предположение: file_port ссылается на порт TCP или UDP, принимает или отправляет файл. – Jens

+0

да, я надеюсь, что это что-то такое, спасибо за помощь! – ASliceOfBread

Смежные вопросы