Перейти к содержимому



Фотография
  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 roguevad

roguevad

    Эксперт.

  • Пользователи
  • PipPipPipPipPip
  • 203 сообщений

Отправлено 26 Январь 2021 - 09:52

Недавно Nemesida WAF заблокировал довольно занимательную попытку атаки с использованием XSS и JavaScript. Несмотря на то, что я не являюсь JS-разработчиком, ради интереса решил разобраться в сути атаки. Особенность вектора заключается в специфике работы самого WordPress — возможность редактировать файлы тем через админ-панель, позволяя незаметно для администратора внедрить вредоносный код.

Пейлоад, представленный в виде JS, размещается на сайте через XSS-уязвимость, после чего ждет своего исполнения. Отработанный на стороне администратора веб-ресурса, код модифицирует содержимое файла темы WordPress (header.php), позволяя злоумышленнику закрепиться в системе и полностью скомпрометировать веб-приложение.

Первым делом код проверяет, есть ли у жертвы cookie, содержащие какие-нибудь значения из wp-settingswp-admin и т.д. Если их нет, то выполняется переадресация на некоторые сайты, которые рекламировать я не буду, за рекламу мне не доплачивали.

oX7qCM5p9NE.jpg

 

Если cookie существуют, то создается несколько переменных. Например, в переменной e хранится имя домена, а в a — полезная нагрузка. В переменной p будет храниться XML-запрос.

toj3AjP7zXk.jpg

 

Когда переменные созданы, выполняется GET-запрос на адрес из переменной t, в которой в это время хранится путь для редактирования темы в файле header.php. В нашем случае содержимое переменной будет выглядеть так: example.com/wp-admin/theme-editor.php?file=header.php

Если код ответа на GET-запрос равен 200, переменные tpdi будут установлены, а если их нет — установятся или переопределятся. В переменную t попадет текст ответа, а переменные pdi заносят в массив данные согласно регулярным выражениям на основе информации, хранящейся в переменной t.

EE32eJ6v3fY.jpg

 

При этом, если переменные pdi не равны null, то скрипт ищет в 1-ом элементе массива переменной p значение chr(109).chr(46).chr(116).chr(120).chr(116). Если находит, то отправляет еще один GET-запрос в виде содержимого переменной e (переменная с доменом) + /wp-content/themes/d[1]/header.php (где первый элемент в массиве d — название темы). Если не находит элемент, то создается переменная r c HTML-элементом textarea, в который помещается значение элемента массива p[1], и создаются переменные:

c = a + o + encodeURIComponent(r.value), которая соединяет a (PHP-код), o (загрузку внешнего JS-скрипта), а также закодированное в URI значение переменной r;

s = d[1] — первый элемент масива d.

ac8_6EvAmJk.jpg

 

А вот содержимое запроса в переменной m = "nonce=" + encodeURIComponent(h) + "&_wp_http_referer=" + encodeURIComponent("/wp-admin/theme-editor.php?file=header.php") + "&theme=" + encodeURIComponent(s) + "&file=header.php&action=edit-theme-plugin-file&newcontent=" + c, вероятно, больше похоже на добавление/замену в header.php на значение переменной c.

Чтобы продемонстрировать, как это работает, основная полезная нагрузка (для наглядности) была заменена на пейлоад, позволяющий выполнить произвольный код на сервере. Если поместить пейлоад на странице сайта в виде какой-нибудь хранимой XSS, то при посещении страницы авторизованным пользователем сработает скрипт, который, в нашем случае, выполняет внешний JS, находящийся на удаленном сервере evil.lan.

DE-W6P23zkI.jpg

 

После выполнения скрипта, в header.php вносятся изменения в первую строчку.

-4RXIXIFMHc.jpg

 

И, как результат, мы можем выполнить произвольный код на стороне сервера, например, прочитать содержимое файла /etc/passwd.

g2Zk3h62MQw.jpg

 

 

Вся информация предоставлена лишь для ознакомления и не призывает к действиям. Автор не несет ответственности за использование этой информации.





Темы с аналогичным тегами взлом, взломщик, хакер, хакинг, атака, взлом сайта, атака на сайт, взлом wordpress, взлом с помощью javascript, как взломать сайт, уязвимость, эксплойт


Яндекс.Метрика Top.Mail.Ru Analysis Счетчик ИКС
Добавить Vkontakte Добавить в Facebook Добавить в Twitter Добавить в LiveJournal