我们通过查看源代码,可以发现输入的信息在发下的位置!!!
小知识:
htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
& 成为 &
” 成为 "
‘ 成为 '
< 成为 <
> 成为 >
可用引号类型
ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号
这个,我们通过输入信息在源代码中的显示,构造一个PAYLOAD:
如下:
nidongwo”><img src=”#” onmouseover=”alert(‘xss’)”>
回显是这样的!!!
没弹!!接着我们查看源代码!!!!
如果htmlspecialchars()生效了,这个就有点奇怪了?
PAYLOAD:nidongwo”><img src=”#” onmouseover=”alert(‘xss’)”>
转换后的数据:nidongwo”><img src=”#” onmouseover=”alert(” xss’)”>;=””
看不懂啊!!!
看了大佬的写法,转换后输出的结果
比如双引号,会生成"加分号,
比如大于号,会生成>加分号!
太乱了,看不懂!!!
我们这里直接查看源代码吧?
核心代码在这!!!
if(empty($_GET[‘message’])){
$html.=”<p class=’notice’>输入点啥吧!</p>”;
}else {
//使用了htmlspecialchars进行处理,是不是就没问题了呢,htmlspecialchars默认不对’处理
$message=htmlspecialchars($_GET[‘message’]);
$html1.=”<p class=’notice’>你的输入已经被记录:</p>”;
//输入的内容被处理后输出到了input标签的value属性里面,试试:’ onclick=’alert(111)’
// $html2.=”<input class=’input’ type=’text’ name=’inputvalue’ readonly=’readonly’ value='{$message}’ style=’margin-left:120px;display:block;background-color:#c0c0c0;border-style:none;’/>”;
$html2.=”<a href='{$message}’>{$message}</a>”;
看了半天,主要的问题就是htmlspecialchars这个函数默认不对单引号处理!!
所以给定的PAYLOAD为‘ onclick=’alert(111)’
源代码是这样!!!
来源:freebuf.com 2021-07-15 08:10:32 by: 知非知非知非
请登录后发表评论
注册