
PowerSploit - A PowerShell Post-Exploitation Framework
PowerView.ps1에 수동으로 수행하던 몇 가지 기능을 추가하기 위해 포크했습니다.
대상 머신에서 코드를 실행합니다.
Invoke-DllInjection선택한 프로세스 ID에 DLL을 주입합니다.
Invoke-ReflectivePEInjectionWindows PE 파일(DLL/EXE)을 powershell 프로세스에 반사적으로 로드하거나, 원격 프로세스에 DLL을 반사적으로 주입합니다.
Invoke-Shellcode선택한 프로세스 ID 또는 로컬 PowerShell 내부에 셸코드를 주입합니다.
Invoke-WmiCommand대상 컴퓨터에서 PowerShell ScriptBlock을 실행하고 WMI를 C2 채널로 사용하여 형식화된 출력을 반환합니다.
손상된 머신에서 실행하기 위해 스크립트를 수정 및/또는 준비합니다.
Out-EncodedCommandPowerShell 페이로드 스크립트를 압축하고 Base-64로 인코딩한 다음 명령줄 출력을 생성합니다.
Out-CompressedDll관리되는 dll을 메모리에 로드하기 위한 코드를 압축하고 Base-64로 인코딩한 다음 생성된 코드를 출력합니다.
Out-EncryptedScript텍스트 파일/스크립트를 암호화합니다.
Remove-Comment스크립트에서 주석과 추가 공백을 제거합니다.
PowerShell 스크립트에 지속성 기능을 추가합니다.
New-UserPersistenceOptionAdd-Persistence 함수에 대한 사용자 수준 지속성 옵션을 구성합니다.
New-ElevatedPersistenceOptionAdd-Persistence 함수에 대한 승격된 지속성 옵션을 구성합니다.
Add-Persistence스크립트에 지속성 기능을 추가합니다.
Install-SSP보안 지원 공급자(SSP) dll을 설치합니다.
Get-SecurityPackages로드된 모든 보안 패키지(SSP)를 열거합니다.
AV는 PowerShell에 맞서 승산이 없습니다!
Find-AVSignature"class101"의 DSplit과 동일한 방법을 사용하여 단일 바이트 AV 시그니처를 찾습니다.
당신의 모든 데이터는 이제 내 것입니다!
Invoke-TokenManipulation사용 가능한 로그온 토큰을 나열합니다. 다른 사용자의 로그온 토큰으로 프로세스를 생성하고 현재 스레드에서 로그온 토큰을 가장합니다.
Invoke-CredentialInjection의심스러운 이벤트 ID 4648(명시적 자격 증명 로그온)을 트리거하지 않고 일반 텍스트 자격 증명으로 로그온을 생성합니다.
Invoke-NinjaCopy원시 볼륨을 읽고 NTFS 구조를 파싱하여 NTFS 파티션 볼륨에서 파일을 복사합니다.
Invoke-MimikatzPowerShell을 사용하여 Mimikatz 2.0을 메모리에 반사적으로 로드합니다. 디스크에 아무것도 쓰지 않고 자격 증명을 덤프하는 데 사용할 수 있으며, Mimikatz가 제공하는 모든 기능에 사용할 수 있습니다.
Get-Keystrokes눌린 키, 시간 및 활성 창을 기록합니다.
Get-GPPPassword그룹 정책 기본 설정(Group Policy Preferences)을 통해 배포된 계정의 일반 텍스트 비밀번호와 기타 정보를 검색합니다.
Get-GPPAutologon그룹 정책 기본 설정을 통해 배포된 경우 registry.xml에서 자동 로그온 사용자 이름과 비밀번호를 검색합니다.
Get-TimedScreenshot일정한 간격으로 스크린샷을 캡처하여 폴더에 저장하는 함수입니다.
New-VolumeShadowCopy새 볼륨 섀도 복사본을 생성합니다.
Get-VolumeShadowCopy모든 로컬 볼륨 섀도 복사본의 디바이스 경로를 나열합니다.
Mount-VolumeShadowCopy볼륨 섀도 복사본을 마운트합니다.
Remove-VolumeShadowCopy볼륨 섀도 복사본을 삭제합니다.
Get-VaultCredential일반 텍스트 웹 자격 증명을 포함한 Windows 자격 증명 모음 자격 증명 개체를 표시합니다.
Out-Minidump프로세스의 전체 메모리 미니덤프를 생성합니다.
Get-MicrophoneAudio시스템 마이크에서 오디오를 녹음하여 디스크에 저장합니다
PowerShell로 대규모 혼란을 일으킵니다.
Set-MasterBootRecord선택한 메시지로 마스터 부트 레코드를 덮어쓰는 개념 증명 코드입니다.
Set-CriticalProcessPowerShell을 종료하면 머신에 블루 스크린이 발생합니다.
대상에서 권한 상승을 돕는 도구입니다.
PowerUp일반적인 권한 상승 검사와 일부 무기화 벡터를 망라한 저장소입니다.
침투 테스트의 정찰 단계를 지원하는 도구입니다.
Invoke-Portscan일반 소켓을 사용하여 nmap을 (상당히) 느슨하게 기반으로 한 간단한 포트 스캔을 수행합니다.
Get-HttpStatus사전 파일이 제공되면 지정된 경로에 대한 HTTP 상태 코드와 전체 URL을 반환합니다.
Invoke-ReverseDnsLookupIP 주소 범위에서 DNS PTR 레코드를 스캔합니다.
PowerViewPowerView는 네트워크 및 Windows 도메인 열거와 익스플로잇을 수행하는 일련의 함수입니다.
침투 테스트의 정찰 단계를 지원하는 데 사용되는 사전 모음입니다. 사전은 다음 출처에서 가져왔습니다.
PowerSploit 프로젝트와 모든 개별 스크립트는 명시적으로 달리 명시되지 않는 한 BSD 3-Clause 라이선스를 따릅니다.
자세한 사용 정보는 각 개별 스크립트의 주석 기반 도움말을 참조하세요.
이 모듈을 설치하려면 전체 PowerSploit 폴더를 모듈 디렉터리 중 하나에 넣으세요. 기본 PowerShell 모듈 경로는 $Env:PSModulePath 환경 변수에 나열되어 있습니다.
기본 사용자별 모듈 경로는: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules"입니다. 기본 컴퓨터 수준 모듈 경로는: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"입니다.
모듈을 사용하려면 Import-Module PowerSploit을 입력하세요.
가져온 명령을 보려면 Get-Command -Module PowerSploit을 입력하세요.
PowerShell v3을 실행 중이고 '인터넷에서 다운로드한 스크립트를 실행하시겠습니까?'라는 성가신 경고를 제거하려면, PowerSploit을 모듈 경로에 배치한 후 다음 원라이너를 실행하세요:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
각 개별 명령에 대한 도움말은 Get-Help를 활용하세요.
참고: 이 모듈에 포함된 도구는 모두 개별적으로 실행할 수 있도록 설계되었습니다. 모듈에 포함하는 것은 단순히 이식성을 높이는 데 도움이 됩니다.
기여가 필요합니다! PowerSploit에 좋은 아이디어가 있다면 기꺼이 추가하겠습니다. 새로운 추가 사항에는 다음이 필요합니다:
PowerSploit의 모든 기여자와 향후 기여자 여러분께, 스크립트/모듈을 작성할 때 이 스타일 가이드를 따라 주시길 부탁드립니다.
Write-Host 사용은 어떠한 경우에도 피하세요. PowerShell 함수/cmdlet은 명령줄 유틸리티가 아닙니다! Write-Host를 사용하는 코드가 포함된 풀 리퀘스트는 고려되지 않습니다. 대신 사용자 지정 개체를 출력해야 합니다. 사용자 지정 개체 생성에 대한 자세한 내용은 다음 문서를 읽으세요:
관련 디버깅 정보를 화면에 표시하려면 Write-Verbose를 사용하세요. 사용자는 언제든지 '-Verbose'를 붙이면 됩니다.
모든 스크립트에 설명적인 주석 기반 도움말을 항상 제공하세요. 또한 이름과 BSD 3-Clause 라이선스(BSD 라이선스 적용을 막는 특별한 상황이 없는 한)를 포함해야 합니다.
모든 함수가 적절한 PowerShell 동사-명사 규칙을 따르는지 확인하세요. Get-Verb를 사용하여 PowerShell에서 사용되는 기본 동사를 나열하세요. 지원되는 동사에 대한 예외는 사례별로 검토됩니다.
변수 이름은 대문자로 표기하고 가능한 한 설명적으로 작성하는 것을 선호합니다.
코드 사이에 논리적인 공백을 두세요. 가독성을 높이기 위해 코드를 들여쓰세요.
코드를 반복하고 있다면 함수를 작성하세요.
예상되는 모든 오류를 catch하고 의미 있는 출력을 제공하세요. 스크립트 실행을 중지해야 하는 오류가 있으면 'Throw'를 사용하세요. 실행을 중지할 필요가 없는 오류가 있으면 Write-Error를 사용하세요.
Win32 API와 인터페이스하는 스크립트를 작성하는 경우 Add-Type으로 C#을 인라인 컴파일하지 마세요. 가능하면 PSReflect 모듈을 사용하세요.
하드코딩된 경로를 사용하지 마세요. 스크립트는 바로 사용할 수 있어야 합니다. 원하지 않는 한 누구도 코드를 수정할 필요가 없어야 합니다.
PowerShell v2 호환성이 매우 바람직합니다.
위치 매개 변수를 사용하고 합리적인 경우 매개 변수를 필수로 만드세요. 예를 들어, 다음과 같은 형식을 기대합니다:
[Parameter(Position = 0, Mandatory = $True)]파이프라인 입력을 받는 데 타당한 이유가 없는 한 별칭을 사용하지 마세요. 별칭은 특정 별칭에 익숙하지 않은 사람들이 코드를 읽기 어렵게 만듭니다.
명령이 너무 길게 이어지지 않도록 하세요. 예를 들어, 파이프라인은 줄 바꿈이 자연스러운 위치입니다.
인라인 주석을 과도하게 사용하지 마세요. 코드의 특정 부분이 독자에게 혼란을 줄 수 있는 경우에만 사용하세요.
원치 않는/관련 없는 출력을 억제하기 위해 Out-Null을 사용하는 대신 원치 않는 출력을 $null에 저장하세요. 이렇게 하면 약간의 성능이 향상됩니다.
합리적인 경우 매개 변수에 기본값을 사용하세요. 이상적으로는 매개 변수 없이도 작동하는 스크립트가 좋습니다.
스크립트가 복잡한 사용자 지정 개체를 만드는 경우 개체의 출력을 적절히 형식화하는 ps1xml 파일을 포함하세요.