HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Песочница
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.01.2016, 07:32
leksadin
Guest
Сообщений: n/a
Провел на форуме:
28741

Репутация: 12
По умолчанию

Здравствуйте. Хочу представить вашему вниманию очередную площадку для тренеровок в области web-хакинга.

Practical Website Hacking

Ссылка на мероприятие: http://ctf.infosecinstitute.com/ctf2/

Представлено всё в формате CTF, есть 13 уровней, на каждом уровне дано задание. Оформлено всё довольно приятно, слева вверху выпадающий список уровней (можно сразу приступить к любому). В центре экрана - задание. В левом нижнем углу есть название типа уязвимости, которой нужно пользоваться, и её номер в OWASP-TOP10. Внизу есть кнопка с подсказками.

Задания разные: XSS, LFI, CSRF, инъекции, работа с php, обход фильтров, blacklist и прочее. В общем, хорошо подойдёт тем, кто представляет, что такое уязвимости, но не имеет достаточно практики.

Write Up

Далее пойдут спойлеры, распишу, как я проходил данную площадку. Кто хочет порешать самостоятельно, не читайте

.SpoilerTarget" type="button">Spoiler: Level 1 - XSS
У нас есть форма для составления списка сайтов. Нужно с помощью XSS вывести сообщение "Ex1". Ну что ж, начнём. Сначала введём корректные данные. Составляется список с названием и адресом. В одну из этих форм нужно подсунуть скрипт

Код HTML:
HTML:
alert('Ex1')
Вставляем его в обе формы и отправляем, но увы, формат не подходит. Значит, есть проверка. открываем html-код сайта (правая кнопка мыши > исследовать элемент). Видим, что в названии сайта стоят разрешённые символы и максимальный размер, а в адресе сайта - тип url и тоже максимальный размер.

Есть несколько вариантов решения. Браузеры позволяют р

едактировать html "на лету" (на стороне клиента), чем мы и воспользуемся. Например, можно просто в атрибут pattern дописать символы <>, maxsize увеличить. или просто удалить эти атрибуты. И изменить тип url на text. Но мне больше нравится такой вариант: в основную форму можно добавить атрибут novalidate="". Он отключает внутренние проверки на корректность данных.

Код HTML:
HTML:
Отправляем, ура. Скрипт висит на стене, но не обработан. Значит, html проверку преодолели, но есть ещё проверка. Изучаем html-код, видим ex1.js. В нём находим функцию замены спец.символов.

