臥底路由器之WooyunWifi of DOOM

wyzsk發表於2020-08-19
作者: lxj616 · 2016/05/27 12:03

在實際業務中,我們經常會遇到一些滲透測試專案由於處於企業內網,因此不得不把白帽子們集合起來塞進小黑屋實地測試。

本文基於Openwrt,透過Openvpn橋接本地網路與遠端目標內網,實現layer 3的內網訪問,文章重點不是如何進行內網滲透,而是如何授權完全不會內網滲透的白帽子遠端進入內網搞滲透測試。

      192.168.35.0/24
                                                                                  0.0.0.0
+--------------------------+
|                          |                        +-----------------------------------------------------------------------------+
|                          |                        |                                                                             |
|  Private subnet          |                        |                                                                             |
|                          |                        |                           Open Internet                                     |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|               10.8.0.29  |                        |        10.8.0.1                                       10.8.0.*              |
|           +------------------+                    |   +--------------------+                          +----------------+        |
|           |              |   |   192.168.35.0/24  |   |                    |     192.168.35.0/24      |                |        |
|           |      Target  |   <------------------------>   Openvpn Server   <-------------------------->    Attacker    |        |
|           |              |   |                    |   |                    |                          |                |        |
|           +------------------+     vpn tunnel     |   +--------------------+      vpn tunnel          +----------------+        |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        |                                                                             |
|                          |                        +-----------------------------------------------------------------------------+
+--------------------------+

0x00 基本原理


首先我們利用Openvpn的隧道來穿透企業內網,這一點對於企業自身的網路工程師而言比較輕鬆,只要放行一條tcp連線(或者udp)用於構建vpn隧道就可以了,如果企業內網本身就沒有封殺到外網的出站連線,那就更簡單了

之後滲透測試人員各自與Openvpn外網主控伺服器建立連線,橋接本地和遠端內網網路,之後所有的內網訪問都會透過Openvpn server轉發進企業內網,與實際連入企業內網效果相同,而其他網段的連線則不受影響

0x01 Server搭建


首先要安裝Openvpn

apt install openvpn

之後我們要建立自己的pki

#我們可以用Openvpn自帶的easy-rsa來生成(不建議用軟體源中的老版本easy-rsa)
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
#請自行修改vars
cp vars.example vars
#初始化pki
./easyrsa init-pki
#注意,不要一次性複製貼上多行命令,因為會要求輸入ca密碼
./easyrsa build-ca
#生成server端無需密碼的req
./easyrsa gen-req server nopass
#和ca簽約
./easyrsa sign server server
#生成diffie-hellman交換
./easyrsa gen-dh

#以下不必在ca端執行,可以讓相關人員自己生成,然後在ca端import-req,這裡偷懶直接自己搞了

#生成內網穿透目標的req並簽約
./easyrsa gen-req target nopass
./easyrsa sign client target

#生成滲透測試人員的req並簽約
./easyrsa gen-req client1 nopass
./easyrsa sign client client1

Openvpn server端配置檔案: server.ovpn

#埠,不解釋
port 1194

#TCP還是UDP
proto udp

#TUN還是TAP
dev tun

#改成我們剛生成的證書和key
ca /root/easy-rsa/easyrsa3/pki/ca.crt            
cert /root/easy-rsa/easyrsa3/pki/issued/server.crt
key /root/easy-rsa/easyrsa3/pki/private/server.key

#我們生成的diffie-hellman引數
dh /etc/openvpn/easyrsa3/pki/dh.pem

#Openvpn使用的網段
server 10.8.0.0 255.255.255.0

#記住之前分配過的ip
ifconfig-pool-persist ipp.txt

#通知客戶端把內網網段路由到server上
push "route 192.168.35.0 255.255.255.0"

#客戶端的獨立profile
client-config-dir ccd
#通知server自己來處理內網網段路由
route 192.168.35.0 255.255.255.0

#點對點通訊(在隧道上)
client-to-client

#保持連線
keepalive 10 120

#壓縮
comp-lzo

#避免重啟時導致各種tun上的手動設定丟失
persist-key
persist-tun

#log
status openvpn-status.log

#詳細程度
verb 3

這裡要注意兩件事情,第一件是不可以使用duplicate-cn來偷懶,必須給每人簽約一套認證,第二件是要保證要轉發的內網網段必須不和本地網段衝突,不然自己到Openvpn server的流量都沒法走了

建立配置中提到的配置資料夾: ccd

mkdir ccd

然後新建target的配置: target

iroute 192.168.35.0 255.255.255.0
ifconfig-push 10.8.0.29 10.8.0.1

