0
点赞
收藏
分享

微信扫一扫

3-11xss之htmlspecialchars绕过演示

mafa1993 2022-04-29 阅读 138

我们这篇文章,说一下php里面用的比较多的一个方法,那就是htmlspecialchars()函数

xss关键防范措施其中一个关键的地方,就是我们在输出的时候,要做前端实体的转义

XSS绕过-关于htmlspecialchars()函数

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符是:

 & (和号)成为 &amp
 " (双引号)成为 &quot
 ' (单引号)成为 &#039
 < (小于)成为 &lt
 > (大于)成为 &gt

可用的引号类型:

ENT_COMPAT - 默认。仅编码双引号。

ENT_QUOTES - 编码双引号和单引号。

ENT_NOQUOTES - 不编码任何引号。

$ok=htmlspecialchars($_GET['message'])

默认情况下,不会对单引号进行编码,因为单引号不是html前端实体里面,一个规范的编码,所以说,他不会对单引号进行处理的,当我们输出点比较特殊的话,虽然我们用了htmlspecialchars()处理,但是仍然可能出现xss漏洞

做修复的时候,如果是php语言,里面涉及这么个方法,或者是其它语言,我们一定要搞清楚,它这个方法是不是够全面,我们这里选择ENT_QUOTES

案例演示

我们切换到xss之htmlspecialchars项目里面,还是按照我们之前常规的思路,

"'<>&1111

在这里插入图片描述

我们看一下源码

在这里插入图片描述

我们可以看到输出点是在我们,a标签的href里面,我们看到这里出现了很多html实体的符号,也就是说htmlspecialchars会对我们相关的内容进行编码,我们可以双引号,左右尖括号,&都被进行了编码,单引号没有进行处理,这个地方就是用了默认的htmlspecialchars来做后端的过滤,这个时候,我们可以构造一个payload进行过滤,

q' onclick='alert(111)'

单引号就是把前面的单引号闭合掉,后面去输一个onclick,这个onclick是可以被执行的,因为这个单引号没有做处理,它仍然是一个生效的单引号

在这里插入图片描述

我们onclick一下

在这里插入图片描述

这就是它后端处理的一个输入,我们可以看一下后端的代码

在这里插入图片描述

它会对接入的数据进行处理,通过htmlspecialchars做处理,处理完之后,它就在a标签里面输出了,

$message=htmlspecialchars($_GET['message']);

它这个地方用的是默认的方法,它并没有在后面指定对单引号和双引号,都做处理,所以说,产生了这个问题

举报

相关推荐

0 条评论