反射型xss(get)
我们直接输入,成功弹出xss
反射性xss(post)
首先从前端代码看到账号密码是admin/123456
输入
弹窗成功
存储型xss
查看后端代码
判断message是否存在,并且 message不为空
进行了转义,防止sql注入
插数据库的时候,做了对应的转义,防止数据库的注入 ,把massage 插入到表中存储到数据库中
后面的一句代码$query=“select * from message”;将存储的留言都显示出来
虽然但是也是没有进行过滤的,还是直接
直接输入
弹窗成功,并且每次我们打开这个网页都会跳出这个弹窗,说明是持久化的,直到把这个留言删除为止
DOM型XSS
查看源代码
getElementById 获取标签 id 为 text 的值传递给 str,str 通过字符串拼接到 a 标签中。如果这样的话,那我们输入的内容都会被当作字符串处理,无法实现功能。
我们键入的内容会被字符化于 a 标签的 href 属性中,所以我们要闭合 < a >这个标签。而href这个属性用于规定链接的目标。而这个目标会被“自动”加上双引号(类比字符型注入,自动加上单引号),不用管,我们要闭合的是前面的 <’
自然而然想到用 '>进行闭合了,我们可以使用 '><img src=“#” οnmοuseοver=alert(‘xss’)>,这样 str 传到后端拼接,就成了
<img src=“#” οnmοuseοver=alert(‘xss’)>what do you see?
当鼠标移动到图片上就会触发弹窗
xss之过滤
查看后端代码
发现对<script 进行了过滤,我们试试大小写,成功弹出xss
xss之hrmlspecialchars
查看后端代码
输入看看
发现 " < > 都进行了html实体转码,但是没有对 ’ 进行实体转码,可以使用单引号构造 payload,可以输入’ οnclick='alert(/xss/)(这边不要写成alert(‘xss’) ,引号匹配错误),这样后端就成了,第一个单引号闭合href属性的双引号,第二个单引号闭合href属性的闭合双引号
xss之href输出
查看后端代码
同样 message 也经过了 htmlspecialchars 的实体转义
输入看看
这次发现单引号也被转义掉了。我考虑在a标签的 href 属性里面,可以使用 javascript 协议来执行js,尝试使用伪协议绕过。
此处输入javascript:alert(/xss/),点击即可弹窗