Pikachu靶场:XSS之htmlspecialchars、href输出以及js输出
实验环境以及工具
Firefox浏览器、Burp Suite、Pikachu靶场
实验原理
htmlspecialchars()函数把预定义的字符转换为HTML 实体。
预定义的字符是:
&(和号)成为&
”(双引号)成为"
'(单引号)成为'
‘’< ‘’(小于)成为<
‘’> ‘’(大于)成为 >
可用的引号类型︰
ENT_COMPAT -默认。仅编码双引号。
ENT_QUOTES -编码双引号和单引号。
ENT_NOQUOTES -不编码任何引号。
href是标签中的超链接,点击后会访问目标链接。
具体步骤
XSS之htmlspecialchars
1.找到注入点进行输入尝试
在源码中进行查找
发现输入的特殊字符被转化为了HTML实体编码,但是单引号没有被转换。
2.尝试绕过
利用单引号尝试构造payload
1'onclick='alert(123)'
XSS之href
1.找到注入点进行输入尝试
进入原码查找
那么可以尝试用JavaScript协议来执行js语句。
2.进行注入
构造payload
javascript:alert(123)
XSS之js输出
1.找到注入点进行输入尝试
在源代码中查看
发现一段js代码,输入的内容赋值给了一个变量$ms,那么可以尝试构造闭合实现我们输入的js代码。
2.尝试注入
构造payload
x'</script><script>alert('123')</script>
总结
只用htmlspecialchars进行过滤,会留下单引号没有被转换。利用单引号依然可以做出相应的攻击。
在a标签的href中可以利用JavaScript协议执行js语句。在有输入接口,并且将输入内容直接赋值给变量的,可以构造闭合来执行恶意js代码。