本文作者:雁过留痕@深信服MSS专家部 0x00前言在值守过程中,身为一名蓝队防守人员,最基础的能力就是HTTP的日志分析能力,那么,何谓HTTP日志,HTTP日志又分为哪几类?本文围绕日志分析这一方面展开论述,详情如下。 0x01基础知识根据GPT的回答,什么是http日志?答案如下: HTTP日志是指记录HTTP请求和响应的日志文件。当客户端向服务器发送HTTP请求时,服务器会记录请求的详细信息,例如请求的时间、请求的URL、请求的方法、请求的来源IP地址等。当服务器向客户端发送HTTP响应时,服务器也会记录响应的详细信息,例如响应的状态码、响应的内容类型、响应的大小等。HTTP日志可以用于分析网站的访问情况、识别潜在的安全问题、优化网站的性能等。常见的HTTP日志格式包括Apache日志格式、Nginx日志格式等。 在分析HTTP日志之前,需要先学一下基础的知识,不然可能会看不懂数据包 一、HTTP的请求方式HTTP的请求方式常见的分2种:GET和POST,当然,还有其他的,例如:PUT、DELETE、HEAD等等 GET:向指定目标发起请求,URL传参,一般用于获取信息或跳转页面 1.GET型的请求数据包发送一个请求来取得服务器上的某一资源,传递的参数在URI的后面,这种请求方式能够直接在浏览器的URL栏看到请求的参数: 在HTTP数据包的呈现如下: 给news.asp传递了tpye=5和id=123两个参数 2.POST请求方式向模板请求资源时,如果采用POST请求方式传递参数,这时传递的参数在数据包体内,而不是在URI后面 HTTP日志的呈现如下: 该数据包,指的是向addnews.asp传递了两个参数:Title=test和content=test 二、编码与加密在http数据包里面,会经常看到各类的编码、加密。所以需要先了解一些常见的加密,有助于我们更好的理解。 例如,发现了某个数据包里面有个post传递的ghost参数,存在编码,如下: 某web日志: 这种编码完之后的数据包,需要解码后才能看到具体请求,在这之前,我们了解下数据包中常见的几种编码和加密方式。 推荐一个解码网站:https://gchq./CyberChef/ 1.BASE64编码
base64编码主要用于对于参数传递的一种编码方式,比如:登录的时候对用户名和密码进行编码传递到服务端。 username=YWRtaW4=&password=YWRtaW4K base64编码:1qaz@WSX===》MXFhekBXU1g= 2.URL编码当URL 路径,或者查询参数中带有中文、特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。 解码网站:https://www./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'</script><object data=jav\x61scr\x69pt:npsduc(uhg)> 5.md5加密MD5加密是一串32位由字母和数字组成的不可逆密码,一般用于在数据库存储中对密码进行加密,如果需要解出md5加密前的字符串,需要通过撞库的方式。 目前好用的两个解md5的网站: e10adc3949ba59abbe56e057f20f883e===》123456 看完了编码后,前面的数据包知道怎么解了吧 URL+BASE64编码还原:首先URL解码一次,内容如下
URL+BASE64编码还原:将z0和z1进行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(); 可以看出来是菜刀工具连接PHP webshell读取config.sample.inc.php内容的行为,非误报 三、常见的正报与误报1.攻击常出现位置Get、post 请求报文的url字段 2.攻击的特点1)攻击一般都有一定的连续性,所以一段时间会产生多条日志,并且命中特征id是有一定分布的,不能是只命中某个特征。 2)攻击一般都会借助工具进行,同一个IP地址日志间隔较小,可能一秒中产生几条日志,明显不是人操作浏览器的行为。 3)攻击者可能会借助一定跳板,如果IP地址是国外的,攻击嫌疑较大。 3.日志的分析1)基于攻击IP地址方法分析(适用日志较多的情况) 2)基于攻击方法分析(适用每类不太多的攻击) 4.正报1)命令执行常见的命令攻击语句
攻击语句出现在Get 、post请求 URL参数中,尝试通过cmd传递touch tmp.txt创建文件,属于攻击行为,正报。 尝试调用cmd执行dir命令,属于正报 2)扫描工具在User-agent中存在awvs的UA头,判定为扫描工具AWVS发起,属于正报 还有其他的异常UA: 3)webshell通信常见的一句话木马
蚁剑连接webshell的数据包,属于正报,确实是攻击行为,是否成功需要观察回包 4)SQL注入探测语句
下面数据包中GET请求传递的参数存在sql探测语句和联合注入语句,判定为正报 下面数据包的POST请求传参,存在sql注入语句,属于正报,并且UA头属于sqlmap工具的UA头 下面属于宽字节注入。存在明显的SQL注入语句,系正报。 5)XSS攻击常见的xss攻击语句 <script>alert('xss')</script> 脚本 数据包中,GET型传参存在明显的XSS攻击语句,系正报 6)信息泄露配置文件访问 信息泄露攻击一般指的是读取敏感的文件 下面这个数据包就是尝试读取Windows系统C盘Windows目录下的win.ini文件,属于正报,是否成功需要看回包 尝试读取配置文件web.config,属于正报 7)敏感后缀及目录探测特殊后缀 8)应答报文提示信息目录浏览:Parent Directory、Directory Listing For、Index of /、Welcome to the directory listing 下面是目录浏览漏洞的浏览器的展示 数据包的展示效果如下,也是存在目录浏览漏洞 5.误报问题:一些网站实现存在安全隐患,用户的一些正常流量,也可以被攻击者篡改,直接发起攻击。 1)SQL注入误报sql属于直接写在前端,通过post请求传递到后端的时候触发安全设备的告警,属于误报 2)XSSxss属于误报非常高的一种攻击,所以分析日志的时候一定要注意 数据包中通过参数直接传递了js脚本,所以产生了误报 同样也是传参了js脚本 3)目录穿越目录穿越又被称之为目录遍历 下图数据包就是业务的../导致触发的目录穿越攻击,属于误报 一样,也是../触发的目录穿越,属于误报 4)代码注入用户的应用是代码交流网站,传一段代码 6.小练习你能看出下面的这些数据包是正报还是误报吗? 0x02攻击成功事件举例一、sql注入判别规则:注入参数中的ASCII码转码之后为qkzz开头的字符,在回包的BUMEN参数里面,该字符串被解析出来了,所以存在漏洞。 案例:
使用sqlmap对该漏洞参数进行验证,发现能够跑出数据库名(注意,验证漏洞需经过客户授权),说明存在漏洞: 二、webshell上传判别规则: 1.查看请求是否存在恶意代码,上传的后缀是否是jsp、php、asp等脚本文件。 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字段,真实攻击IP是XFF字段的攻击IP: 第三种:数据包中没有XFF字段,那如何判断是不是代理服务器呢?需要上机查看: 89.163向89.252的27003端口发起攻击。 上机找到nginx.conf配置文件,在配置文件中查找是否有目的IP和端口的代理,在文件中果然找到了相关配置,所以这个就是代理服务器的问题,没有配置好XFF,所以数据包看不到xff字段。 在中间件日志中查看相同时间的日志,发现真实攻击是外网IP,并非真实的内网横向攻击。 六、内存马注入发现内存马的注入数据包,密码是pass1024,注入的路径是/favicondemo.ico; 回包显示是-!|Success|<-,代表注入成功,这个时候就需要上机排查了。 七、Webshell通信可以看到请求的URL像通过webshell上传传上去的,然后参数是加密参数,这个时候如果有webshell通信了,文件如果不是历史遗留文件,那可能存在webshell上传漏洞,可以到SIP找下。 冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection。Connection: Keep-Alive 八、Shiro反序列化命令执行看数据包,有base64,解码后请求包是命令,响应包是命令执行结果。 0x03access日志分析一、access日志常见的目录1.IIS通常情况下,IIS日志文件存储在以下位置:C:\inetpub\logs\LogFiles。在这个目录下,您将看到以日期命名的子文件夹,每个子文件夹对应一个日期。在每个日期的文件夹中,您将找到具体的日志文件,通常以W3SVC开头,后面跟着一个唯一的标识符。 如何定位IIS网站的日志在哪?1.先需要知道被攻击的端口是哪个,假设端口是80,找到IIS搭建的80端口的网站 2.右击网站,选择管理网站,选择高级设置,记住ID的值,现在为1 3.双击网站的日志,在打开的窗口中复制日志路径:%SystemDrive%\inetpub\logs\LogFiles 4.打开我的电脑,输入复制的日志路径,回车,文件夹W3SVC后面的数字是网站的ID,上面是1,所以是第一个文件夹 5.打开后就是80端口网站的访问日志: 2.Apacheapche如何定位日志目录1.先知道被攻击的端口,现在是90,根据90端口定位到启动目录,切换到apache目录下 2.apache目录下的logs目录下的access文件就是访问日志 3.tomcat以下文件都是在tomcat启动时自动生成的日志文件,按照日期自动备份,其中访问日志默认不记录,需要配置。 tomcat默认不记录访问日志,如果遇到tomcat目录下的logs文件夹下没有access日志,可以通过如下方法查看日志是否开启。 tomcat如何定位到日志存放目录Linux: 1.首先需要知道被攻击的端口,例如443端口,执行netstat -antlp | grep 443,定位到拉起443端口的业务。 2.根据拉起的业务pid使用systemctl status PID定位到进程详情,可以看到,java拉起的tomcat目录,切换到tomcat的目录 3.找到tomcat目录下的logs文件夹,里面存放的就是access日志。 4.nginxnginx日志也是一样,一般是做代理转发的,日志文件在nginx的安装目录下的logs文件夹下面。 Nginx如何定位到日志存放目录1.先需要知道是主机开放的哪个端口搭建的业务被攻击,以80端口举例,是PID:4052开放的80端口。 2.任务管理器找到4052进程,发现是nginx 3.右击表头,选择列,找到命令行,勾选确认后,可以展示出进程所启动的命令参数和路径 4.右击进程,找到所在位置 5.打开logs文件夹 6.里面存放的正是access日志 二、access日志解析中间的日志一般包含如下部分,我们可以利用这些已知信息来定位到漏洞点,下面是tomcat的日志举例 tips:iis中间件的日志的记录时间是格林威治时间,比北京时间快八个小时,所以我们分析iis日志的时候,要减去八小时才是真实的北京时间 分析access日志的时候,可以用emeditor软件分析,非常好用 下面以该软件为例分析一个web应急案例 已知user.jsp是webshell文件 分析日志发现在访问user.jsp文件前面有个用admin登录tomcat部署war包的记录 主机上确实存在user.war包 并且还发现存在manager.jsp是通过user.jsp上传的 如果你喜欢我的文章,请给我点个赞,关注一下我吧! |
|