前言
本文不是CTF WP系列 所以文中提到的全部内容均为非CTF真题
文中使用的在线XSS靶场:传送门
感谢渊龙Sec团队提供靶场
正文
Level-1
核心代码
<?php
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
<center><img src=level1.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
从GET
中name
键获取值并赋值给变量str
,未经任何过滤直接包含到<h2>
标签中进行输出
Payload
<script>alert("XSS")</script>
这里打入任意XSS Payload都可以执行
Level-2
核心代码
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
<center><img src=level2.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
从GET
中keyword
键获取值并赋值给变量str
此时str
变量被包含在htmlspecialchars
方法中输出
htmlspecialchars
方法用于将预定义字符转义成HTML实体
通过黑盒的方式同样可以发现这里输入的字符被转义
这里我们没办法直接打入标签Payload执行JS
我们发现在input
标签中同样包含str
变量,并被包裹于value
参数中
当我们输入">
对内容进行闭合后,原本的标签value
实际为空
后面我们填入一个新的标签则绕过了input value
作用域的限制
原标签
<input name=keyword value="">
插入Payload
<input name=keyword value=""> <img src="@" onerror=aler(123)> ">
实际上浏览器的兼容性很强,最终多出来的">
我们不需要管
Payload
"> <img src="@" onerror=alert(123)>
这里实际上是制造了一个错误的图片标签,然后使用事件触发器执行JS
Level-3
核心代码
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
从GET
中keyword
键获取值并赋值给变量str
同样str
变量被包含在htmlspecialchars
方法中输出
value
同样被实体化方法包裹
网上的WP大部分都是直接打入事件触发器Payload绕过实体化转义,但是没有解释为什么单引号没有被转义
实际上htmlspecialchars
方法的第二位传参支持传入如下三种实参
- ENT_COMPAT:会转义双引号
"
,但不会转义单引号'
- ENT_QUOTES:会同时转义单引号
'
和双引号"
- ENT_NOQUOTES:都不转义
如果仅传入一个参数,则为默认状态
默认状态为ENT_COMPAT模式
所以这里不会过滤单引号
Payload
' onclick='alert(123)
点击input
标签元素
未完待续…
笔者撰写到这已经很晚了 后续内容马上更新
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容