Код:
Code:
var siteName = $(".ex1 input[type='text']").val().trim().replace(//g, "&gt;");
var siteURL = $(".ex1 input[type='url']").val().trim().replace(//g, "&gt;");
Chrome позволяет "на лету" редактировать и javascript, но у меня стоит лиса. Поэтому, как мне посоветовали здесь же, я скопировал весь скрипт и всунул его в консоль, изменив "&gt;" и "&lt;" на ">" "

.SpoilerTarget" type="button">Spoiler: Level 2 - php injection
Здесь у нас есть самодельный калькулятор. Нужно узнать версию php, информацию о сервере и блаблабла. Это можно сделать функцией phpinfo(). Приступим. Подставляем нормальные числа, потом пробуем буквы. Вроде бы работает правильно. Смотрим html, обращаем внимание на блок с арифметическими действиями. Помимо текста в них есть реальный оператор. Скорее всего, он передаётся в функцию на сервер (как говорит подсказка, там выполняется eval). В неё мы и будем внедряться. Переписываем операцию сложения.

Код:
Code:
+
Нажимаем - всё сработало. Отправляемся на третий уровень.

.SpoilerTarget" type="button">Spoiler: Level 3 - Parameter Delimiter
Форма для регистрации. Вбиваем, логинимся - видем строчку role: normal. По заданию мы должны зарегистрироваться, при этом с правами admin. Мы знаем, что данные о пользователе хранятся в файле, и используется некоторый разделитель. Это может быть , | || # и т.д. При этом порядок данных тоже может быть любой. Ну, будем перебирать в формате userXXX | admin

Сразу замечаем, что стоит ограничитель длины в полях username и password. Удаляем атрибут maxlength (или увеличиваем). Вбиваем поля, отправляем....и ошибка. Оказывается, проверка на длину стоит ещё и у них на сервере. Значит, остались только поля last name и email. Тыкаем, тыкаем, до, после, запятую, палку, слеш. Не срабатывает. Тогда открываю подсказку. И чёрт, подсказка говорит, что всё лежит в разных строчках. Ну, и опять несколько вариантов. Первый - удалить поле ввода и встроить новое (в которое можно вставлять несколько строчек).

Код HTML:
HTML:
Другой вариант, написать встрочку и перехватить Burp'ом, поставить ентер уже в нём.

В общем регистрируемся, заходим и ... видим слово admin. Но ничего не случается...

тогда вспоминаем что вид был role:normal, поэтому делаем ещё одну попытку, уже добавляя role:admin.

Попадаем в новый уровень.

P.S. пытался поставить просто в одну строчку символ переноса (%0A) - не сработало.

.SpoilerTarget" type="button">Spoiler: Level 4 - Insecure Direct Object References
Чтож. У нас подключается GET-параметром текстовый файл. Нужно "загрузить файл PHP, расположенный в корне infosecinstitute.com. Файл не должен существовать, но вы должны загрузить его без ошибок, и он должен иметь расширение .php"

потыкав по формам, видим параметр file=file1.txt Пытаемся воткнуть php - выдаёт ошибку. ну, ладно. Сначала в корень надо попасть. ну, делаем запрос http://ctf.infosecinstitute.com/ctf2...e.com/file.txt

Выдаёт ошибку, что, мы указываем на url. Атата. хм... в таких фильтрах часто делают ошибку в регистрах. Делаем запрос и всё гуд:

http://ctf.infosecinstitute.com/ctf2...e.com/file.txt

на .php стоит фильтрация, на .txt её нет. Тогда file.txt.php даёт нам победу.

.SpoilerTarget" type="button">Spoiler: Level 5 - Missing Function Level Access Control
Страница для авторизированных пользователей. Нам нужно с помощью "магии" залогиниться. Первая мысль - найти в куках параметр авторизации. Увы, мимо... Ладно. Видим, что Login выглядит как кнопка, но не нажимается. Открывает html. Это действительно кнопка с атрибутом disable. указывает на ссылку login.html. Пытаемся пройти по адресу - вновь провал. Тогда возвращаемся на наш пятый уровень, просто заменяя в Headers предшествующую ссылку на Referer: http://ctf.infosecinstitute.com/ctf2...ses/login.html и всё сработало.

P.S. Для Firefox удобный плагин Modify Headers. Просто там пишешь, что такой-то заголовок постоянно изменять, добавлять, удалять.

.SpoilerTarget" type="button">Spoiler: Level 6 - CSRF
Ну, здесь всё просто. Есть форма для комментариев, есть парочка тегов. Нам нужно сделать перессылку на другую страничку. Тег изображения может содержать адрес сайта, поэтому им и воспользуемся

Код HTML:
HTML:
P.S. Есть некоторые тонкости, что не считает правильным http, или например, закрытый тег img, или пробел после ссылки (так и не осознал эту дурость. На ощупь тыкал)

.SpoilerTarget" type="button">Spoiler: Level 7 - XSS
Вновь XSS. Дана страничка для входа. На этот раз надо засунуть на страницу

Код HTML:
HTML:
YOUR NAME HERE
На этом уровне немного битая вёрстка, но это роли не играет. пробуем ввести что-нибудь - срабатывает действие.

Смотрим html-код. Видим строчку

Код HTML:
HTML:
.

Сюда передаётся значение адресной строки. Попробуем в адресную строку прописать такие адреса:

Код:
Code:
http://ctf.infosecinstitute.com/ctf2/exercises/ex7.php/">
http://ctf.infosecinstitute.com/ctf2/exercises/ex7.php/'>
Двойная кавычка не прошла, а вот одинарная выпадает за тег . Осталось просто после '> использовать XSS

Код:
Code:
ctf.infosecinstitute.com/ctf2/exercises/ex7.php/'>YOUR NAME HERE
.SpoilerTarget" type="button">Spoiler: Level 8 - File inclusoin
Есть форма для загрузки картинки и форма показа картинок. Нужно с помощью загруженного файла запустить JS-скрипт с окном alert().

Создаём файл 8.html

Код HTML:
HTML:
alert('File inclusion');
Вот его-то мы и будем загружать на сервер.

При попытке залить его вылезает ошибка, расширение плохое. Переименовываем в 8.jpg.html - проходит.

Так, осталось этот файл запустить. Так, у нас есть форма с картинками. Смотрим код - видим строку с ссылкой на картинку

Код HTML:
HTML:
Заходим по этому адресу, и у нас открывается картинка. Значит, сюда залился и наш файл. Открываем

Код:
Code:
http://ctf.infosecinstitute.com/ctf2/ex8_assets/img/8.jgp.html
и нас перессылают на следующий уровень.

.SpoilerTarget" type="button">Spoiler: Level 9 - Broken Authentication and Session Management
Мы авторизованы под одним человеком, надо зайти под другого. Никаких активных форм нет.

Идём копаться в куки. Видем в них параметр user=Sk9ITitET0U%3D

%3D это символ "=" . Sk9ITitET0U= похоже на код base64. Идём на сайт base64.ru и расшифровываем. получаем JOHN+DOE. Значит, зашифровываем MARY+JANE и подставляем в куки. Можно сделать с помощью Burpsuite, или с помощью Modify Headers прям в браузере.

.SpoilerTarget" type="button">Spoiler: Level 10 - Source Code Tampering
Есть игра, задание - получить 9999 очков и пройти на максимальном уровне сложности. Ну, ради интереса я сыграли пару раз. Потом полез в код страницы, и наткнулся на js-код игры.

Код HTML:
HTML:
finishGame: function(action) {
        if (action === "win") {
          if (this.data.totalShownColors === 9) {
            setTarget({
              extreme: true
            });
          }
          ++this.data.stats.wins;
          this.addAlert("Congrats. You won");
        } else if (action === "lose") {
          ++this.data.stats.loses;
          this.addAlert("Oops. You did not make it...");
        }
        this.data.stats.pts += this.data.points;
        localStorage[this.data.username] = JSON.stringify(this.data.stats);
        return this.updateStats();
      },
Немного его подправил, чтоб всегда отмечался, как режим суперсложно. Ну и не добавлял баллов, а сразу присваивал 9999.

Код HTML:
HTML:
finishGame: function(action) {
        if (action === "win") {
            setTarget({
              extreme: true
                };
          this.data.stats.wins=9999;
P.S. Как и в первой задаче, здесь можно было "на лету" править файл в Chrome с помощью Developer Tools, я же в FF просто удалил этот код из страницы сайта, и вставил заново в консоли Firebug.

.SpoilerTarget" type="button">Spoiler: Level 11 - Bypassing blacklists
К сожалению, мы забанены. Нужно это исправить. Хм... ну, лезем в куки, видим там параметр welcome=no и меняем его на yes. Подставляем новые куки в Modify Headers и готово.

.SpoilerTarget" type="button">Spoiler: Level 12 - Dictionary Attack
Нужно подобрать пароль к пользователю admin. В условии нам сказано нагуглить пароль по фразе filetype:lst password

На первой же ссылке висит список паролей (их там 3545). Можно скопировать и вставить в текстовый документ, можно так:

Код:
Code:
wget http://www.openwall.com/passwords/wordlists/password-2011.lst
Так, словарь есть, давайте брутить. Да, не забудьте подправить файлик, стереть комментарии.

Использую гидру:

Код:
Code:
hydra -l "" -P passwords/password-2011.lst http-post-form://ctf.infosecinstitute.com -m '/ctf2/exercises/ex12.php:username=admin&password=^PASS^&logIn=Login:Incorrect username or password combination' -F
а вот для любителей медузы:

Код:
Code:
medusa -u "admin" -P passwords/password-2011.lst -h ctf.infosecinstitute.com -m FORM:"ctf2/exercises/ex12.php" -M web-form -m FORM-DATA:"post?username=&password=&logIn=Login" -m DENY-SIGNAL:"Incorrect username or password combination" -F -t10
Пароль подобрался - princess. Заходим и попадаем на следующий уровень. Ух, последний...

P.S. ещё видео есть в интернете, где парень пишет свой брут на curl.

.SpoilerTarget" type="button">Spoiler: Level 13 - Unvalidated Redirects and Forwards
И последний уровень, нам нужно сделать редирект на другой сайт.

Смотрим пакет при обновлении страницы

Код:
Code:
http://ctf.infosecinstitute.com/ctf2/exercises/ex13.php?redirect=
Пробуем подставить сайт Яндекса http://www.yandex.ru/ Фильтрует. Заглавные тоже фильтрует. WWW и HTTP фильтруются. Тогда делаем так:

Код:
Code:
http://ctf.infosecinstitute.com/ctf2/exercises/ex13.php?redirect=//yandex.ru
и ложимся спать с чистой душой))

P.S. Сейчас освоюсь с форумом, научусь картинки добавлять и подошью скринов
 
Ответить с цитированием

  #2  
Старый 30.01.2016, 06:57
leksadin
Guest
Сообщений: n/a
Провел на форуме:
28741

Репутация: 12
По умолчанию

Дописал) Если будут вопросы - пишите) И да, если кто объяснит мне, тугодуму, как цеплять картинки - буду благодарен)
 
Ответить с цитированием

  #3  
Старый 30.01.2016, 14:12
Kevin Shindel
Guest
Сообщений: n/a
Провел на форуме:
350242

Репутация: 62
По умолчанию

Цитата:
Сообщение от leksadin  
leksadin said:

Дописал) Если будут вопросы - пишите) И да, если кто объяснит мне, тугодуму, как цеплять картинки - буду благодарен)
через piccy.info -> Картинка 500 px-> Для форумов.
 
Ответить с цитированием

  #4  
Старый 31.01.2016, 14:46
leksadin
Guest
Сообщений: n/a
Провел на форуме:
28741

Репутация: 12
По умолчанию

Цитата:
Сообщение от Kevin Shindel  
Kevin Shindel said:

через piccy.info -> Картинка 500 px-> Для форумов.
Спасибо, понял) На днях подцеплю скрины к статье - и всё =)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