XSS全解析—初探

前些时间准备面试的时候一直会遇到这个XSS,寥寥几句话好像很简单,后来看到同窗的《XSS跨站脚本攻击剖析与防护》这本书,稍微翻看了一下,其中的学问仍是挺多的。这系列的文章就当作读书笔记吧。javascript

什么是XSS

听过不少道理,固然不少人都已经知道XSS是个啥,跨站脚本(Cross-Site Scripting),因为它前面有个老大哥CSS摆在那儿,就只能叫XSS了。官方是这么说的"A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same-origin policy."“一种可能会被攻击者用来 经过 好比同源策略 来获取用户权限的跨站脚本。”
通俗点来讲,好比你在浏览百度的时候,假设百度没作任何安全策略(固然这是不可能的),攻击者对百度的登录按钮作了点修改,你登录的时候,它把你登录的信息都发送到攻击者那儿去了,GG,2个T的学习资料没了。这还算好的,给你的花旗银行网站来个这玩意,2个亿没了。php

XSS的分类

反射型XSS

也叫作非持久性、参数性跨站脚本,顾名思义,攻击者制做了一个含有恶意代码的url,好比java

http://www.test.com/search.ph...="><script>alert("xss")</script>
(这个算恶意比较小的,要是在里面获取你的cookie程序员

而后攻击者给你发了个连接,“大胸妹妹正在直播,邀请您观看。”
图片描述面试

你们能够搭个DVWA本身玩一下嘛,别的漏洞也有,就是别用过高级的浏览器,这时候深恶痛绝的IE就该上场了,时候表演真正的技术了。
“我不服,就这URL我还不一眼就看出来有毛病?”
“http%3A//www.test.com/search.php%3Fkey%3D%22%3Cscript%3Ealert%28%22xss%22%29%3C/script%3E%22,继续装逼。”shell

持久型XSS

至关于存储型跨站脚本。

来看看有什么效果(想一想还有点小激动呢)
数据库

固然了这不是你的锅,但若是这个网站是你搭的,那你等着GG吧。若是这个玩意儿一直没有被搞掉,而攻击者给你来了10000个这样的评论,每一次刷新后都会来10000下,想一想会发生什么吧。编程

XSS构造剖析

绕过XSS-Filter

固然大部分的程序员儿是不会像我这么挫的,正常状况下基本都会在Web应用中设计一个XSS Filter,一些白名单、黑名单什么的来过滤掉大胸妹。那有没有能过滤掉全部大胸妹的Filter呢?sorryno.jpg浏览器

咱们有不少绕过Filter的方法:安全

1)利用<>标记注射代码

前面咱们写的大胸妹,哦不是,代码都是这样的,很少说了。

2)利用HTML标签属性执行XSS

<table background="javascript:alert(/XSS/)"></table>
<img src="javascript:alert('XSS')">;

这玩意儿呢对咱们这些使用Canary、Nighty的人来讲是没有任何威胁的?,固然对一些非功能须要还在使用IE6的山顶洞人仍是有点威胁的。

3)空格回车Tab

加入你在你的黑名单里加了'javascript',而后说这下没办法来写脚本了吧。对不起,没用。
<img src="java script:alert('XSS')">再次GG。这玩意儿涉及到一点js和浏览器引擎解析的问题。咱们知道

var a = daxiongmei
var b = "kan na ge daxiongmei"

这样虽然没有分号不像咱们这些规范的程序员的编程习惯,但它是没毛病的并且很Geek,那这样呢?

var a 
= 'kan na ge daxiongmei;
alert(a);

也是能够的!由于引擎并不会把换行符当作一个完整语句的终点(上面的能够是由于引擎已经意识到一个完整的语句了),它会继续处理后面发现的内容,知道一个分号出现或者这个语句变成一个完整的语句。

4)对标签属性值转码

那我处理输入的时候.split(" ").join("")行了吧,对不起仍是不行。
还记得大写字母A的ASCII码是多少吗,不记得先向你的老师说声对不起又还给您了。
说正事,HTML是支持ASCII码形式的。咱们把上面的代码换成这样。

<img src="javascrip&#116&#58alert("XSS")>;

GG
因此最好把这些字符也给过滤了吧。

5)产生本身的事件

这个和上面的第二点有点相似,只不过此次把属性换成事件,像这样:

<img src="#" onerror=alert(/xss/)>

onerror换成onclick,onblur什么都是能够的。

6)利用CSS跨站

CSS也能够用来跨站,想的起来是什么吗?方式还挺多的

<div style="backgroun-image:url(javascript:alert('XSS'))"></div>

或者用@important引入,引入文件写个xss,就是这么简单。你说咱们名字简写都同样的,相煎何太急呢。

利用字符串编码

其实以前咱们已经几回提到了用字符串编码来绕过Filter的方法,因为js支持Unicode、escapes、十六进制、八进制等编码,还有不少加密编码,防止XSS变得很麻烦,心累。

拆分跨站法

可能有的同窗要想好事儿了,你每次攻击我都要写那么长的代码,我限制你个字符输入字数为好比30个不就好了吗,你写两个script标签都要17个字符了。Naive

<script>z='document.'</script>
<script>z=z+'write('</script>
...
<script>eval(z)</script>

GG

Shellcode的调用

有几个概念咱们先来了解一下。
【Shellcode】
这玩意儿呢一开始是指溢出程序和蠕虫病毒的核心,其实看单词就能看出来了,就是一个利用漏洞执行时的代码。在咱么这儿呢,就是指XSS利用代码。
【Exploit】
翻译:利用。这玩意我我不知道怎么解释,“一般表示完整编写好的漏洞利用工具”,总之记住Exploit每每包含了Shellcode。
payload、shellcode、exp、poc怎么区别?
【POC】
Proof of Concept,是一段证实漏洞存在的程序代码片断。

动态调用远程JavaScript

其实这和JSONP有点相似,在url后面跟个script标签,标签里引入远程的js文件,这文件不是个好东西,恩差很少就是这样。

使用window.location.hash

知道location.hash获取什么吗?好比咱们有个url:http://domain/#admin, location.hash获取的就是'#'后面的东西,这里就是admin。那location.hash怎么用到咱们的XSS里面呢?

http://www.bug.com/veiw.php?sort="><script>eval(location.hash.substr(1))</script>#alert('xss')"

应该都能看懂我就很少说了啊。

XSS Downloader

介绍另一种存储和调用Shellcode的方法,把它存储到网站的数据库中个,而后再把它下载下来执行。简单说呢,就是咱们写了个XSS的下载器,把这个下载器放在网站的某个页面,再用Ajax什么的来向这个网站发送请求,执行了返回的数据,返回的是啥?Shellcode。

备选存储技术

浏览器的存储技术有哪些?相信通过校招的同窗都应该不陌生。Cookie、Flash、UserData、localStorage等。既然这些玩意儿都能存储数据,那Shellcode呢,固然也能够。


好了第一章就到此结束了。原本说的只用1天完成的,没想到各类事儿拖了两天,enjoy。固然确定大部分都不enjoy的,欢迎提意见。

相关文章
相关标签/搜索