Task 9

Task 9

Rakovsky Stanislav, Unicorn Team

На периметре компании обнаружен веб-сервер http://18.193.113.102/, вам необходимо прочитать флаг находящийся на файловой системе.


На основной странице нас ожидает Not found. Присмотримся к хэдерам ответа, Werkzeug/1.0.1 Python/3.8.5 - нас ожидает что-то самописное, возможно сервер на фласке.


Просканим пути с помощью dirb. Найдена лишь одна директория - home/, которая на нас ругается запретом. Просканив ее, ничего не получили.


Окке, используем dirsearch. Нашли /access.log в корне. Файл представляет собой активность пользователей с 21 марта по... ну, очевидно, скрафчен этот артефакт руками и не очень корректно:

193.76.191.88 - - [31/Mar/2021:23:59:11 +0300] "POST /search/tag/list HTTP/1.0" 200 5012 "Mozilla/5.0 (compatible; MSIE 6.0; Windows 95; Trident/3.1)"
188.193.213.216 - - [01/Mar/2021:00:04:05 +0300] "GET /apps/cart.jsp?appID=9941 HTTP/1.0" 200 5070 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_8_9; rv:1.9.3.20) Gecko/2017-06-13 22:13:39 Firefox/3.8"

Но нам это не особо важно) Выделим из запроса только пути.

>> with open("access.log", "r") as f:
...  l = f.readlines()
...
>>> l[0].split('"')
['151.226.155.255 - - [21/Mar/2021:23:53:21 +0300] ', 'GET /wp-admin HTTP/1.0', ' 500 4920 ', 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/5331 (KHTML, like Gecko) Chrome/13.0.833.0 Safari/5331', '\n']
>>> s = set()
>>> for line in l:
...   _ = line.split('"')[1]
...   s.update({_})
...
>>> s

Выделяется огромное количество операций над /apps/cart.jsp

>>> sum(["cart.jsp" in i for i in s])/len(s)
0.9761146496815286

Тогда сначала приглядимся к тем запросам, которые не относятся к ним.

>>> [i for i in s if "cart.jsp" not in i]
['PUT /explore HTTP/1.0', 'GET /app/main/posts HTTP/1.0', 'GET  HTTP/1.0', 'GET /wp-content HTTP/1.0', 'PUT /search/tag/list HTTP/1.0', 'POST /app/main/posts HTTP/1.0', 'DELETE /list HTTP/1.0', 'GET /explore HTTP/1.0', 'GET /home HTTP/1.1', 'DELETE /posts/posts/explore HTTP/1.0', 'GET /posts/posts/explore HTTP/1.0', 'POST /wp-content HTTP/1.0', 'PUT /list HTTP/1.0', 'PUT /wp-admin HTTP/1.0', 'DELETE /explore HTTP/1.0', 'DELETE /search/tag/list HTTP/1.0', 'GET /list HTTP/1.0', 'POST /wp-admin HTTP/1.0', 'PUT /posts/posts/explore HTTP/1.0', 'POST /search/tag/list HTTP/1.0', 'PUT /wp-content HTTP/1.0', 'POST /posts/posts/explore HTTP/1.0', 'DELETE /app/main/posts HTTP/1.0', 'DELETE /wp-admin HTTP/1.0', 'GET /search/tag/list HTTP/1.0', 'DELETE /wp-content HTTP/1.0', 'POST /list HTTP/1.0', 'GET /home/sif HTTP/1.1', 'PUT /app/main/posts HTTP/1.0', 'POST /explore HTTP/1.0']

За глаз цепляется, что все эти запросы, кроме нашего /home и /home/sif, работают по HTTP/1.0. Заглянув в файл, становится понятным, что это в принципе два запроса, которые работают на ином протоколе.

По урлу /home/sif нас ждет строка поиска.

Спасибо за подсказку)

На уровне инстинкта любого цтф-ера должно быть: посмотреть в .bash_history, .bashrc, ключики из .ssh)

.bash_history. Подтягиваем архив с другой машины, подготавливаем окружение, запускаем.


.bashrc

Похоже, мы нашли флаг: flag{kekpekn1cet0m33ty0u}

Посмотреть на .ssh/id_rsa нам не позволяют. Прочитать ../../../../../etc/passwd - тоже.

При попытке забрать staj_path_trav.zip, в нас метают 500-й ошибкой.