Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Как работает данная XXE атака?

Здесь репорт, демонстрирующий атаку XXE.
Если вкратце, атакующий разместил у себя на сервере xml
]> &localfile;&remotedoc; email settings SMTP 52.34.103.214 1191 off account@obmhld.com yandex.ru off off off
в определённой директории, и после этого попытался авторизоваться на сайте mail.ru со следующими данными:
@
И после этого с мэйловского сервера прилетают запросы на сервер атакующего:
1:
5.61.237.44 - - [14/Feb/2018:01:05:14 +0000] "GET /autodiscover/autodiscover.xml HTTP/1.0" 200 955 "http://obmhld.com/autodiscover/autodiscover.xml" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/6.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0; Microsoft Outlook 15.0.4481; ms-office; MSOffice 15)"
2:
5.61.237.44 - - [14/Feb/2018:01:05:15 +0000] "GET /pocs/?token=xmlsdfgdg5454g54&doc1=2 HTTP/1.0" 200 10 "-" "-"
Хотелось бы понять механизм работы этой чудной атаки. Спасибо!


Ответ

Атака состоит из двух частей.
В первой части Mail.ru пытается узнать данные для получения почты с неизвестного домена, загружая autodiscover.xml. Понятно, зачем это им нужно: можно сразу дать человеку все данные для настройки сбора почты, останется только ввести пароль. Сам механизм известный, в нём самом каких-то проблем. Примерный вид файла. Не исключаю что они до сих пор запрашивают этот файл.
Во второй части начинается интересное: парсер Mail.ru загружает внешние сущности (вида   или &custom;), которые объявляются в начале документа:

В общем случае можно вставить сущность прямо в документ, получим содержимое файла, на которую она ссылается, прямо на экран. В данном случае это не работает, но всё равно можно увидеть получается распарсить файл или нет. Например, если первая сущность &localfile; ссылается на несуществующий файл, то вторая сущность &remotedoc; не приведет к HTTP запросу на сервер атакующего. Если же файл есть, то будет запрос к серверу атакующего.
Если говорить об общем случае, то возьмём такой XML:
]> &hostname;
Пропустим его через xmllint:
xmllint --noent xxe.xml
И увидим у себя на экране имя вашего компьютера:
mysuperhostname
Как защититься от этого? Отключить загрузку внешних сущностей. Например, в PHP для этого есть функция libxml_disable_entity_loader(). Документация.

Комментариев нет:

Отправить комментарий