【35】WEB安全学习----XST攻击

本章为知识扩充部分,此攻击现浏览器已不支持发送TRACE请求,故只需要了解攻击原理即可。

XST攻击原理

"Cross-Site-Tracing"简称为XST,如果开发者在设置cookie属性时配置了httponly属性,那么通过XSS攻击就无法读取cookie数据,那么如果服务器支持TRACE请求并且允许跨域的话,那么还是可以读取到cookie数据的。

要想理解XST攻击,首先需要了解以下技术:

一、AJAX

AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。现目前浏览器已不支持发送其他请求方法。

var xmlhttp;
var result;
xmlhttp=new XMLHttpRequest(); //创建对象
xmlhttp.open(method,url,async);  //设置发送请求  method只支持POST和GET
xmlhttp.send(); //发送请求
result=xmlhttp.responseText;  //获取响应结果

二、TRACE请求

TRACE是用来调试web服务器连接的HTTP方式,该方法会使服务器原样返回任意客户端请求的任何内容,我们知道,在发送请求时,浏览器会自动附带cookie进行提交,如果服务器支持TRACE请求,那么就会把附带提交的cookie头部信息原样返回回来,这样就读取到cookie数据。

查看服务器是否支持TRACE请求,用OPTIONS请求查看:

三、跨域请求

什么是跨域?

在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。对于Ajax的影响在于,通过XMLHttpRequest实现的Ajax请求,不能向不同的域提交请求,例如,在abc.example.com下的页面,不能向def.example.com提交Ajax请求。

因为使用XMLHttpRequest对象不能进行跨域访问,所以即使服务器支持TRACE方法,读取到了cookie数据也没办法发送到攻击者手里,要想服务器支持跨域发送,最常用的方法是使用CORS策略。

CORS策略

CORS是一个W3C标准,全称是"跨域资源共享",它允许浏览器向跨源服务器,发出ajax请求,从而克服了AJAX只能同源使用的限制。
CORS依赖于服务器端的设定,只要在服务器端进行了设置,就可以实现相应的资源访问。

只需要在服务器端头部增加以下字段:*表示任何源都可以进行访问

Access-Control-Allow-Origin: *

所以,在使用漏洞扫描器扫描时,常常会发现一个低危风险,说服务器开启了Access-Control-Allow-Origin: *,可能会导致跨域风险。

所以,要使XST攻击成功,需要同时满足:存在XSS漏洞、服务器支持TRACE请求方法、服务器开启了Access-Control-Allow-Origin: *。

再加上现在浏览器ajax已不支持其他请求方法,这个攻击已属于古老漏洞之一了。

再来了解一个跨域方法,增加知识点:

JSONP

通过JSONP也可以进行跨域访问,我们知道在页面上有三种资源是可以与页面本身不同源的。它们是:js脚本,css样式文件,图片。而jsonp就是利用了script标签的src属性是没有跨域的限制的,从而达到跨域访问的目的。因此它的最基本原理就是:动态添加一个<script>标签来实现。

<script type="text/javascript" src="http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>

虽然这样可以进行跨域访问,但只能为GET请求方法。

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82970182