xss-labs(1-5)

level-1 简单触发
构造<script>alert(1)</script>,直接弹窗说成功了,这是为什么呢?

看看源代码,对于提交的name没有任何限制,直接输出到页面上,所以导致弹窗.

level-2 ">闭合input标签
在搜索框中输入<script>alert(1)</script>看看效果

没有弹窗?

前端代码也没有发现特别的东西

进行代码审计看看,使用了htmlspecialchars($str)函数

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
- & (和号)成为 &
- " (双引号)成为 ""
- ' (单引号)成为 '
- < (小于)成为 <
- > (大于)成为 >
突然间无从下手了
又回去看了看前端源码,发现<input可以闭合

构造"><script>alert(1)</script>

level-3 '绕过html编码并闭合value
根据提示,突破点应该在搜索框上

查看前端源码,<input也可以闭合

构造"><script>alert(1)</script>,很遗憾失败了

看看源码
输入框中的字符也被转义成实体了,闭合方法失效了

htmlspecialchars($str)函数默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!
可用的引号类型:
- ENT_COMPAT - 默认。仅编码双引号。
- ENT_QUOTES - 编码双引号和单引号。
- ENT_NOQUOTES - 不编码任何引号。
所以单引号可以绕过htmlspecialchars()函数
使用事件触发器尝试绕过一下,比如onchange, onclick, oninput等等
以下均可绕过
'onclick='alert(1) //点击以后触发时间
'onclick=alert(1)空格'
'oninput='alert(1) // 当要在input中输入内容时触发事件
'oninput=alert(1)空格' 同上
'onchange='alert(1) // 发生改变的时候触发该事件
'onchange=alert(1)空格' 同上
'onmouseover='alert(1)//移动到区域时触发该事件
'onmouseover=alert(1)空格'
绕过成功

level-4 "闭合value
闭合标签没用了,试试事件触发'onclick='alert(1),还是不行

看看源码

他把尖括号给替换成空格,在value中用的双引号,但是没有用htmlspecialchars($str)函数从而导致输入"不会被实体转义,因此可以用"闭合value,然后触发弹窗
"onclick="alert(1)成功

level-5 过滤<script和on
试试前面几题的payload,都不行
'onclick='alert(1)点击搜索后,它自动把onclick换成了on_click,有带奇怪哦

看看源码

它把on,<script替换了,导致语句不能执行
这意味着并没有对script过滤,构造一个只有单词script的语句:"><a href=javascript:alert(1)>xss</a>

点击xss即可弹窗


浙公网安备 33010602011771号