xss基础知识

 xss基础知识_第1张图片

  • XSS
  1. 概述

指攻击者利用网站程序对用户的输入输出过滤不足,导致恶意代码在页面执行,对受害者造成cookie资料窃取、会话劫持、钓鱼欺骗等危害;

 

 

  1. XSS危害

1.网络钓鱼,盗取各类用户的账号,如机器登录帐号、用户网银帐号、各类管理员帐号;

2.窃取用户Cookie,获取用户隐私,或者利用用户身份进一步执行操作

3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等

4.强制弹出广告页面,刷流量等

5..进行恶意操作,例如任意篡改页面信息,删除文章等,传播跨站脚本蠕虫,网页挂马等

6.进行基于大量的客户端攻击,如DDOS攻击

7.结合其它漏洞,如CSRF漏洞。

8.进一步渗透网站

9.获取客户端信息,例如用户的浏览历史、真实IP、开放端口、盗窃企业重要的具有商业价值的资料等;

10.控制受害者机器向其他网站发起攻击;

11传播跨站脚本蠕虫等;

 

  1. XSS分类

xss攻击可以分成两种类型:

1.非持久型攻击
2.持久型攻击

 

非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

 

持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

也可以分成三类:

反射型:经过后端,不经过数据库

存储型:经过后端,经过数据库


DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,

Dom - xss是通过url传入参数去控制触发的。

 

  1. 反射型

使用方法:

它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被 打开时,特有的恶意代码参数被HTML解析、执行。

它的特点是非持久化,即不存入数据库。。

 

缺点:

  1. 必须用户点击带有特定恶意脚本代码参数的链接才能引起;
  2. 恶意代码存放URL,只有当用户点击恶意链接打开时执行恶意代码,隐蔽性差;
    xss基础知识_第2张图片 
     
     
  1. 存储型

存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie;

  1. DOM

归属于反射型,DOM型XSS是基于DOM文档对象模型的一种漏洞,所以,受客户端浏览器的脚本代码所影响。

客户端的脚本程序可以通过DOM动态地检査和修改页面内容,它不依赖于服务器端的数据,而从客户端获得DOM中的数据(如从URL中提取数据)并在本地执行。

另一方面,测览器用户可以操纵DOM中的一些对象,例如URL、 location等。用户在客户端输入的数据如果包含了恶意 JavaScript脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于DOM的XSS攻击。

伪静态页面是可以产生DOM型XSS的。假设一个名为domXSS1.html的网页,内容如下:

DOM-XSS1 test

输入http://www.any.com/xss/domXSS1.html?a=test,页面上只输出test。页面如下:

xss基础知识_第3张图片 

输入domXSS1.html?a=,应该出现弹窗。

 

 

  • XSS漏洞挖掘点
  1. 反射型&存储型

数据交互(即输入/输出)的地方最容易产生跨站脚本,因此,我们可以着重对网站的输入框、URL参数处进行·测试。当然,所有来自cookie、post表单、HTTP头的内部都可能会产生xss。

反射型XSS通常出现在网页的URL中,必须用户点击带有特定参数的连接,才能引起。Payload在响应页面中。

存储型和反射型漏洞挖掘,主要步骤先在页面中执行命令,然后在通过查看页面源代码,找到正确的变换姿势,最终触发弹框。

接着分析其中的函数,最终找到出现该漏洞的原因,。即先利用黑盒测试找出跨站脚本漏洞,再利用白盒技术分析一下该漏洞的原因。

反射型常用测试方法:

一般是存在于URL中,也可对整个输入(特别强调的是,整个HTTP请求都是输入,数据库取来的数据其实也是输入。HTTP请求包括GET、POST参数,COOKIE,URL,头部的REFERER等等(但这些参数的数值必须在返回页面中出现))中每个地方都可以如下操作,

1.        自己构造一个唯一的串,例如:myxsstestxxxx

2.        将某个输入项(比如某个参数)替换为上面的串

3.        查看HTTP相应中是否有这个串,并记录下来

4.        根据HTML上下文决定,用哪种类型串来尝试,尝试攻击串,然后重新提交请求

5.        如果能够找到相应的攻击串说明漏洞是存在的 这里的关键在于第四步,因为服务器端可能会做一些限制,比如encode或者长度限制,测试的时候需要想办法看看是否能绕过限制。

 

  1. DOM

发掘基于DOM的跨站脚本漏洞,主要关注两方面:脏数据的输入和脏数据的输出。

脏数据的输入

着重检查用户的输入源,eg:可能触发DOM XSS的属性,

比如:

windows.name属性

document.referer属性

location 属性

  1. document.referer属性
    该属性设置了用户的来源url(即上一个url)


    DOM-XSS2 test


    Demo


    from:



    页面的访问网址应带有?XSSXSSXSSXSS第一次访问页面的结果是页面中还有一个Demo超级链接,该链接指向页面本身。点击该链接,此时浏览器弹出一个对话框。
     

  2. location属性
    location是JavaScript管理地址栏的无内置对象,使用location.href能管理页面法人URL,如果想引发一个DOM型XSS,可以在含有上述代码的HTML文档的URL后输入JavaScript代码,比如#,然后脚本会使用document.write进行输出。
     


    DOM-XSS3 test





    脏数据的输出
    输出在这里指的是能使字符串在页面中输出的方法或函数,譬如innerHTML、document.write等。
    测试和发掘DOM型XSS输出对象的流程是:跟踪输出函数的变量,比如首先找到document.write等会造成危害的地方,然后回溯变量与函数的调用过程,查看用户能否控制输入。
     
    主要两点:
    1对于反射型能在URL中调用其对象
    2 能在页面中对对象的属性值能显示出来;
     
     
  • XSS绕过
  1. 字符绕过

转换HTML标签

•     直接嵌入html:

•        元素标签事件

•        图片标签

•        其他标签