htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
可用引号类型
首先打开pikachu的XSS之htmlspecialchars,按照xss漏洞测试流程,先输入一段特殊字符‘"<>6666,
接着查看页面源码,搜索到我们之前输入的特殊字符中的唯一识别字符
可以看到输出点的a标签里,我们输入的特殊字符被htmlspecialchars函数转化成了PHP的实体编码
但是单引号没被编码,说明后端用的默认的htmlsspecialchars函数做处理
接着我们可以利用单引号来构造一个payload ‘ onclick=‘alert(111)‘ 输入到页面中,点击提交,成功弹窗
在pikachu的XSS之href页面中随意输入一些字符,然后打开页面源码可以看到我们输入的内容由href输出还被转义编码了
接着我们查看后端代码可以看到当我们输入的网址不是百度的网址时,它会通过htmlspecialchars函数进行处理,而ENT_QUOTES函数则会对单引号、双引号等特色字符进行转义处理
因为a标签的href属性是可以使用JavaScript协议执行JS代码的,所以我们可以构造一个没有转义字符的payload来进行绕过 javascript:alert(111)
可以看到整个payload里面是没有那些特殊字符的,输入payload点击提交,成功弹窗
herf输出做防御的两个逻辑
再进行htmlspecialchars处理,把特殊字符给处理掉
首先打开pikachu的xss之js输出页面,随意输入一段字符,查看页面源码可以看到我们输入的内容被放到js中输出了
接着我们来根据前端js代码来构造相应的闭合payload aaa‘</script><script>alert(‘xss‘)</script>
将这段payload输入提交,成功弹窗
总的原则:输入做过滤,输出做转义
Web安全之XSShtmlspecialchars,href输出,js输出
原文:https://www.cnblogs.com/DxyG/p/13377518.html