反射型XSS:攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器响应包含恶意代码的页面,并在客户端执行。例如服务器后端存在PHP代码echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';,参数name传入js代码后,则会在服务器生成恶意页面,然后返回给客户端执行
存储型XSS:攻击者通过网页的留言、评论等交互处将恶意代码注入到服务器数据库中,用户请求后响应包含恶意代码的页面
DOM型XSS:攻击者构造一个参数包含恶意js代码的URL,诱骗用户点击,用户访问后向服务器发送请求,服务器的响应并不包含恶意代码,而是URL中的代码直接在本地浏览器由js执行。例如下面的html页面,当URL的参数a传入js恶意代码后,会直接被html内嵌的js代码写入到html中,并不需要经过服务器的处理
Fuzz字典
Level1:
Level2:
查看源码发现输入的值赋给了input标签的value,所以使用语句"><script>alert('1')</script>
闭合掉标签
Level3:发现输入之前的语句会被更换为html实体,确认后端代码使用了htmlspecialchars()进行了特殊处理。所以给input这个标签添加事件'onclick=javascript:alert(1);'就可以完成xss
Level4:使用上一关语句发现需要使用双引号闭合"onmouseover="alert(1);
Level5:
"onmouseover="alert(1);和<script>alert(1);</script>都被做了过滤
使用a"><a href=javascript:alert(1)>123</a>点击出现的链接即可通关
浏览器解析机制:
先进行html解析,解码html编码,然后进行url解析解码url编码,最后识别<script>标签进行js解析,解码unicode编码。
标签textarea和title里面不能有新标签。
Js中的关键标识符比如’和()不能用unicode表示。