Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
nopowershell — 레드 팀 목적을 위해 C#으로 재구축된 PowerShell | Kitploit
도구/GitHubGitHub/bitsadmin/nopowershell
ReconnaissanceInformation GatheringPost-ExploitationCommand and ControlRed Teaming
GitHubbitsadmin/nopowershell

nopowershell

레드 팀 목적을 위해 C#으로 재구축된 PowerShell

저장소 보기
1.1k1449개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

NoPowerShell

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 브랜치는 매우 정기적으로 업데이트되지 않습니다. 최신 코드와 cmdlet은 DEV 브랜치에서 확인할 수 있습니다. NoPowerShell 기술을 빠르게 익히려면 cmdlet Cheatsheet도 확인하세요.

스크린샷

Cobalt Strike에서 실행

지원되는 NoPowerShell 명령

명령 실행 예제

NoPowerShell 샘플 명령

Rundll32 버전

rundll32를 통한 NoPowerShellDll

NoPowerShell을 사용하는 이유

NoPowerShell은 Cobalt Strike의 execute-assembly 명령이나 rundll32.exe를 사용하는 제한된 환경에서 사용하도록 개발되었습니다. NoPowerShell을 사용해야 하는 이유:

  • 매우 은밀하게 실행됩니다
  • 강력한 기능
  • PowerShell에서 이미 익숙한 cmdlet을 제공하므로 또 다른 도구를 배울 필요가 없습니다
  • PowerShell에 아직 익숙하지 않다면 cmd.exe 별칭도 사용할 수 있습니다 (예: Test-NetConnection 대신 ping)
  • powerpick 또는 powershell을 통해 cmdlet을 사용할 수 없는 경우에도 nps에서는 사용할 수 있습니다 (예: ActiveDirectory 모듈의 cmdlet)
  • 몇 줄의 C# 코드만으로 쉽게 확장 가능

사용법

예제

CHEATSHEET.md를 참조하세요.

execute-assembly를 통한 Cobalt Strike 사용

Cobalt Strike의 execute-assembly 명령을 사용하여 NoPowerShell.exe를 실행합니다. 예: execute-assembly /path/to/NoPowerShell.exe Get-Command. 선택적으로 NoPowerShell.cna를 사용하여 Cobalt Strike에 nps 별칭을 추가할 수 있습니다.

BOF.NET을 통한 Cobalt Strike 사용

  1. https://github.com/CCob/BOF.NET 에서 BOF.NET BOF를 설치합니다.
  2. BOF.NET 런타임을 로드합니다: bofnet_init
  3. NoPowerShell 모듈을 로드합니다: bofnet_load /path/to/NoPowerShell.dll
  4. NoPowerShell cmdlet을 실행합니다: bofnet_execute NoPowerShell.Program Get-Command

BOF.NET의 @williamknows 포크를 사용한 Cobalt Strike 사용

이 포크는 일반 .NET 실행 파일을 실행할 수 있게 해줍니다.

  1. https://github.com/williamknows/BOF.NET 에서 BOF.NET의 @williamknows 포크를 받아 컴파일합니다.
  2. BOF.NET 런타임을 로드합니다: bofnet_init
  3. NoPowerShell 모듈을 로드합니다: bofnet_load /path/to/NoPowerShell.exe
  4. NoPowerShell cmdlet을 실행합니다: bofnet_executeassembly NoPowerShell Get-Command

rundll32로 실행

  1. NoPowerShell.dll 파일에 대한 새 바로 가기를 만듭니다 (마우스 오른쪽 버튼으로 끌어서 -> 여기에 바로 가기 만들기)
  2. 파일 이름 앞에 rundll32를 붙이고 ,main을 추가하도록 바로 가기를 업데이트합니다.
  3. 바로 가기는 이제 rundll32 C:\Path\to\NoPowerShell.dll,main처럼 보입니다.
  4. 바로 가기를 두 번 클릭합니다.

참고

