A python script to extract information from a Microsoft Remote Desktop Web Access (RDWA) application
This python script allow to extract various information from a Microsoft Remote Desktop Web Access (RDWA) application, such as the FQDN of the remote server, the internal AD domain name (from the FQDN), and the remote Windows Server version
$ ./RDWArecon.py -h
____ ____ _ _____
/ __ \/ __ \ | / / | ________ _________ ____
/ /_/ / / / / | /| / / /| | / ___/ _ \/ ___/ __ \/ __ \ @podalirius_
/ _, _/ /_/ /| |/ |/ / ___ |/ / / __/ /__/ /_/ / / / /
/_/ |_/_____/ |__/|__/_/ |_/_/ \___/\___/\____/_/ /_/ v1.1
usage: RDWArecon.py [-h] -u URL [-v] [-k] [-L] [--no-colors]
Description message
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL Target RDWeb url
-v, --verbose Verbose mode. (default: False)
-k, --insecure Allow insecure server connections when using SSL (default: False)
-L, --location Follow redirects (default: False)
--no-colors Disable colored output (default: False)
There is many pre-filled information on the login.aspx
page of the Remote Desktop Web Access (RDWA) application. In the input fields WorkSpaceID
and/or RedirectorName
we can find the FQDN of the remote server, and WorkspaceFriendlyName
can contain a text description of the workspace.
<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>
The RDWArecon.py tool automatically parses this form and extract all the information.
If the remote RDWeb installation was not hardened, there is a high chance that the default version image file /RDWeb/Pages/images/WS_h_c.png
is still accessible (even if not mentioned on the login page). This is really awesome as we can compare its sha256 hash value directly with a known table of the windows banners of this service:
The RDWArecon.py tool automatically gets this file and compare its hash to get the remote Windows Server version.
demo.mp4
Pull requests are welcome. Feel free to open an issue if you want to add other features.