
Un script de Python para extraer información de una aplicación Microsoft Remote Desktop Web Access (RDWA)

<p align="center">
Una herramienta todo-en-uno en Python para extraer información, realizar spraying y fuerza bruta de contraseñas en una aplicación Microsoft Remote Desktop Web Access (RDWA).
<br>
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/p0dalirius/RDWArecon">
<a href="https://twitter.com/intent/follow?screen_name=podalirius_" title="Seguir"><img src="https://img.shields.io/twitter/follow/podalirius_?label=Podalirius&style=social"></a>
<a href="https://www.youtube.com/c/Podalirius_?sub_confirmation=1" title="Suscribirse"><img alt="Suscriptores del canal de YouTube" src="https://img.shields.io/youtube/channel/subscribers/UCF_x5O7CSfr82AfNVTKOv_A?style=social"></a>
<br>
</p>
Esta herramienta Python permite extraer diversa información de una aplicación Microsoft Remote Desktop Web Access (RDWA), como el FQDN del servidor remoto, el nombre del dominio AD interno (a partir del FQDN) y la versión del servidor Windows remoto.
## Uso
```
$ rdwatool -h
____ ____ _ _____ __ __
/ __ \/ __ \ | / / | / /_____ ____ / /
/ /_/ / / / / | /| / / /| |/ __/ __ \/ __ \/ / @podalirius_
/ _, _/ /_/ /| |/ |/ / ___ / /_/ /_/ / /_/ / /
/_/ |_/_____/ |__/|__/_/ |_\__/\____/\____/_/ v2.0
usage: rdwatool recon [-h] [-tf TARGETS_FILE] [-tu TARGET_URLS] [-v] [--no-colors] [--debug] [-T THREADS] [-PI PROXY_IP] [-PP PROXY_PORT] [-rt REQUEST_TIMEOUT] [-k] [-L] [--export-xlsx EXPORT_XLSX] [--export-json EXPORT_JSON]
[--export-sqlite EXPORT_SQLITE]
options:
-h, --help muestra este mensaje de ayuda y sale
-v, --verbose Modo verbose. (por defecto: False)
--no-colors Desactiva la salida con colores. (por defecto: False)
--debug Modo debug, para verbosidad extrema. (por defecto: False)
-T THREADS, --threads THREADS
Número de hilos (por defecto: 250)
Targets:
-tf TARGETS_FILE, --targets-file TARGETS_FILE
Ruta al archivo que contiene una lista línea por línea de objetivos.
-tu TARGET_URLS, --target-url TARGET_URLS
URL objetivo de la página de inicio de sesión RDWA.
Configuración avanzada:
-PI PROXY_IP, --proxy-ip PROXY_IP
IP del proxy.
-PP PROXY_PORT, --proxy-port PROXY_PORT
Puerto del proxy.
-rt REQUEST_TIMEOUT, --request-timeout REQUEST_TIMEOUT
Establece el tiempo de espera de las peticiones HTTP.
-k, --insecure Permite conexiones inseguras al servidor cuando se usa SSL (por defecto: False)
-L, --location Sigue redireccionamientos (por defecto: False)
Exportar resultados:
--export-xlsx EXPORT_XLSX
Archivo XLSX de salida para almacenar los resultados.
--export-json EXPORT_JSON
Archivo JSON de salida para almacenar los resultados.
--export-sqlite EXPORT_SQLITE
Archivo SQLITE3 de salida para almacenar los resultados.
```
## Demostración
https://user-images.githubusercontent.com/79218792/152828736-e2e39305-8167-432e-ac3a-3449ea9ff414.mp4
## Ejemplo de salida
- **En modo `recon`**:
```
rdwatool recon -tf ./subdomains.txt
```

- **En modo `spray`**:
```
rdwatool spray -tu https://rds.podalirius.net/RDWeb/Pages/en-US/login.aspx
```
- **En modo `brute`**:
```
rdwatool brute -tu https://rds.podalirius.net/RDWeb/Pages/en-US/login.aspx
```
## Contribuciones
Las solicitudes de extracción son bienvenidas. Si deseas añadir otras funcionalidades, no dudes en abrir un issue.
## Cómo funciona
### Obteniendo información sobre el servidor remoto
Hay mucha información pre-rellenada en la página `login.aspx` de la aplicación Remote Desktop Web Access (RDWA). En los campos de entrada `WorkSpaceID` y/o `RedirectorName` podemos encontrar el FQDN del servidor remoto, y `WorkspaceFriendlyName` puede contener una descripción textual del workspace.
```html
<form id="FrmLogin" name="FrmLogin" action="login.aspx?ReturnUrl=%2FRDWeb%2FPages%2Fen-US%2FDefault.aspx" method="post" onsubmit="return onLoginFormSubmit()">
<input type="hidden" name="WorkSpaceID" value="DC01.lab.local"/>
<input type="hidden" name="RDPCertificates" value="E7100C72B6C11A5D14DE115D801E100C79143C19"/>
<input type="hidden" name="PublicModeTimeout" value="20"/>
<input type="hidden" name="PrivateModeTimeout" value="240"/>
<input type="hidden" name="WorkspaceFriendlyName" value="Workspace%20friendly%20name%20or%20description"/>
<input type="hidden" name="EventLogUploadAddress" value=""/>
<input type="hidden" name="RedirectorName" value="DC01.lab.local"/>
<input type="hidden" name="ClaimsHint" value=""/>
<input type="hidden" name="ClaimsToken" value=""/>
<input name="isUtf8" type="hidden" value="1"/>
<input type="hidden" name="flags" value="0"/>
...
</form>
```
La herramienta rdwatool analiza automáticamente este formulario y extrae toda la información.
### Imagen del banner de la versión del SO
Si la instalación remota de RDWeb no está endurecida, existe una alta probabilidad de que el archivo de imagen de versión predeterminado `/RDWeb/Pages/images/WS_h_c.png` siga siendo accesible (incluso si no está enlazado en la página de inicio de sesión). Esto es realmente genial, ya que podemos comparar directamente su valor hash sha256 con una tabla conocida de los banners de Windows de este servicio:
| Sistema operativo Windows | Hash SHA256 | Banner |
|---------------------------|----------------------------------------------------------------|-------------------------------------------------------------------|
| **Windows Server 2008 R2** | `5a8a77dc7ffd463647987c0de6df2c870f42819ec03bbd02a3ea9601e2ed8a4b` |  |
| **Windows Server 2012 R2** | `4560591682d433c7fa190c6bf40827110e219929932dc6dc049697529c8a98bc` |  |
| **Windows Server 2012 R2** | `3d9b56811a5126a6d3b78a692c2278d588d495ee215173f752ce4cbf8102921c` |  |
| **Windows Server 2016** | `fb1505aadeab42d82100c4d23d421f421c858feae98332c55a4b9595f4cea541` |  |
| **Windows Server 2016** | `3dbbeff5a0def7e0ba8ea383e5059eaa6acc37f7f8857218d44274fc029cfc4b` |  |
| **Windows Server 2019** | `2da4eb15fda2b7c80a94b9b2c5a3e104e2a9a2d9e9b3a222f5526c748fadf792` |  |
| **Windows Server 2022** | `256a6445e032875e611457374f08acb0565796c950eb9c254495d559600c0367` |  |
La herramienta rdwatool obtiene automáticamente este archivo y compara su hash para determinar la versión remota de Windows Server.
## Referencias
- https://twitter.com/podalirius_/status/1490734021332160525