XSS几种绕过
1.xss之htmlspecialchars
1.查看靶场
查看提示
2.htmlspecialchars()函数
-
语法:htmlspecialchars(string,flags,character-set,double_encode)
-
string:必须。规定要转换的字符串
-
flags:可选。规定 规定如何处理引号、无效的编码以及使用哪种文档类型。 注意:默认是仅编码双引号
-
character-set,double_encode: 可选。一个规定了要使用的字符集的字符串。
-
docble_encode: 可选。布尔值,规定了是否编码已存在的 HTML 实体。
-
更详细的文档在:https://www.w3school.com.cn/php/func_string_htmlspecialchars.asp
-
-
被转换的预定义的字符有
-
实例
-
实例1
把一些预定义的字符转换为 HTML 实体:
<?php $str = "Bill & 'Steve'"; echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号 echo "<br>"; echo htmlspecialchars($str, ENT_QUOTES);// 转换双引号和单引号 echo "<br>"; echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号 ?>
以上代码的 HTML 输出如下(查看源代码):
<!DOCTYPE html> <html> <body> Bill & 'Steve'<br> Bill & 'Steve'<br> Bill & 'Steve' </body> </html>
而在浏览器显示时:
Bill & 'Steve' Bill & 'Steve' Bill & 'Steve'
这也就是为什么我们输入的XSS语句显示出来的结果没改变的原因,其实在输入的时候就已经被判断,被改写了,查看网页源代码。
-
实例2:
把双引号转换为 HTML 实体:
<?php $str = 'I love "PHP".'; echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号 ?>
以上代码的 HTML 输出如下(查看源代码):
<!DOCTYPE html> <html> <body> I love "PHP". </body> </html>
以上代码的浏览器输出:
I love "PHP".
-
3.查看后端代码
4.绕过
思念变成海' onclick='alert(111)'
此时发现单引号没有被过滤,所以XSS被执行
5.我们加一个ENT_QUOTES试试,需要重启一下
此时点击发现被过滤了,查看
单引号已经被过滤了,只不过显示出来不明显而已。如何解决,进行接下来的靶场
2.xss之href绕过
1.查看靶场
没啥头绪。
2,查看靶场代码
使用了ENT_QUOTES,过滤了单引号,但是提示了我们,输出在a标签的href属性里面,从而可以利用此处漏洞执行JS,file,tel等伪协议
3.绕过
输入:
javascript:alert("思念变成海")
3.xss之js输出
1.查看靶场
输入“思念变成海”检查网页代码,输入被动态的生成到了前端代码中,构造闭合就可以执行了。
构造闭合
思念变成海'</script><script>alert("思念变成海")</script>
查看提示,输入tmac,图片显示,35秒13分是否也会闪现在你脑海前,时光一闪而逝啊!!!
2.查看源码
从源码不难看出,输入后判断是否是tmac,是的话就是加载那张图片。