這個iroute和之前route的區別是,iroute通知server把內網流量轉發到target這臺client上,而我們為了方便設定給target這個client分配個固定ip

然後執行Openvpn就好了

openvpn --config server.ovpn

0x02 client配置


其實就是一個和server端相對應的client配置檔案: client1.ovpn

#客戶端
client

#TUN還是TAP
dev tun

#TCP還是UDP
proto udp

#伺服器公網ip和埠
remote 250.250.250.250 1194

#無限重試
resolv-retry infinite

nobind

#避免重啟後手動配置消失
persist-key
persist-tun

#對應之前生成的client證書還有私鑰
ca /root/easy-rsa/easyrsa3/pki/ca.crt            
cert /root/easy-rsa/easyrsa3/pki/issued/client1.crt
key /root/easy-rsa/easyrsa3/pki/private/client1.key

#壓縮
comp-lzo

verb 3

這裡要注意的是生成的req一定要記得去server那個對應的ca簽約,另外不可以多個client用一個key

然後執行openvpn就好了

openvpn --config client1.ovpn

0x03 內網target配置


內網target的openvpn配置檔案和正常client的配置檔案是相同的,只要把key和crt替換成target自己的就可以

但是需要加一條轉發,保證透過隧道訪問內網的連線可以正確到達內網後再被透過隧道轉發回去

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o br-lan -j MASQUERADE

這裡假設我們要遠端橋接的內網在br-lan介面可達,這裡的例子是Openwrt的一個內部網路的interface,如果用的是桌上型電腦,可能是eth0之類的,如果是要對映路由器自己本身所在的內網,可以改成wan口(注意配置firewall)

如果用的是Openwrt路由器,這時需要先把預設drop的forward規則改成accept,不然會不停的報錯反饋 port unreachable

然後執行openvpn就好了

openvpn --config target.ovpn

0x04 自動化部署


我們可以把target部署在一個Openwrt路由器上,把target部署的全部步驟徹底自動化,簡化成只需要給路由器配置網路即可

自動化配置的檔案如下:

    #target用到的各種認證檔案
    $(CP) $(PKG_BUILD_DIR)/conf/ca.crt $(1)/etc/openvpn
    $(CP) $(PKG_BUILD_DIR)/conf/target.crt $(1)/etc/openvpn
    $(CP) $(PKG_BUILD_DIR)/conf/target.key $(1)/etc/openvpn
    #target的配置檔案
    $(CP) $(PKG_BUILD_DIR)/conf/target.ovpn $(1)/etc/openvpn
    #Openwrt系統的openvpn服務配置(用於指定target配置檔案路徑)
    $(CP) $(PKG_BUILD_DIR)/conf/openvpn $(1)/etc/config
    #把forward改成accept
    $(CP) $(PKG_BUILD_DIR)/conf/firewall $(1)/etc/config
    #改出我們想要的192.168.35.0/24內網網段
    $(CP) $(PKG_BUILD_DIR)/conf/network $(1)/etc/config
    #新增iptables轉發隧道至內網,然後再轉發響應從隧道回去
    $(CP) $(PKG_BUILD_DIR)/conf/firewall.user $(1)/etc

於是當這臺路由器被配置好網路後,就會連線Openvpn server,並把指定的內網開放給連線Openvpn server的滲透測試人員們

下圖為client1測試mtr 192.168.35.154連線192.168.35.0/24內網中裝置的路由情況,成功透過10.8.0.29連線到了內網裝置

mtr

我把整個自動部署的配置打成了個Openwrt的package,大家可以到github上下載示例(替換成自己的key和crt)

https://github.com/lxj616/wooyunwifi_ofdoom

0x05 參考文獻 & 致謝


kali官方給出的single server與single agent模式配置介紹: https://www.offensive-security.com/kali-linux/kali-rolling-iso-of-doom/

binkybear 給出的利用openvpn-as來做的multi-client形式的教程(在Nethunter上實現的agent),由於openvpn-as是商業版的(免費授權最多兩個連線,限制太多),因此我決定在Openwrt上基於原版openvpn來做: https://github.com/offensive-security/kali-nethunter/issues/421

最後宣告一下,這個功能不包含在WooyunWifi裡面,公開的程式碼完全不依賴WooyunWifi,也不包含任何WooyunWifi的程式碼,對於普通的Openwrt路由器,只需要安裝openvpn即可,請在合法的範圍內使用本文中所提到的技術,不要在未經同意的情況下把路由器放進別人內網,也不要把Openvpn server部署到國外免得違背某些奇怪的政策……

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

相關文章