日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

远程遥控 IPTables 进行端口复用

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 远程遥控 IPTables 进行端口复用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇首發在 ThreatHunter 社區:國內首個專注于高級威脅發現與安全數據分析的社區,請大家多多支持,https://threathunter.org。

有一天坐地鐵的時候突然想到利用 iptables nat 表的 PREROUTING 鏈配合 REDIRECT 應該是可以達到端口復用的效果的。

比如在服務器的 PREROUTING 鏈里面加一條規則,將到本機 80 端口的流量 REDIRECT 到 22 端口,就算 80 端口正在被 Apache 監聽,此流量也能成功到達 22 端口,因為 nat 表的 PREROUTING 鏈會在路由決策之前被處理。

現在的問題只有一個,如何區分到 80 端口的正常流量和“復用流量”? 正常的的 HTTP 流量應該讓它正常地發往 Apache,而“復用流量”應該前往 22 端口。答案也很簡單,只要“復用流量”有特征就可以了。

當天晚上我簡單寫了一個 PoC 來驗證我的想法,如下:192.168.33.78 為虛擬機的 IP,虛擬機上用 python 在 80 端口啟動了一個 http 服務
虛擬機上執行:

將發送本機 80 端口,源端口為 8989 的流量重定向至本機 22 端口

/sbin/iptables -t nat -A PREROUTING -p tcp --sport 8989 --dport 80 -j REDIRECT --to-port 22
本地執行:

socat 監聽本地 2326 端口,接收到鏈接后,利用本地的 8989 端口將流量轉至虛擬機的80端口

socat tcp-listen:2326,fork,reuseaddr tcp:192.168.33.78:80,sourceport=8989,reuseaddr &

SSH 連接本地 2326 端口,成功連接上了虛擬機的 SSH,同時本地正常用 curl 是能夠訪問到虛擬機的 80 端口的 HTTP 服務的

ssh vagrant@127.0.0.1 -p 2326
效果圖:

以上是最初的 PoC。它有一個很明顯的問題是不支持多鏈接。 如果想創建兩個 SSH 鏈接就會出錯,因為本地的 8989 端口已經被第一個 SSH 連接占用了。

今天我對這個方法進行了改進,不再用 source port 做為 “復用流量” 的標識,所以也就不需要再用 socat 來進行一次本地的轉發了。同時,加入了遠程遙控端口復用開關的功能。我這里直接放出腳本代碼:

第一種方式:利用 ICMP 做遙控開關。缺點在于如果目標在內網,你是無法直接 ping 到它的。

創建端口復用鏈

iptables -t nat -N LETMEIN

創建端口復用規則,將流量轉發至 22 端口

iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22

開啟開關,如果接收到一個長為 1139 的 ICMP 包,則將來源 IP 添加到加為letmein的列表中

iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1139 -m recent --set --name letmein --rsource -j ACCEPT

關閉開關,如果接收到一個長為 1140 的 ICMP 包,則將來源 IP 從 letmein 列表中去掉

iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length 1140 -m recent --name letmein --remove -j ACCEPT

let’s do it,如果發現 SYN 包的來源 IP 處于 letmein 列表中,將跳轉到 LETMEIN 鏈進行處理,有效時間為 3600 秒

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
開啟復用前,WEB 是可以訪問的:

開啟復用
ping -c 1 -s 1111 192.168.33.78
向目標發送一個長度為 1111 的 ICMP 數據包(加上包頭28,總長度實際為1139)

關閉復用
ping -c 1 -s 1112 192.168.33.78
向目標發送一個長度為 1112 的 ICMP 數據包(加上包頭 28,總長度實際為 1140)

效果圖:

第二種方式:利用 tcp 數據包中的關鍵字做遙控開關,不怕目標在內網。

端口復用鏈

iptables -t nat -N LETMEIN

端口復用規則

iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22

開啟開關

iptables -A INPUT -p tcp -m string --string ‘threathuntercoming’ --algo bm -m recent --set --name letmein --rsource -j ACCEPT

關閉開關

iptables -A INPUT -p tcp -m string --string ‘threathunterleaving’ --algo bm -m recent --name letmein --remove -j ACCEPT

let’s do it

iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
開啟復用,開啟后本機到目標 80 端口的流量將轉發至目標的 SSH,80 將無法再被本機訪問:
echo threathuntercoming | socat - tcp:192.168.33.78:80

關閉復用,關閉后,80 恢復正常:
echo threathunterleaving | socat - tcp:192.168.33.78:80
效果圖:

只要有特征,就可以做為遠程遙控的標志。我這里只是想驗證一下自己的想法,所以用了我認為最簡單的兩種方法。其它方法希望大家自己挖掘,分享。

最后留一個小問題,如果在開啟 tcpdump 進行抓包的同時,利用 iptables 對數據包進行了更改,那 tcpdump 抓到的是更改之前的包還是更改之后的包呢? :)

總結

以上是生活随笔為你收集整理的远程遥控 IPTables 进行端口复用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。