接触跨站***一段时间了,有了一些认识,如今先按本身的理解理一下思路。后续有时间在针对里面详细的***方法作详解。javascript
一.跨站脚本介绍java
跨站脚本***(XSS)是一种***技术,是***者将恶意代码插入到回应给用户浏览器的代码中的一种实例。跨站脚本的几个特色:web
受害者:跨站做用在客户端,而不是服务端,即受害者是客户端而不是服务器。数据库
跨站类型:反射式;持久式;基于DOM式;其它式(包括嵌入FLASH,PDF等其它载体)。浏览器
1. 非持久型XSS漏洞通常存在于URL参数中,须要访问***构造好的特定URL才能触发漏洞。安全
2. 持久型XSS漏洞通常存在于富文本等交互功能,如发帖留言等,***使用的XSS内容经正常功能进入数据库持久保存。服务器
3. DOM XSS漏洞,也分为持久和非持久型两种,可能是经过javascript DOM接口获取地址栏、referer或编码指定HTML标签内容形成。cookie
4. FLASH,PDF等其余第三方文件所形成的特殊XSS漏洞,一样按应用功能也分为持久和非持久型。框架
对跨站三种类型的理解:客户端执行了 客户端提交给服务端,服务端返回的恶意代码。dom
反射型:服务端提取用户的输入,未作严格过滤,直接返回给客户端,客户端浏览器执行了代码。
1)对数据未作严格净化返回给客户端。
2)实现***须要点击***者构造的连接,每次点击完成一次***,由于不能保存。
存储型:
1)对数据未作严格净化返回给客户端,客户端执行了恶意代码。
2)***者构造连接完成***,受害者点击正常的连接,就会受影响。由于代码已经被保存。
DOM型:
1)对数据未作严格净化返回给客户端,客户端执行了恶意代码。
2)服务端返回给客户端的是一样的代码(js代码),在客户执行的时候才出问题,在服务端的响应中是没有恶意代码的。DOM型能够是反射型或者存储型,在于js代码是否存储输入的值。
几个区别:
反射式和存储式的区别:
1)服务端对数据的处理方式:一个是保存后返回,一个是直接返回。
2)出现的触发点不同:反射通常出如今返回错误信息等,而存储通常
出如今填写表单等。(本质是第一个的缘由,看哪些状况是要保存数据的,哪些状况是不保存数据的)
3)是不是一次性的,反射是一次性,每次都要点。 存储不是。(本质也是第一个缘由,由于存储保存了代码)。
因此综上,区别其实就一个,就是服务端有没有保存数据,其余就是根据特色得出的。
DOM式和上面的两个的区别:
DOM是由于服务端处理数据用的是js代码,不会对数据进行处理
而是到达浏览器后才处理的,因此在响应代码中是没有恶意代码的。它也能够是保存或者反射,在于js代码中有没有保存输入的值。
二.CST、CFS、CSRF
2.1 CST
CST***是一种使用XSS和HTTP TRACE功能来进行***的方式。它是一种***技巧,能够利用它避开HttpOnly对cookie提供的保护,使之可以经过客户端JavaScript获取已经标记为HttpOnly的cookie值。
正常状况下,客户端脚本(如JS脚本)是能够经过document.cookie函数得到,这样若是有XSS跨站漏洞,cookie很容易被盗取。浏览器有一个安全策略,经过设置cookie的httponly属性,这样客户端脚本就不能经过document.cookie访问该cookie,即时有跨站漏洞,也不能盗取用户cookie。(注意:httponly属性对正常的HTTP请求并无影响,即时Cookie设置了HTTPONLY属性,当用户浏览有效域中的站点时候,这个Cookie仍然被自动发送,只是不能使用脚原本访问该Cookie。(解释HTTPONLY)
通常客户端向服务器请求是利用HTTP GET和POST方式,但那只是常见,还有其它方式(详细参考RFC2616文档)。其中HTTP TRACE也是一种方式,这种向服务端请求信息主要用于调试web服务器链接用。若是请求有效,则在响应中会在实体中包含整个请求消息。(解释HTTP TRACE)
与XSS联系和区别:
联系:CST是XSS的一种子类,也属于XSS跨站漏洞。
区别:浏览器请求的方式不同,普通的XSS通常经过GET和POST方式在页面上输入***脚本实现,可是CST若是要在页面上输入,须要找到会经过TRACE发送的输入点,通常是本身构造***报文在TRACE方法中进行发送。
测试相关:
因为普通的XSS***报文能够经过GET或者POST被提交,而CST则要经过TRACE来提交,因为比较少用,目前还未搜索到有页面输入框可使用TRACE提交的。所以对它的测试须要注意,***脚本中须要本身提供发送函数,好比使用XMLHttpRequest发送请求(固然普通的XSS***也须要覆盖用XMLHTTPRequest发送GET、POST请求)。
测试总结:对CST的测试只须要将普通XSS的***特征脚本放在HTTP的TRACE位置发送出去就能够。
2.2 CFS
在浏览器的安全机制中,客户端脚本是不能访问不一样服务器或域名的页面相关信息。而经过HTML的frame/iframe能够在页面中包含第三方服务器的页面,这样***者能够利用主页面的脚本程序获取到frame/iframe包含的第三方服务器的信息。
同源策略:客户端脚本是不能访问不一样服务器或域名的页面相关信息,可是也有例外,能够经过设置document.domain解决,在两个不一样域名的客户端脚本都设置document.domain为同个父域。(注意:两个域是要拥有同个父域这个方法才有效果),而后在主页面加载FRAME/IFRAME页面实现,主页就能够调用框架内的页面的元素。
与XSS的联系和区别:
联系:CFS是XSS的一种***子类,也属于XSS跨站漏洞。
区别:CFS主要利用HTML中的FRAME/IFRAME来实现跨站***。将他单独出来,主要是因为他***后效果不一样,有一些特殊的场景。
测试相关:
CFS的测试和XSS的测试同样,被包含在XSS测试中,是它的一个子集,特征为frame和iframe关键字。若是针对性测试,就是对frame和iframe进行各类编码。
2.3 CSRF
CSRF:cross site request forgery,跨站请求伪造。是一种将受害用户欺骗到包含有恶意HTTP请求的页面的***方式,这种***方式的危害性在于它继承了受害用户的实体身份和权限,即盗用了受害人的身份以其的名义进行非法的操做,好比篡改用户资料、用户密码、以及购买物品等。通俗的说,CSRF***是在受害者绝不知情的状况下以受害者名义伪造请求发送给受***站点,从而在未受权的状况下执行受害者权限保护之下的操做。
CSRF(XSRF)的本质:服务端对客户端的COOKIE校验不严格,致使被***者盗用。
1)状况一:站点B和站点A是不一样站点,站点B中的请求代码URL没有包含脚本,而是正常的请求状况,只是利用了浏览器而浏览器不知道而已。这个时候用户点击恶意网站B发送给站点A的报文 和 用户真实发送给站点A的报文只有在referer字段有所区别。Referer字段会显示发送的起始域,也就是站点B。
2)状况二:站点B和站点A重合,这个时候利用站点B的存储XSS漏洞使得用户发送请求给站点A的其它页面。
3)状况三:站点B和站点A是不一样站点,可是站点B中的请求的代码含有JS代码来实现相应功能。同时站点A有XSS漏洞,会使得传给站点A的代码返回到客户端执行。
以上三种状况仅状况二是比较特殊的,测试时候须要构造referer字段与用户登陆的时候域不同的域名,其它两种同XSS***无区别。
与XSS的联系和区别:
联系:CSRF能够利用XSS实现更有用的***(常常也这么用)。上述情
二和状况三就是利用XSS漏洞的状况。
区别:CSRF不是XSS的子类,他们的本质问题不同。XSS本质是服务端对输入过滤不严然后输出的时候将客户端的脚本再输出。CSRF是服务端对用户的身份认证不严格(cookie等),使得***者冒充用户达到***目的。
测试相关:
对于CSRF测试,两个方面测试:
1)包括XSS测试,同XSS测试,重点在于请求方法。主要有两种:XMLHTTPRequest和带有SRC属性的标签(frame、iframe、img、input)等。
2)测试Referer域的URL是其它地址,非请求的本URL地址。
三. 跨站***整个学习思路:
跨站本质-->跨站类型分析-->有效载荷内容(就是能完成什么***,***效果上)-->载荷传送方式--》检测漏洞方式
CST和CFS都是在有效载荷内容上的区别。
CSRF本质跟XSS不同,常常是利用XSS漏洞的功能完成载荷更复杂的功能,达到更好的***效果。