源代码:
可以看到是用htmlspecialchars 对get参数message进行处理,但是他默认不对单引号进行处理的。
只对预定义的字符进行处理:
& (和号)成为 &" (双引号)成为 "' (单引号)成为 '< (小于)成为 <> (大于)成为 >
它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。ENT_QUOTES - 编码双引号和单引号。ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!
如果我们的源码是:htmlspecialchars($message, ENT_QUOTES),
这个时候才用我们的payload 就不行了,单引号被转义了。
payload:
输入: ' οnclick='alert(111)' 点击触发xss
输入:' οnmοuseοver='alert(1) 触发xss
输入: ' οnmοuseοver='javascript:alert(1)' 触发xss
转载于:https://www.cnblogs.com/kuaile1314/p/11373374.html