臥底路由器之WooyunWifi of DOOM
在實際業務中,我們經常會遇到一些滲透測試專案由於處於企業內網,因此不得不把白帽子們集合起來塞進小黑屋實地測試。
本文基於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連線到了內網裝置
我把整個自動部署的配置打成了個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部署到國外免得違背某些奇怪的政策……
相關文章
- Kail Linux 新增“臥底模式”, 秒變 Windows 10 介面來迷惑其他人2019-12-04AILinux模式Windows
- MIT釋出軟體機器魚,臥底魚群大計可成2018-03-23MIT
- 美國完成首次暗網臥底行動:收繳2360萬美元違禁品2018-06-28
- blender臥室打光2024-06-15
- jmeter大坑_臥槽了2020-12-30JMeter
- 當心你的手機暗藏“臥底軟體”!已有6萬人被監聽和跟蹤→2019-11-04
- GitHub Actions,臥槽!牛批!2022-12-06Github
- 看《DOOM啟世錄》談遊戲專案管理2020-12-22OOM遊戲專案管理
- AOP底層原理之CGlib2021-09-09CGLib
- iOS 底層探索之Runloop2019-09-07iOSOOP
- Android之Context底層原理2018-03-02AndroidContext
- 蒂姆.威爾茨:處境尷尬的 DooM 元老2019-07-23OOM
- 人們對《DOOM》的誤解、偏見以及刻板印象2020-06-12OOM
- 臥槽,WebStorm現在免費啦!2024-10-25WebORM
- 臥槽Winform也可以這麼好看?2023-05-12ORM
- 當代不少年前人正深陷幸運飛艇的騙局!冒死臥底探尋的真實經歷!2021-09-19
- php底層原理之函式2019-04-14PHP函式
- Just for fun——PHP框架之簡單的路由器(2)2019-02-16PHP框架路由器
- IOC和DI之刨根問底之第一節2021-10-28
- 《毀滅戰士:永恆》——時代雖變,但DOOM永恆2020-03-19OOM
- Go之底層利器-AST遍歷2019-05-01GoAST
- PHP 底層原理之類和物件2019-04-22PHP物件
- 分散式之系統底層原理2021-01-14分散式
- php底層原理之變數(一)2019-03-17PHP變數
- JavaScript之例題中徹底理解this2019-03-04JavaScript
- php底層原理之變數(二)2019-03-24PHP變數
- Java Thread的join() 之刨根問底2018-06-25Javathread
- doom-emacs: Linux中速度極快的Emacs粉絲編輯器2022-03-24OOMMacLinux
- 如何徹底杜絕家庭路由器的wifi密碼被wifi萬能鑰匙洩露?2020-10-15路由器WiFi密碼
- PHP底層核心原始碼之變數2021-07-19PHP原始碼變數
- Flutter(五)之徹底搞懂Dart非同步2019-09-16FlutterDart非同步
- php底層原理之陣列實現2019-03-31PHP陣列
- php底層原理之垃圾回收機制2019-03-03PHP
- 筆記-runtime原始碼解析之讓你徹底瞭解底層原始碼2019-03-28筆記原始碼
- 臥槽:油管用MySQL支援24.9億使用者2024-06-01MySql
- 臥式共模電感基本特性詳解gujing2021-10-19
- 臥看雲起時-作業系統篇022020-11-11作業系統
- RIP路由器2024-11-21路由器