
Red Teaming उद्देश्यों के लिए C# में पुनर्निर्मित PowerShell
NoPowerShell एक ऐसा उपकरण है जिसे C# में कार्यान्वित किया गया है, जो किसी भी PowerShell लॉगिंग तंत्र के लिए अदृश्य रहते हुए PowerShell-जैसे कमांड निष्पादित करने का समर्थन करता है। यह .NET Framework 2 संगत बाइनरी Cobalt Strike में लोड की जा सकती है ताकि कमांड को मेमोरी में निष्पादित किया जा सके। कोई System.Management.Automation.dll उपयोग नहीं किया जाता; केवल देशी .NET लाइब्रेरीज़। NoPowerShell का एक वैकल्पिक उपयोग-मामला इसे प्रतिबंधित वातावरण में rundll32.exe के माध्यम से DLL के रूप में लॉन्च करना है: rundll32 NoPowerShell.dll,main।
यह परियोजना सभी के लिए C# कोड की केवल कुछ पंक्तियों का उपयोग करके इसकी कार्यक्षमता का विस्तार करना आसान बनाती है। अधिक जानकारी के लिए, CONTRIBUTING.md देखें।
नवीनतम बाइनरी Releases पृष्ठ पर उपलब्ध हैं। MASTER शाखा बहुत नियमित रूप से अद्यतन नहीं की जाती; नवीनतम कोड और cmdlets DEV शाखा में उपलब्ध हैं। अपने NoPowerShell कौशल की शुरुआत करने के लिए, cmdlet Cheatsheet को भी अवश्य देखें।



