前言
拿到一臺邊緣機器后,內網的機器很有可能大多數都不出網,這時又想上線cs方便后續操作。本文就如何上線不出網主機的方式進行了總結。
環境搭建
目標內網機器
- os:win server 2012
- ip:192.168.57.137
邊緣機器
- os:win server 2012
- ip1:192.168.1.103(出網)
- ip2:192.168.57.136
攻擊機器
- os:kali liunx
- ip:192.168.1.128
- os:ubutu 16.04
- vps ip:47.xxxxxxxx
由于邊緣主機出網,選擇reverse反向連接,現在已經上線邊緣主機
SMB Beacon
該方法通過已有的父Beacon使用SMB協議進行正向連接不出網機器,要求目標開啟445端口,通過命名管道進行認證即可上線。其實有點像psexec這樣的工具,有用戶名和hash后,即可執行遠程命令,其原理相似。內網的機器密碼相同的情況很多,這也是為什么現在為了提高安全性不能批量設置密碼,內網滲透一但有了密碼往往有時候就宣告結束。
并且有個好處就是SMB協議一般防火墻是不攔截的,在一定程度上可以規避防火墻攔截。
先使用hashdump和logonpasswords命令抓一波密碼。由于這里是win2012系統,是無法直接抓取明文密碼的,這里也不需要去修改注冊表,或者通過mimilib.dll注入的方式去獲取明文密碼,有hash就足夠了,SMB驗證身份本身用的就是NTMLv2協議。
這里是抓到了該機器上的hash
有個小tips,如果對方機器是64位的,最好就用x64的exe上線就可以了,以前我覺得x32和x64都行。雖然都可以上線,但是如果用的是x32的beacon,很有可能是抓不到64位機器上的密碼的,使用cs集成的mimikatz會提示:32位的mimikatz無法抓取到64位機器的密碼。所以目標是最好就用64位就用64位的artifact。
然后通過端口掃描,發現內網機器:
到這里不懂原理的小白(我)可能就會直接使用cs自帶的psexec功能直接去橫向,恰巧我之前就是這么做的,想起來還挺有意思的。
結果就是服務已經創建了,但是上不了線,那會兒自己心里想肯定是cs出bug了,還煩了一會兒,現在想起來還挺有意思的。
本身是沒有問題的,說明psexec已經成功的完成了ntml認證,并且認證成功,但是這時候shell是反彈給邊緣機器的,如果要上線就要再新建一個SMB Beacon Listener。相當于通過邊緣機器再中轉一下,反彈shell到vps。
選擇子Beacon:SMB Beacon。成功上線。
(出去吃個飯回來內網機器ip變了。。)
這里可以看下拓撲圖,是通過邊緣機器正向連接了不出網的內網主機。
在external后面有一個oooo,這實際上是標明了當前SMB的連接狀態:
SMB Beacon有兩個命令:link,unlink。
unlink則會斷開連接,link會重新連接
執行命令unlink
unlink 192.168.57.140
后面的oooo變成了oo oo,說明已經斷開連接,但是只是斷開了連接,進程并沒有被殺掉。
使用命令重新回連:
link 192.168.57.140
我在實戰中暫時沒有用到過這個功能,但應該是有一定作用的,持久化后門,更加隱蔽?這里具體的實戰情景明白的師傅可以說一下。
TCP Beacon
這種方式一般試用于:密碼撞不上,內網機器有web服務。
這里做個代理,假設已經寫入了shell文件,用冰蝎掛代理去連webshell。
在cs上新增一個Listen,Tcp Beacon
橫向的時候最好都使用這個帶s的windows可執行文件,s的含義為Stageless,相對的是Stager。下面是我自己的理解:
Stager是分步式,分階段的,只用少部分代碼來請求和加載payload,cs的加載payload模式為反射加載beacon.dll,但這個beacon.dll并不在可執行文件中,而是在遠程C2服務端。
Stageless則是將beacon.dll包含在可執行文件中,并且可能有寫額外的操作,于是文件比較大,特征也更明顯,但是適合橫向不出網機器,因為不出網所以有可能請求不了c2服務端上的beacon.dll。
Stageless的可執行文件比Stager的可執行文件大了將近15倍。真的離譜。
然后用冰蝎上傳beacon.exe。然后執行
執行后使用connect 命令連接:
connect 192.168.57.140
拓撲圖如下,為tcp正向連接:
同樣是可以使用unlink來斷開連接,這里與SMB Beacon不一樣的是,如果Beacon進程是以普通權限運行的話,進程會直接死掉,再connect就會失敗。
這里由于是Administrator權限,unlink后可以通過connect重新連接回來。
Reverse TCP Beacon
也可以被稱為中繼上線。
同樣需要有內網web,傳shell。右鍵跳板機shell,選擇Pivoting->Listener。
Listen Host為內網ip。
這里要注意一下,如果有多張網卡,這個默認的Listen Host是需要改的,需要填入同一網段的ip。
比如我這里的跳板機器就有兩張網卡,默認填入的host是192.168.1.103,這個就需要改,因為內網不出網機器是無法訪問到192.168.1.103這張網卡的,只能訪問192.168.57.143(跳板機ip又變了)
同樣生成Stageless的可執行文件。
上傳后執行beacon.exe
執行后回來看cs就已經上線,不需要link或者connect了。
拓撲圖為反向的tcp連接
值得注意的是,中繼方法無法unlink后重連,不管權限如何,一旦unlink后進程直接結束。要想重新上線只能重新執行beacon.exe。
后記
實際情況下,由于環境原因,網絡狀況錯綜復雜。比如:stageless的可執行文件比較大,又因為掛了代理,傳不上去怎么辦。其實就可以將beacon.exe上傳到跳板機器上,用windows自帶的certutil工具,直接在內網機器上請求下載跳板機上的beacon.exe。這樣確實是更加穩當的。
上面這個tips是我再看星球中的@emmm…分享的pdf學到的,感謝分享。
本文由ppoocn原創發布
轉載,請參考轉載聲明,注明出處: https://www.anquanke.com/post/id/254671
安全客 - 有思想的安全新媒體