cmd.exe 또는 PowerShell에서 NoPowerShell을 사용할 때는 파이프 문자(|)를 각각 캐럿(^) 또는 백틱(`)으로 이스케이프해야 합니다. 예:

  • cmd.exe: ls ^| select Name
  • PowerShell: ls `| select Name

알려진 문제

  • 파이프 문자는 공백으로 둘러싸여야 합니다
  • TLS 1.1+는 .NET Framework 2에서 지원되지 않으므로 이를 강제하는 사이트는 연결 오류가 발생합니다

개선 사항

  • 위의 문제 수정
  • 매개 변수 그룹 지원
  • 명령줄에서 .NET 코드 지원 추가, 예: [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

요청된 NoPowerShell cmdlet

기여된 NoPowerShell cmdlet

추가 NoPowerShell cmdlet의 작성자는 아래 표에 추가됩니다. 또한 이 표에는 커뮤니티에서 추가를 요청한 명령도 나열됩니다. 함께 강력한 NoPowerShell 툴킷을 개발할 수 있습니다!

Cmdlet기여자GitHubTwitter설명

포함된 NoPowerShell cmdlet

이 cmdlet 사용 예제는 Cheatsheet에서도 확인하세요.

감사의 말

여러 NoPowerShell cmdlet과 NoPowerShell DLL에는 다른 개발자가 작성한 코드가 포함되어 있습니다.

제작: Arris Huijgen (@bitsadmin - https://github.com/bitsadmin/)

도구 다운로드
Cmdlet설명
Invoke-CommandPSRemoting을 사용하여 원격 컴퓨터에서 명령을 실행합니다 (이 경우 당연히 기록됩니다)
*더 많은 *-Item* 명령
Search-ADAccount
Get-ADPrincipalGroupMembership
Get-ADOrganizationalUnits
*ActiveDirectory PowerShell 모듈의 명령 추가
*pipelist 및 sdelete와 같은 Sysinternals 유틸리티
Cmdlet모듈비고
Get-ADUserActiveDirectory
Get-ADObjectActiveDirectory
Get-ADReplicationSubnetActiveDirectory
Get-ADGroupActiveDirectory
Get-ADGroupMemberActiveDirectory
Get-ADComputerActiveDirectory
Get-ADDomainControllerActiveDirectory
Get-ADTrustActiveDirectory
Copy-AclAdditional
Get-RemoteSmbShareAdditional
Resolve-AdiDnsNameAdditional
Get-WhoamiAdditional
Get-WinStationAdditional
Compress-ArchiveArchive.NET 4.5+ 필요
Expand-ArchiveArchive.NET 4.5+ 필요
Get-HelpCore
Get-CommandCore
Where-ObjectCore
Resolve-DnsNameDnsClient
Get-LocalGroupMemberLocalAccounts
Get-LocalGroupLocalAccounts
Set-ClipboardManagement
Get-PSDriveManagement
Get-HotFixManagement
Stop-ProcessManagement
Get-ChildItemManagement
Copy-ItemManagement
Invoke-WmiMethodManagement
Remove-ItemManagement
Get-ItemPropertyValueManagement
Get-ItemPropertyManagement
Get-ComputerInfoManagement
Get-DnsClientCacheManagement
Get-ProcessManagement
Get-WmiObjectManagement
Get-ClipboardManagement
Get-ContentManagement
Test-NetConnectionNetTCPIP
Get-NetTCPConnectionNetTCPIP
Get-NetNeighborNetTCPIP아직 IPv6를 지원하지 않음
Get-NetRouteNetTCPIP
Get-NetIPAddressNetTCPIP
Get-ServiceNoPowerShell.Commands
Get-LocalUserNoPowerShell.Commands
Get-WinEventNoPowerShell.Commands
New-ShortcutNoPowerShell.Commands
Get-AclSecurity
Get-SmbMappingSmbShare
Get-SmbShareSmbShare
Invoke-SqlcmdSQLPS
Get-FileHashUtility
ConvertFrom-SddlStringUtility
Sort-ObjectUtility
Measure-ObjectUtility
Invoke-WebRequestUtility
Select-ObjectUtility
Out-FileUtility
Format-TableUtility
Format-ListUtility
Export-CsvUtility
ConvertTo-CsvUtility
Write-OutputUtility
작성자웹사이트비고
pinvoke.net 기여자https://www.pinvoke.net/여러 cmdlet이 pinvoke의 코드 조각을 사용합니다
Michael Conradhttps://github.com/MichaCo/Resolve-Dns cmdlet의 일부는 DnsClient.Net 프로젝트의 코드를 기반으로 합니다
Rex Loganhttps://stackoverflow.com/a/1148861Get-NetNeighbor cmdlet의 대부분의 코드는 그의 StackOverflow 게시물에서 비롯되었습니다
PowerShell 개발자https://github.com/PowerShell/NoPowerShell DLL의 코드는 대부분 PowerShell의 콘솔 입력을 처리하는 코드를 기반으로 합니다
Benjamin Delpyhttps://github.com/gentilkiwi/Get-WinStation의 코드는 Mimikatz의 ts::sessions 명령 코드에서 영감을 받았습니다
Dan Portshttps://github.com/danports/Get-Winstation의 마샬링 코드는 Cassia 프로젝트에서 부분적으로 복사되었습니다
Mazdakhttps://www.codeproject.com/Articles/2937/Getting-local-groups-and-member-names-in-CGet-LocalGroupMember cmdlet에 대한 네이티브 함수 호출
Rex Loganhttps://stackoverflow.com/a/1148861Get-NetNeighbor cmdlet의 코드