NoPowerShell को Cobalt Strike के execute-assembly कमांड के साथ या rundll32.exe का उपयोग करके प्रतिबंधित वातावरण में उपयोग के लिए विकसित किया गया है।
NoPowerShell का उपयोग करने के कारण:
Test-NetConnection के बजाय ping)powerpick या powershell के माध्यम से cmdlets उपलब्ध नहीं हैं, तो वे nps में उपलब्ध हैं (जैसे ActiveDirectory मॉड्यूल के cmdlets)CHEATSHEET.md देखें।
Cobalt Strike के execute-assembly कमांड का उपयोग करके NoPowerShell.exe लॉन्च करें। उदाहरण के लिए execute-assembly /path/to/NoPowerShell.exe Get-Command।
वैकल्पिक रूप से, Cobalt Strike में nps उपनाम जोड़ने के लिए NoPowerShell.cna का उपयोग किया जा सकता है।
bofnet_initbofnet_load /path/to/NoPowerShell.dllbofnet_execute NoPowerShell.Program Get-Commandयह फोर्क नियमित .NET एक्ज़िक्यूटेबल चलाने की अनुमति देता है
bofnet_initbofnet_load /path/to/NoPowerShell.exebofnet_executeassembly NoPowerShell Get-CommandNoPowerShell.dll फ़ाइल का एक नया शॉर्टकट बनाएं (राइट क्लिक का उपयोग करके खींचें -> यहां शॉर्टकट बनाएं)rundll32 जोड़कर और अंत में ,main जोड़कर शॉर्टकट अपडेट करेंrundll32 C:\Path\to\NoPowerShell.dll,main जैसा दिखेगाcmd.exe या PowerShell से NoPowerShell का उपयोग करते समय, आपको पाइप कैरेक्टर (|) को क्रमशः केयरट (^) या बैकटिक (`) के साथ एस्केप करना होगा, उदाहरण के लिए:
ls ^| select Namels `| select Name[System.Security.Principal.WindowsIdentity]::GetCurrent().Nameअतिरिक्त NoPowerShell cmdlets के लेखकों को नीचे दी गई तालिका में जोड़ा गया है। इसके अलावा, तालिका उन कमांडों को सूचीबद्ध करती है जिन्हें समुदाय द्वारा जोड़ने का अनुरोध किया गया है। साथ मिलकर हम एक शक्तिशाली NoPowerShell टूलकिट विकसित कर सकते हैं!
| Cmdlet | योगदानकर्ता | GitHub | विवरण | |
|---|---|---|---|---|
इन cmdlets का उपयोग करने के उदाहरणों के लिए Cheatsheet को भी अवश्य देखें।
विभिन्न NoPowerShell cmdlets और NoPowerShell DLL में अन्य डेवलपर्स द्वारा बनाया गया कोड शामिल है।
लेखक: Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)
| Cmdlet | विवरण |
|---|
| Invoke-Command | PSRemoting का उपयोग करके दूरस्थ मशीन पर एक कमांड निष्पादित करें (जो उस स्थिति में निश्चित रूप से लॉग की जाएगी) |
| * | अधिक *-Item* कमांड |
| Search-ADAccount | |
| Get-ADPrincipalGroupMembership | |
| Get-ADOrganizationalUnits | |
| * | ActiveDirectory PowerShell मॉड्यूल के अधिक कमांड |
| * | pipelist और sdelete जैसी Sysinternals उपयोगिताएँ |
| Cmdlet | मॉड्यूल | नोट्स |
|---|
| Get-ADUser | ActiveDirectory | |
| Get-ADObject | ActiveDirectory | |
| Get-ADReplicationSubnet | ActiveDirectory | |
| Get-ADGroup | ActiveDirectory | |
| Get-ADGroupMember | ActiveDirectory | |
| Get-ADComputer | ActiveDirectory | |
| Get-ADDomainController | ActiveDirectory | |
| Get-ADTrust | ActiveDirectory | |
| Copy-Acl | Additional | |
| Get-RemoteSmbShare | Additional | |
| Resolve-AdiDnsName | Additional | |
| Get-Whoami | Additional | |
| Get-WinStation | Additional | |
| Compress-Archive | Archive | .NET 4.5+ की आवश्यकता है |
| Expand-Archive | Archive | .NET 4.5+ की आवश्यकता है |
| Get-Help | Core | |
| Get-Command | Core | |
| Where-Object | Core | |
| Resolve-DnsName | DnsClient | |
| Get-LocalGroupMember | LocalAccounts | |
| Get-LocalGroup | LocalAccounts | |
| Set-Clipboard | Management | |
| Get-PSDrive | Management | |
| Get-HotFix | Management | |
| Stop-Process | Management | |
| Get-ChildItem | Management | |
| Copy-Item | Management | |
| Invoke-WmiMethod | Management | |
| Remove-Item | Management | |
| Get-ItemPropertyValue | Management | |
| Get-ItemProperty | Management | |
| Get-ComputerInfo | Management | |
| Get-DnsClientCache | Management | |
| Get-Process | Management | |
| Get-WmiObject | Management | |
| Get-Clipboard | Management | |
| Get-Content | Management | |
| Test-NetConnection | NetTCPIP | |
| Get-NetTCPConnection | NetTCPIP | |
| Get-NetNeighbor | NetTCPIP | अभी तक IPv6 के लिए समर्थन नहीं |
| Get-NetRoute | NetTCPIP | |
| Get-NetIPAddress | NetTCPIP | |
| Get-Service | NoPowerShell.Commands | |
| Get-LocalUser | NoPowerShell.Commands | |
| Get-WinEvent | NoPowerShell.Commands | |
| New-Shortcut | NoPowerShell.Commands | |
| Get-Acl | Security | |
| Get-SmbMapping | SmbShare | |
| Get-SmbShare | SmbShare | |
| Invoke-Sqlcmd | SQLPS | |
| Get-FileHash | Utility | |
| ConvertFrom-SddlString | Utility | |
| Sort-Object | Utility | |
| Measure-Object | Utility | |
| Invoke-WebRequest | Utility | |
| Select-Object | Utility | |
| Out-File | Utility | |
| Format-Table | Utility | |
| Format-List | Utility | |
| Export-Csv | Utility | |
| ConvertTo-Csv | Utility | |
| Write-Output | Utility |
| कौन | वेबसाइट | नोट्स |
|---|
| pinvoke.net के योगदानकर्ता | https://www.pinvoke.net/ | विभिन्न cmdlets pinvoke के स्निपेट का उपयोग करते हैं |
| Michael Conrad | https://github.com/MichaCo/ | Resolve-Dns cmdlet के कुछ भाग DnsClient.Net परियोजना के कोड पर आधारित हैं |
| Rex Logan | https://stackoverflow.com/a/1148861 | Get-NetNeighbor cmdlet का अधिकांश कोड उनकी StackOverflow पोस्ट से उत्पन्न हुआ है |
| PowerShell डेवलपर्स | https://github.com/PowerShell/ | NoPowerShell DLL का कोड काफी हद तक PowerShell के कंसोल इनपुट को संभालने वाले कोड पर आधारित है |
| Benjamin Delpy | https://github.com/gentilkiwi/ | Get-WinStation का कोड Mimikatz के ts::sessions कमांड के कोड से प्रेरित है |
| Dan Ports | https://github.com/danports/ | Get-Winstation का मार्शलिंग कोड आंशिक रूप से Cassia परियोजना से कॉपी किया गया है |
| Mazdak | https://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-C | Get-LocalGroupMember cmdlet के लिए नेटिव फ़ंक्शन कॉल |
| Rex Logan | https://stackoverflow.com/a/1148861 | Get-NetNeighbor cmdlet का कोड |