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

时间: 2017-12-02阅读: 1644标签: 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.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

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

关闭

选择学习Web前端开发的理由

在互联网的影响下,移动互联网产业的发展也突飞猛进,越来越多的企业开始攻击移动互联网的大蛋糕。根据可靠的数据分析,中国对开发商的需求高达200万人,而且数据仍在改善。

Web前端知识体系精简

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

如何迁移Flutter项目到Flutter Web?

这篇简单介绍下怎么将一个现有的 Flutter 项目转成 Flutter Web 项目。开始之前先浇一盆冷水,我们理想中的一套代码、多端运行的愿望是要破灭了,至少目前版本的 Flutter Web SDK 是没法做到的

web开发-前后端分离原理

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

移动Web深度剖析

随着前端技术的急速发展,随着互联网行业的日益发展,HTML5作为一种比较新型的开发技术早已经被很多大的企业所应用,通过HTML5语言可以开发适用于任何设备上的酷炫网站页面

Web标准

Web标准不是某一个标准,而是由W3C和其他标准化组织制定的一系列标准的集合。主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。

Web前端开发的应用和前景:web 1.0到web 3.0

web3.0时代,前端做着前端的工作,尽自己可能去在多端的世界去为用户体验努力,后端去做着后端的工作,去更好的处理数据,利用人工智能?利用爬虫?将数据充分的使用,为用户分析数据,给予用户最想要的数据。

web负载均衡,几种常见负载均衡比较

当一台服务器无法支持大量用户访问时,将用户分摊到两个或多个服务器上的方法叫负载均衡。负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力。根据实现的原理不同,常见的web负载均衡技术包括:DNS轮询、IP负载均衡和CDN等

Web前端十种常用的技术

Web前端应用十种常用技术,随着JS与XHTML的应用普及,越来越多的web界面应用技术出现在网站上,比如我们常见的日历控件,搜索下拉框等,这些web界面应用技术大大的丰富了网站的表现形式

关于渐进式 Web 应用,你应该知道的一切

渐进式 Web 应用是利用现代浏览器的特性,可以添加到主屏幕上,表现得像原生应用程序一样的 Web 应用程序。

点击更多...

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