pikachu靶场-XSS跨站脚本-xss之htmlspecialchars – 作者:知非知非知非

1626307729_60ef7c911aa0c9fbf29c1.png!small

1626307736_60ef7c980279298afb428.png!small

我们通过查看源代码,可以发现输入的信息在发下的位置!!!

1626307743_60ef7c9f553d1a4798c30.png!small

小知识:

htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数

预定义的字符是

& 成为 &amp

” 成为 &quot

‘ 成为 &#039

< 成为 &lt

> 成为 &gt

可用引号类型

ENT_COMPAT:默认,仅编码双引号

ENT_QUOTES:编码双引号和单引号

ENT_NOQUOTES:不编码任何引号

这个,我们通过输入信息在源代码中的显示,构造一个PAYLOAD:

如下:

nidongwo”><img src=”#” onmouseover=”alert(‘xss’)”>

回显是这样的!!!

1626307757_60ef7cad71c2095203889.png!small

没弹!!接着我们查看源代码!!!!

1626307763_60ef7cb3e8fe842703c46.png!small

如果htmlspecialchars()生效了,这个就有点奇怪了?

PAYLOAD:nidongwo”><img src=”#” onmouseover=”alert(‘xss’)”>

转换后的数据:nidongwo”><img src=”#” onmouseover=”alert(” xss’)”>;=””

看不懂啊!!!

看了大佬的写法,转换后输出的结果

比如双引号,会生成&quot加分号,

比如大于号,会生成&gt加分号!

太乱了,看不懂!!!

我们这里直接查看源代码吧?

核心代码在这!!!

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)’

1626307777_60ef7cc1bc82fa870622a.png!small

源代码是这样!!!

1626307783_60ef7cc7e28349221de73.png!small

来源:freebuf.com 2021-07-15 08:10:32 by: 知非知非知非

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享