2017-01-21 1 views
0

Ich untersuche, wie ein bestimmter Exploit funktioniert, und ich entschied mich dafür, einen im Programm 'chkrootkit' zu betrachten, das es jedem Benutzer erlaubt, eine schädliche Datei als root auszuführen. Der Quellcode für diese gefährdete Shell ist wieWie startet dieses Bash-Skript ein Programm?

folgt
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 
} 

Ich weiß, dass der Grund, warum die Werke verwerten, weil die Zeile ‚file_port = $ file_port $ i‘, um alle Dateien in $ SLAPPER_FILES angegeben wird ausgeführt, wenn der Benutzer chkrootkit ist laufen (in der Regel root), wenn $ file_port leer ist, weil die Anführungszeichen um die variable Zuordnung fehlt.“

Meine Frage ist, warum führt den Befehl

file_port=$file_port $i 

Ergebnis in der Ausführung der Datei? Angenommen, $ i verweist auf den Pfad der Datei (/ tmp/update)

Ich kann sehen, dass file_port möglicherweise in einen langen netstat-Befehl in der vorherigen if-Anweisung geändert wurde, ist das etwas damit zu tun?

Ich habe versucht, meinen Kopf um diese den ganzen Tag ohne Erfolg zu bekommen, an dieser Stelle so dass jede Hilfe sehr geschätzt wird :)

Antwort

2

Dies ist der one-shot variable Zuordnung Merkmal jeder Bourne-Shell. Jeder Befehl kann mit null oder mehr variable Zuweisungen vorangestellt werden:

VAR1=VALUE1 VAR2=VALUE2 command arguments ... 

Läuft command arguments ... mit den jeweiligen Umgebungsvariablen nur für diesen Befehl. Eine typische Verwendung könnte sein

EDITOR=vim crontab -e 
+0

Richtig, das macht jetzt mehr Sinn, haben Sie irgendeine Idee, was file_port eigentlich ist? In Ihrem Beispiel ist es offensichtlich, dass Sie den Editor für die Bearbeitung der Crontab einstellen, aber was denken Sie, dass es in diesem Fall ist? Sollte ich einfach annehmen, dass file_port eine Variable ist, nach der der Wurm suchen würde, wenn sie vorhanden wäre? – ASliceOfBread

+0

@ASliceOfBread Wild-assestierte Schätzung: file_port referenziert einen TCP- oder UDP-Port und empfängt oder sendet eine Datei. – Jens

+0

Ja ich erwarte, dass es etwas in dieser Richtung ist, danke für die Hilfe! – ASliceOfBread

Verwandte Themen