Доброго вечору друзі, сьогодні я б хотів провести мініурок по WebShell'ам, ті хто розуміють, що це, можете сміливо проігнорувати пост, або ж доповнити щось від себе у коментарях.
Що ж таке WebShell? - одразу по перекладу можна зрозуміти, що це консоль яка працює у мережі інтернет.
WebShell - в сучасності це виконуючий файл який містить в собі операцію що відправляє команду нашій операційній системі, спосіб злому сайтів використовуючи WebShell, один із найпростіших та найпопулярніших.
Для вашого розуміння наведемо приклад самого простого WebShell'а, мовою програмування PHP:
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
Алгоритм:
1. Якщо в посиланні існує $_GET змінна з назвою cmd (наприклад
test.com/webshell.php?cmd=help)
2. То виконати операцію system до команди що вказана у $_GET змінні cmd. (в нашому випадку help)
system - відправляє команду нашій OS, і отримує одразу відповідь.
Тепер підійдемо ближче до питання злому.
Наприклад у нас є сайт якогось села, де користувачам потрібно встановити фотографію профілю, щоб продовжити. Ми це використаємо та завантажимо наш WebShell, щоб відправляти команди серверу цього сайту, для подальшого злому.
1. Нам потрібно дозволити звантажувати PHP файли, для тих хто знайомий з версткою то розуміє що при створенні форми для завантаження файлів ми повинні вказати тип приймаючих файлів, використовуючи інспектор елементів ми можемо дуже просто замінити дозволений тип на *. Після цього ми обійшли ну хоч і смішний але певний захист від атаки.
2. Серверні перевірки одні з самих тяжких, і те що ми максимум можемо добитись так це виконати перераховані дії.
2.1 Додати в назву файла розширення яке вказує на зображення (наприклад webshell.png.php), змінити webshell.php на просто webshell.png не вийде, оскільки сервер буде сприймати наш виконуючий файл за статичний і скрипт буде просто не виконуватись, а браузер нам покаже не працюючу картинку.
2.2 Об'єднати картинку з PHP файлом. Звучить не просто, але цей метод дає найкращі результати. Для цього нам потрібно відкрити картинку яка не має в собі підряд ASCII символів (що означає початок php коду), і в кінці файлу додати просто код нашого WebShell'у. Так звісно як деякі з вас знають файли мають звичайний заголовок, і чому б нам не взяти перші 8 байтів картинки з розширенням png, або jpg, щоб наш код прикинувся у вигляді картинки. Але це мінімалістичне рішення оскільки сервер може зробити перевірку на наприклад кількість пікселей в ній, і тут такий мінімалістичний підхід здується як колона русаків під Бахмутом. Тому стараємось об'єднувати весь бінарний код картинки, а не тільки її заголовок.
2.3 При відправці файлів від нашого браузера відправляється запит в якому вказується назва файлу та його розширення. Як розумієте тут ми теж повинні підшаманити. Для цього ми будемо використовувати Burp (Comunnity Version), burp дасть нам змогу перехопити запит від нашого браузера та змінити в ньому тип відправленого файлу.
Доречі якщо торкнутись пункта 2.2 і 2.3, та спробувати відправити файл webshell.png, та через Burp змінити тип файлу що буде повернутий браузеру на html/php, то наш WebShell буде запущений як HTML, але відправляти команди ми все одно не зможемо, бо сервер буде сприймати наш файл за статичний і не буде давати змоги відправляти команди.
Після виконання цих 3 пунктів наші шанси збільшені доволі таки добре, але як ви розумієте не треба надіятись на те що сайт не захистився від даного типу атак. Після отримання доступу до команд серверу, можна пити чайок, і балдіти.) А якщо серйозно то 90% роботи вже виконано, можна рахувати що ціль зламана.
Саме головне після того, як ми завантажили webshell, отримати на нього повне посилання, для цього нам потрібен інспектор елементів (Сtrl + Shift + C).
Також ми приготували для вас два мінімалістичних, але максимально зручних WebShell'а, від нас. Перший звичайний, другий об'єднаний з картинкою (трошки не зрозумілий, але дієвий). Одразу додам їх в наступних повідомленнях та постараюсь їх оновлювати задля покращення, також хотів вас запитати чи потрібен
Показать полностью ...