.NET SOAP/WSDL Client Proxy Abuse
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
TL;DR
SoapHttpClientProtocol,DiscoveryClientProtocoland friends inherit fromHttpWebClientProtocol, whoseGetWebRequest()returns the scheme-agnosticWebRequestinstance produced byWebRequest.Create()without enforcingHttpWebRequest.- If an attacker controls the proxy
Url, the framework silently swaps inFileWebRequest,FtpWebRequestor UNC/SMB handlers, turning âHTTPâ proxies into NTLM leak gadgets or arbitrary file writers. - Any feature that imports attacker-supplied WSDL with
ServiceDescriptionImportercompounds the bug: the WSDL controls the generated proxy constructor, SOAP methods, complex types and namespaces, enabling pre-auth RCE (webshells, script drops) in products such as Barracuda Service Center RMM, Ivanti EPM, Umbraco 8, PowerShell and SSIS.
Root cause: HttpWebClientProtocol is scheme-agnostic
WebClientProtocol.GetWebRequest() doen var req = WebRequest.Create(uri) en gee dit terug sonder verandering. HttpWebClientProtocol.GetWebRequest() probeer req as HttpWebRequest om HTTP-only velde te stel, maar dit gee nog steeds die oorspronklike req terug selfs wanneer die cast misluk. Die runtime gehoorsaam dus watter skema in Url geskryf is:
http(s)://âHttpWebRequestfile:///of\\host\share\âFileWebRequestftp://âFtpWebRequest
SoapHttpClientProtocol.Invoke() stroom dan die SOAP POST-body deur watter transportskyf ook al gekies is, selfs al beteken dit skryf na skyf of oor SMB.
Primitief 1 â NTLM capture / relay via UNC targets
- Verkry beheer oor
SoapHttpClientProtocol.Url(direkte setter, config-waarde, databasisry, ens.). - Wys dit na ân UNC-pad soos
file://attacker.local/sink/payload. - Die CLR open die pad via SMB en voer geĂŻntegreerde autentisering uit, wat NTLM challenge/response na die aanvaller lekt.
- Gebruik vasgelegde hashes vir offline kraking of NTLM relay (SMB/HTTP) as signing/EPA afwesig is.
Dit geld vir enige .NET SOAP/HTTP proxy-pad wat gebruikersinvoer aanvaar, selfs al is verdere eksploit nie moontlik nie.
Primitief 2 â ArbitrĂȘre lĂȘerskrywe via file://
- Stel
Url = "file:///inetpub/wwwroot/poc.aspx"(of enige skryfbare pad) voordat die proxy-oproep. - Roep enige SOAP-metode aan; die framework skryf die hele SOAP-envelope na die gekose pad en oorskryf bestaande lĂȘers.
- Gebruiker-beheerde argumente verskyn binne XML-elemente, wat aanvallers toelaat om CSHTML/ASPX payloads te drop of konfigurasielĂȘers te vergiftig.
Beperkings:
- Inhoud is altyd XML; scalĂȘre velde word entity-gekodeer, so direkte invoeging van
<script>via eenvoudige strings vereis addisionele truuks. - Betekenisvolle payloads benodig minstens een aanvaller-beïnvloede argument of die vermoë om die metode-handtekening te wysig (sien WSDL-abuse).
Die runtime gooi dikwels Client found response content type of 'application/octet-stream', but expected 'text/xml' na die skryf â behandel hierdie fout as ân IOC.
Weaponizing WSDL imports
Auto-generated proxies via ServiceDescriptionImporter
Baie produkte bied âcustom web serviceâ funksies wat ân WSDL URL aanvaar, en dan:
ServiceDescription.Read()die aanvaller-beheerde WSDL.ServiceDescriptionImportergenereer C# proxy-klasses watSoapHttpClientProtocoluitbrei.- CodeDOM kompileer die proxy en reflection roep die versoekte metode aan.
Die aanvaller beheer volledig:
soap:address/soap12:addresslocationâ wordbase.Url(kanfile://of UNC-paaie stel).- Metode name, parameterlyste, komplekse tipes en serializers.
- Namespace URIs wat uiteindelik as
xmlns:*attributte in elke SOAP-boodskap eindig.
Geen skema-validasie vind plaas nie, so elke gegenereerde proxy erf die oorspronklike ontwerp-fout.
Shaping the SOAP envelope for RCE
- Complex type serialization: Definieer custom structs in die WSDL sodat wanneer
XmlSerializerdit weer uitstuur, hulle aanvaller-gekose elementname/attributte produseer. Vir ASPX webshell drops, skryf tipes wat serialiseer na:
<script runat="server">
// payload pulling `Request.QueryString["cmd"]`
</script>
en wys Url na file:///.../webroot/shell.aspx om RCE te kry.
- Namespace injection: Selfs wanneer argumente hardgekodeer is (bv. Umbraco Forms), word namespaces in die WSDL (bv.
xmlns:tns="http://host/service?x=@{...}") woordelik gekopieer in die SOAP-envelope. Kodering van payloads binne die namespace query string maak CSHTML Razor of PowerShell script drops moontlik sonder parameerkontrole.
Hierdie tegnieke dryf die Barracuda Service Center RMM (CVE-2025-34392) exploit: ân ongeauthentiseerde SOAP-oproep verskaf ân kwaadwillige WSDL, stel soap12:address op file:///Program Files/.../SCMessaging/poc.aspx, injekteer <script runat="server"> via komplekse parameters, en laai ân webshell op wat arbitraire cmd.exe opdragte uitgevoer het.
Tipiese aanval-werkvloei
- Identifiseer funksionaliteit wat ân WSDL URL aanvaar of gebruikers toelaat om SOAP endpoints te konfigureer (bv. Barracuda
InvokeRemoteMethod, Ivanti EPM connectors, Umbraco 8 Forms datasources, PowerShellNew-WebServiceProxy). - Host ân kwaadwillige WSDL waarvan
soap:addressna ân skryfbare pad of UNC-share wys en waarvan die schema definisies payload-vriendelike metodes/tipes voorsien. - Trigger die import/kompilering. Die teiken produseer ân proxy DLL met aanvaller-beheerde konstruktor en metodes.
- Wanneer die toepassing die gegenereerde metode aanroep, word die SOAP-versoek geserialiseer en na die aanvaller-gespesifiseerde pad geskryf, met die payload ingebed.
- Voer die ge-dropte lĂȘer uit (blaai na
poc.aspx?cmd=whoami, laai die CSHTML, of laat PowerShell die script uitvoer) of her-speel vasgelegde NTLM-materiaal.
Detection & hunting
- Static analysis: Grep vir
ServiceDescriptionImporter,SoapHttpClientProtocol,HttpWebClientProtocol, ofNew-WebServiceProxy. Volg hoeUrlof WSDL-insette gebron wordâenigiets gebruikers-gekontroleerd is ân rooi vlag. - Runtime telemetry:
- Instrumenteer proxy-creating om skemas te log; alarm op
file,ftp, of UNC waardes. - Monitor vir die kenmerkende âClient found response content type of âapplication/octet-streamââ foute na SOAP-oproepe.
- Kyk vir onverklaarbare
.aspx/.cshtml/.ps1skryfbeweginge in toepassingsgidse uitgevoer deur die webdiens-identiteit. - Network/file signals: SMB-verbindinge geĂŻnisieer deur web-bedieners na aanvaller-infrastruktuur, of skielike kompilering van tydelike proxy DLLs, gaan dikwels eksploitasie vooraf.
Mitigations
- Enforce transport validation voordat enige
HttpWebClientProtocol-afgeleide proxy aangeroep word:
var uri = new Uri(proxy.Url);
if (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps)
throw new InvalidOperationException("SOAP clients must stay on HTTP/S");
- Sanitize imported WSDL: Proxy downloads deur ân broker wat
soap:addressentries wat nie HTTP/S is nie herskryf of verwerp, onbekende bindings verwyder, en namespace payload-betrugs verbied. - Disable untrusted WSDL features: Vervang âupload a WSDLâ geriewe met geverifieerde, server-side templates of allowlists.
- Segregate write locations: Maak seker app pools kan nie in uitvoerbare gidse skryf nie; gebruik aparte volumes vir data vs. kode sodat lĂȘerskryf-primitiewe nie RCE word nie.
- Harden NTLM exposure: Deaktiveer uitgaande SMB waar moontlik; andersens afdwing SMB signing, EPA en ander relay-mitigasies.
References
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

