XSS跨站脚本攻击详解

一、简介

    XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

二、攻击产生原理

    HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

三、攻击类型

    XSS分为:存储型 、反射型 、DOM型XSS,

    反射型XSS:反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

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

    DOM型XSS:传统的 XSS 漏洞一般出现在服务器端代码中,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。 所以,受客户端浏览器的脚本代码所影响。客户端 JavaScript 可以访问浏览器的 DOM 文本对象模型,因此能够决定用于加载当前页面的 URL。换句话说,客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于服务器端的数据,而从客户端获得 DOM 中的数据(如从 URL 中提取数据)并在本地执行。另一方面,浏览器用户可以操纵 DOM 中的一些对象,例如 URL、location 等。用户在客户端输入的数据如果包含了恶意 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。

四、 XSS的攻击载荷

1.标签

<script>标签:<script>标签是最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入脚本标记中

<body>标签:可以使用onload属性或其他更加模糊的属性(如属性)在标记内部传递XSS有效内容background

<iframe>标签:该<iframe>标签允许另一个HTML网页的嵌入到父页面。IFrame可以包含。JavaScript,但是,请注意,由于浏览器的内容安全策略(CSP),iFrame中的JavaScript无法访问父页面的DOM。然而,IFrame仍然是非常有效的解除网络钓鱼攻击的手段。

<input>标签:在某些浏览器中,如果标记的type属性<input>设置为image,则可以对其进行操作以嵌入脚本。

<link>标签:<link>标签,这是经常被用来连接外部的样式表可以包含的脚本。

<table>标签:可以利用和标签的background属性来引用脚本而不是图像。

<div>标签:该<div>标签,类似于<table>和<td>标签也可以指定一个背景,因此嵌入的脚本。

<object>标签:该<object>标签可用于从外部站点脚本包含。

<img>标签:该标签可以通过对img响应传递有效内容。

此外,还有诸如<p>标签,<a>标签,<svg>标签,<dev>标签,<tag>标签,<details>标签,<sryle>标签等等都可能成为XSS攻击可利用有效载荷。

2.事件

1、onmouseenter:当鼠标进入选区执行代码

2、onmouseleave:当鼠标离开选区执行代码

3、onmousewheel:当鼠标在选区滚轮时执行代码

4、onscroll:拖动滚动条执行代码

5、onfocusin:当获得焦点时执行代码

6、onfocusout:当失去焦点时执行代码

7、onstart:当显示内容时执行代码

8、onbeforecopy:选中内容后右键执行代码

9、onbeforecut:选中内容后右键执行代码

10、onbeforeeditfocus:当获得焦点时执行代码

11、onbeforepaste:选中内容后右键执行代码

12、oncontextmenu:鼠标右键执行代码

13、oncopy:鼠标右键执行复制时执行代码

14、oncut:鼠标右键执行剪切时执行代码

15、ondrag:选择内容并拖动时执行代码

16、ondragend:选择内容并拖动松开鼠标执行代码

17、ondragenter:选择内容并拖动时执行代码

18、ondragleave:选择内容并拖出边框执行代码

19、ondragover:选择内容并拖动时执行代码

20、ondragstart:选择内容并拖动时执行代码

21、ondrop:有内容被拖动进来时执行代码

22、onlosecapture:选择内容时执行代码

23、onpaste:粘贴时执行代码

24、onselectstart:选择内容时执行代码

25、onhelp:进入焦点按F1时执行代码

26、onEnd:当时间线执行完毕时执行代码

27、onBegin:当时间线开始执行代码

28、onactivate:激活当前标签时执行代码

29、onfilterchange:当滤镜改变时执行代码

30、onbeforeactivate:当激活当前标签时执行代码

31、onbeforedeactivate:当标签内值改变时执行代码

32、ondeactivate:当标签内值改变时执行代码

五、XSS攻击危害

    1.Cookie窃取

            攻击者可以通过alert(document.cookie)来获取用户的cookie信息,从而登录到用户的账户。

     2.会话劫持

            客户端和服务端通过标识符来识别用户身份和维持会话,但这个标识符也有被其他人利用的可能。会话劫持的本质是在攻击中带上了 Cookies 并发送到了服务端。

    3.钓鱼

            把当前页面重定向到一个钓鱼页面。攻击者往往会伪造一个登录页面,用户输入用户名和密码时则会被攻击者获取并利用。

    4.网页挂马

            一般都是通过篡改网页的方式来实现的,如在 XSS 中使用 <iframe> 标签。

    5.DOS与DDOS

            注入恶意 JavaScript 代码,可能会引起一些拒绝服务攻击。

    6. XSS蠕虫

            XSS蠕虫是指一种具有自我传播能力的XSS攻击,杀伤力很大。引发XSS蠕虫的条件比较高,需要在用户之间发生交互行为的页面,这样才能形成有效的传播。一般要同时结合反射型XSS和存储型XSS。

    7.XSS结合CSRF        

            CSRF(Cross-site request forgery)跨站请求伪造,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。这种攻击方式触发条件比较苛刻,需要用户在访问一个网页后(该网页的cookie等信息还未失效)访问攻击者布置的站点,此时用户会向之前访问的站点发送攻击者请求的信息,而服务器会认为这个请求是用户主动发送的,不会进行拦截,简单说就是骗取用户信任,向服务器发送恶意请求。

            XSS结合CSRF是攻击者常用的攻击方式,触发XSS的条件比CSRF的条件低的多,当用户触发了一个XSS后,该XSS可以指向用户布置的CSRF站点,从而达到恶意攻击的目的。

六、XSS攻击防护

    1.输入过滤

        对<a>、<img>等标签、onload、onerror等事件进行过滤,降低XSS风险

    2.编码

        对一些常见的符号,字符串编码类型,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。

    3.设置HttpOnly

        如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

XSS攻击的危害是巨大的,一直高居OWASP TOP10,XSS攻击主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,当然安全的软件开发流程及其他一些编程安全原则也可以大大减少XSS安全漏洞的发生。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343