本文最后更新于3 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
第五关,超链接标签和伪协议
查看level5.php的核心代码并分析

(1)统一转小写
这里主要用了strtolower(),限制了大小写混淆来进行绕过,例如:
<sCripT>
(2)破坏关键字
18行,19行代码,str_replace(),会将<script,替换为:<scr_ipt,导致常规payload会失效.
将on替换为o_n,导致所有事件监听属性失效(如onclick、onerror、onload、onfocus)
(3)漏洞点
①、在代码中,“和>,并没有被htmlspecialchars()转移或者过滤,输出直接拼接在<input>标签的value属性中。
补充:htmlspecialchars()
这是PHP中用于防范XSS的内置函数
作用是将HTML的特殊预留字符转换为对应的HTML实体,从而让浏览器把这些字符当成纯文本。例如“ -> "
后端使用的htmlspecialchars(),仅仅只是把<h2>标签里的字符进行了转义,并没有对<input>标签里面的$str3进行转义。

②、没有过滤<a>标签和javascript:,伪协议。
(4)解题方法
①、闭合<input>标签,注入<a>标签(超链接标签)
“><a href=”javascript:alert()”>click</a><“
超链接标签格式
<a href=”URL”>链接文本</a>
在输入框输入后,点击搜索,最后点击出来的click超链接
或者直接构造一个URL
http://127.0.0.1/xss-labs/level5.php?keyword=“> <a href=”javascript:alert(1)”>click</a><“









