內網滲透中的端口轉發
需要知道,在滲透的整個流程中,根據web應用或者開放的端口進行滲透,獲取webshell只是滲透這門藝術的一小部分,在真實的錯綜復雜的企業環境中進行內網滲透,其實水很深,涉及內網穿透,端口轉發,域滲透,提權等一系列的難題。所以這篇文章對內網滲透學習進行一些記錄。在這過程中參考了很多前輩們的寶貴經驗,我把這些鏈接進行了收集,放在參考文獻部分。
轉發,映射,代理
這幾個概念其實是比較難區分的,特別是和后面的內網穿透混在一起,在宏觀上說,他們差別不大。但是究其本質還是存在不小的差別的。現在就先對這幾個概念說一下我個人的理解:
- 轉發: 轉發是滲透中一種手段,是將一個網絡端口從一個網絡節點轉發到另一個節點的行為。結果是使一個外網用戶經過一個NAT路由器到達在內網IP地址某個端口。有時候也被稱為隧道。
- 映射: 映射也是滲透中的一種手段,端口映射就是將外網主機的IP地址的一個端口映射到內網中一台機器,提供相應的服務。其實很多時候轉發和映射
- 代理: 代理是一種結果,以端口轉發和映射為技術基礎。代理在很多場合是用在連接互聯網的web服務上面,起到突破ip封鎖,隱匿身份等作用。其原理是動態的端口轉發。只需要本機和代理間建立一個隧道,然后代理就可以根據本機發起的請求去動態的獲取出鏈的地址與端口。
- 內網穿透: 內網穿透是目的,它使用的手段有包括端口轉發和映射,或者直接使用代理這一結果。很多時候我們指的內網穿透場景是指攻擊機與靶機處於處於不同的內網中,一些回彈shell之類的手段直接實現,因為IP地址無法相互建立連接。這個時候就需要使用一些內網穿透常見的工具。這些工具也是使用端口轉發和映射或類似的方法來突破限制。
工具名稱 | 主要用途 | 平台 | 備注 |
---|---|---|---|
lcx | 端口映射 | Windows | 只支持tcp協議的端口轉發,非系統內置。linux下叫做可以實現端口轉發和端口映射 |
netsh | 端口映射 | Windows | 只支持tcp協議的端口轉發,需要安裝ipv6 |
rinetd | 反向代理 | Linux | 非內置,需要自行安裝 |
Earthworm | 端口映射、Socks5代理 | Linux、Windows、MacOS、Arm-Linux | 非系統內置,可以十分方便的支持多級轉發 |
frp | 高性能的反向代理應用 | go | 基於反向代理,可以十分靈活的進行內網穿透,繞過防火牆 |
reGeorg | Socks5 代理 | 常見腳本語言 | reGeorg利用webshell建立一個socks代理進行內網穿透,服務器必須支持aspx、php、jsp、js等web語言 |
Metasploit portfwd | 端口映射 | MSF -> Metpreter會話 | 需要網絡狀況較好 |
socat | 端口映射 | Linux | 可能需要安裝 |
Metasploit->socks4a | 反向代理 | MSF -> Metpreter會話 | 需要會話主機有外網代理IP |
tunna | HTTP隧道 | 常見腳本語言 | 需腳本環境執行,並且不太穩定 |
localtuuel | 內網公網映射 | nodojs | 和ngork一樣可以實現內網到公網端口的映射 |
ngork | 內網公網映射 | go | 可以選擇自建服務器或則和使用工具自帶的服務器 |
dns2tcp | DNS隧道 | kaii內置 | 防火牆過濾內部tcp出站策略的情況下,走DNS隧道,,通過DNS流量中繼TCP連接 |
Iodine | DNS隧道 | linux | 原理上和dns2tcp類似 |
icmpsh | ICMP隧道 | 需要root權限 | 需要禁止系統對icmp的相應,用工具來處理收發icmp包 |
系統內置的轉發工具
iptables NAT功能
由於linux主機出於安全考慮,系統參數/proc/sys/net/ipv4/ip_forward
默認為0,所以是禁止NAT功能的,我們可以通過以下兩種你方式修改系統運行時的參數。
臨時方案
echo 1 >/proc/sys/net/ipv4/ip_forward
長期方案
運行vi /etc/sysctl.conf
1 |
# 找到下面的值並將0改成1 |
運行sysctl –p
,使改動立即生效 。
下面是一個轉發的示例
1 |
# 1.1.1.1是公網ip,192.168.2.2內網ip |
這樣就會使得訪問1.1.1.1:80 映射到了192.168.2.2:8080端口。注意到這里
nc
1 |
# 公網主機 |
SSH
1 |
#本地端口轉發: |
netsh
netsh是windows下提供網絡管理的命令行工具,它是一個交互式的shell,涉及到上下文的概念。我們在交互式下面進入相應的上下文,進行參數的設置。也可以直接下面這樣非交互式的進行端口轉發。
1 |
netsh interface ipv6 install |
非內置的端口轉發工具
socat
socat這個端口轉發我們其實更常用在ssrf構造payload的時候本地抓包,因為socat有記錄轉發流的功能。將socat作為中介捕獲我們構造的payload包,然后進行進一步的操作,如gopher協議的構造。
1 |
#安裝 |
lcx.exe
1 |
lcx-<listen|tran|slave> <option> [-log logfile] |
Metasploit socks4a
一組在實際滲透過程中的三件套:路由表+socks4a+proxychains。這樣一來可以使用攻擊機上的滲透工具,利用meterpreter session作為跳板,對內網進行滲透。下面的是流程。
1 |
1. 在反彈的shell中添加路由,如 |
Meterpreter portfwd
在MSF滲透框架里面內置了端口轉發的命令,在回彈了shell的條件下可以直接使用,下面式相關參數解析。
1 |
meterpreter > portfwd -h |
Rinetd
1 |
# 安裝,注意到centos沒有其默認的軟件源,需要手動導入;ubuntu的比較方便 |
Tunna 與 reGeorg
這兩個工具的使用都是比較簡單,就不啰嗦了,在獲取webshell后,我們可以通過http進行端口轉發。直接給出兩個項目地址,推薦使用reGeorg,Tunna不穩定。Tunna工具地址
reGeorg工具地址。
Localtunnel與Gnork
這兩個工具都可以將內網的端口映射到公網,然后訪問公網的ip就類似於訪問內網的端口。這兩個工具可以提供自建服務或者使用它提供的服務器進行內網穿透。其實這類工具在實際滲透中不是很常用。更直接的場景是自己攻擊機在內網,在進行相關回連操作的時候,需要目標機器可達,畢竟它們只是一級轉發,而且操作麻煩。直接給出項目地址:
EW
這是個國產的打洞神器,因為其方便的多級轉發,支持反向代理等特性,在內網滲透領域可是響當當的。這里重點對這個工具做下記錄,真的太強大了!
該工具共有 6 種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。下面針對官方的例子進行以下解釋:
正向代理
1 |
$ ./ew -s ssocksd -l 1080 |
開啟機器的1080端口做正向代理,我們可以通過鏈接該機器的1080端口進行端口代理轉發。一般的場景為:kali 通過proxychain 鏈接開啟了正向代理的公網ip。
反響代理
1 |
#公網ip主機A,ip假設為1.1.1.1 |
反向代理是目標機向我們發起鏈接請求,與正向代理是不一樣的。當建立了鏈接后,它的代理流如下Me<--->A<--->B
。即我只要連接A的1080端口就可以獲得一條反向代理的隧道,與B建立連接。這種場景可以用來繞過入口策略嚴格但是出口策略松散的防火牆。
多級轉發
在前面的兩個場景中,我們看到了rcsocks
,`ssocksd
,rssocks
這三個命令的使用。在多級轉發中我們會見到另外三個命令的作用。他們就類似於中間件,負責隧道導流與串接。
1 |
#命令使用舉例: |
下面我們來看個實際滲透三級級聯例子:
1 |
# 我們自己的VPS執行 |
數據流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks。
我們來解讀以下這個三級級聯,首先這是個反向代理的例子,反向代理的目的端口是C的7777,當隧道建立完成,我們只需要連接到VPS的1080端口,就會自動幫我們轉發到7777。我們來看下中間過程如何:首先第一個命令VPS在8888接收反向代理,並且在1080等候我們的連接。第二條命令將跳板機A的8888端口導向9999;第三行命令將跳板機B的9999端口導向7777;最后第四條命令在跳板機上進行反向代理發起連接到跳板機B的7777端口。
FRP
frp也提供了完善的內網穿透的功能,功能上其實和gnork這些差不多,但是相比起來,FRP的配置更為靈活。推薦層度:FRP>Localtunnel>gnork
過牆隧道
前面介紹的端口轉發,有使用http協議,tcp協議,sockts代理的,但是這些協議轉發流量太過於礙眼,容易被嚴謹的防火牆規則過濾,導致shell從內網出不來,那么在這種情況下,我們就需要強有力的過牆隧道。下面是筆者在網上搜羅的一些走udp的dns隧道和走icmp的隧道,可以說這兩種打洞手段很別出心裁,筆者看得是嘆為觀止。這里先把相關的工具鏈接和看過的文章記錄下來。寫不動了……,避免篇幅過長(其實是有點懶),下次補上。
DNS2tcp
https://pkgs.org/download/dns2tcp
http://pwdme.cc/2016/11/11/dns2tcp-dns-tunnel/
https://www.freebuf.com/articles/system/8726.html
https://kali.tuisec.win/kalitools/dns2tcp_zh.html
https://www.aldeid.com/wiki/Dns2tcp
iodine
https://github.com/yarrick/iodine
https://www.freebuf.com/articles/system/178214.html
https://blog.csdn.net/weixin_36440115/article/details/76400359
icmpsh
https://github.com/inquisb/icmpsh
參考文獻
Powershell攻擊指南黑客后滲透之道系列——基礎篇
Powershell攻擊指南黑客后滲透之道系列——進階利用
Powershell攻擊指南黑客后滲透之道系列——實戰篇
內網滲透常見端口轉發方式
玩轉SSH端口轉發
內網安全檢查/滲透總結
推薦一款很好用的內網穿透工具—FRP
Localtunnel內網穿透工具的安裝與使用
CentOS下部署Ngrok服務器