Привет! Вероятно, тебе когда-нибудь попадались веб-приложения, построенные на «1С-Битрикс: Управление сайтом», и ты задавался вопросом: как это ломать? Вроде бы прошелся по всем известной методичке, но все равно пусто. На прошлой работе я намучился ломать такие сайты, и вследствие выживания в дикой природе «Битрикса» у меня появились свои векторы атак. Я с тобой ими поделюсь — let’s go!
0x00 | Начало
Для начала познакомимся с тем, как появляются самописные скрипты. Когда ты разворачиваешь «Битрикс», предлагается выбрать шаблон под тематику сайта.
![Как выглядят шаблоны Как выглядят шаблоны](https://habrastorage.org/getpro/habr/upload_files/d94/33a/9c3/d9433a9c3faf7749d11c17faf795195b.png)
На основе этого автоматически загружаются подходящие PHP-скрипты для функционирования тех или иных механизмов.
Но иногда того, что подгрузил «Битрикс», мало. Следовательно, приходится писать PHP-скрипт на основе API «Битрикса» либо без него, именно так создаются самописные скрипты. И периодически приходится обращаться к скрипту через AJAX. Однако разработчик мог допустить уязвимость в коде или написать скрипт для какой-нибудь системной аналитики веб-приложения, поэтому приходится искать такие скрипты. Теперь разберемся, как их искать.
0x01 | Поиск самописных скриптов
![](https://habrastorage.org/getpro/habr/upload_files/911/bb6/68b/911bb668b11233aa37cb25c4f9c45030.png)
AJAX. Иногда используется архитектура SPA (single-page application), когда с основной страницы по одному клику может выскочить, к примеру, форма подписки на рассылку. В таком случае достаточно порыться в коде элемента и найти ajax. Искать можно по словам типа ajax, $.get, $.post, XMLHttpRequest. Далее можно заметить, что в JS-скрипте есть PHP-файл, к которому идет ajax, увидеть, какие параметры query string ему передаются и через какой HTTP-метод.
![Так выглядит AJAX Так выглядит AJAX](https://habrastorage.org/getpro/habr/upload_files/f88/cf9/b09/f88cf9b09bb2b1262658ae3346085ab5.png)
![Как еще может выглядеть AJAX Как еще может выглядеть AJAX](https://habrastorage.org/getpro/habr/upload_files/116/a05/99e/116a0599ec0d37e0b24a18b4d53f7bd8.png)
![Пример самописного скрипта к которому обращается AJAX Пример самописного скрипта к которому обращается AJAX](https://habrastorage.org/getpro/habr/upload_files/734/105/507/734105507f18a99f70cbbfed468b2fb2.png)
Фаззинг. Достаточно запустить какой-нибудь ffuf, wfuzz, dirsearch с расширением файла php, inc и найти самописный скрипт.
JS-скрипты. Покопавшись в панели разработчика или отрыв скрипт с фаззинга, можно открыть их в браузере и поискать слова типа .php, .inc, .inc.php, точно так же в них — ajax.
Proxy. Отловить самописные скрипты можно через проксирование трафика, как пример — погулять по сайту и потом открыть Logger в Burp Suite.
0x02 | Что делать дальше
Атака mass assignment
Программные фреймворки и скрипты иногда позволяют разработчикам автоматически привязывать параметры HTTP-запроса к переменным кода или к объектам, чтобы упростить использование такого фреймворка или скрипта. Но иногда это может причинить вред. Мы можем добавить параметры, которые разработчик не предполагал, что, в свою очередь, создаст или перезапишет объекты в коде. Это называется mass assignment
Проще говоря, просто делаем фаззинг на параметры.
После того как ты нашел несколько скриптов, поищем в них параметры.
Это можно сделать двумя способами: поискать параметры в найденном AJAX и с использованием утилит, например paramspider, x8, Param Miner.
![Пример работы утилиты ParamSpider Пример работы утилиты ParamSpider](https://habrastorage.org/getpro/habr/upload_files/a8b/369/82e/a8b36982e5e8899d3c24c1842a7b1b71.png)
0x03 | Атакуем
![](https://habrastorage.org/getpro/habr/upload_files/3c1/698/1ea/3c16981eaa0b53e0f2ba098fc9f5d271.png)
Когда ты составил список самописных скриптов и определился, какие параметры query string они принимают, можно протестировать сайт на ряд уязвимостей в зависимости от функциональности скрипта.
К примеру, если это подписка на рассылку, значит, он будет ожидать email-адрес — оттуда и можно построить вектор атаки и проверить на XSS таким пейлоадом: mail(<script>alert(0)</script>)@gmail.com
Кейс
В ходе анализа защищенности сайта — про который мне нельзя говорить :( — был обнаружен самописный скрипт через AJAX.
![Самописный скрипт send-ticket.php Самописный скрипт send-ticket.php](https://habrastorage.org/getpro/habr/upload_files/18e/a0f/dde/18ea0fdde03fa9cd2ea2657be857208d.png)
Этот скрипт отвечал за покупку билета, принимая такие данные от пользователя, как номер, почта и т. д. В результате все это накапливалось в переменной "stringData" и отправлялось с помощью метода POST.
Переменные, нужные для хранения пользовательской информации, также воспринимались скриптом как параметр.
В совокупности запрос выглядел так: /include/send-ticket.php?user_name=lolkek
Первое, что пришло мне на ум, — кинуть XSS-пейлоад, но не через метод POST, а через GET. В результате это сработало, и я получил reflected XSS.
![Отработка пейлоада XSS Отработка пейлоада XSS](https://habrastorage.org/getpro/habr/upload_files/2f8/9ca/e8f/2f89cae8fc75e5050fb7d67cb9548252.png)
Тестировать можно и на другие уязвимости — все, к сожалению, по этому сайту раскрыть не смогу. Обращай внимание на то, что делает скрипт и какие параметры принимает. Не стесняйся также подставлять другие параметры, данные и играть с методами HTTP.
0x04 | Заключение
Мы научились атаковать сайты на «1С-Битрикс» без методички.
Разница в том, что с помощью методички атакуют сам фреймворк, а информация из этой статьи позволяет ловить разработчиков на ошибке. В результате можно найти уязвимость или даже скрипт, с которого — поймать какие-нибудь системные логи.
![](https://habrastorage.org/getpro/habr/upload_files/4af/0d3/348/4af0d334845ee5c64a16190f722c5e6a.png)
Напоследок хочу кинуть инфографику:
![](https://habrastorage.org/getpro/habr/upload_files/2f6/b68/e05/2f6b68e058069200a1282f241c1fd97b.png)
Комментарии (7)
TigerClaw
18.01.2024 12:59+2А причем тут битрикс, это проблема любых сайтов с кривым кодом. Битрикс как раз таки дает механизмы обезопаситься и обработать входные данные. И кстати в битриксе есть механизм тестирования пользовательских скриптов на уязвимость. В общем статья ни о чем.
При этом во многих случаях никакой точки входа через скрипты просто нет.
numb
18.01.2024 12:59Развернуть какой-то продукт.
Добавить в него кривой код, который позволяет запускать себя в обход всех механизмов безопасности основного продукта.
Кричать что продукт дырявый
Ну такое себе..
Статья ради хайпа на имени продукта.
Metotron0
18.01.2024 12:59Но зато у автора теперь есть статья, ему можно повышать карму. У меня нет статей, потому что я не хочу писать что-то настолько же очевидное, а ничего прорывного я не знаю, поэтому мне карму повышать нельзя :)
Panov_Alexey
Как минимум не помешало бы упоминание о том, что подобные действия могут попасть под действие УК, а информация в статье представлена с целью упрощения поиска ошибок и багов в собственных проектах с целью их устранения.