DVWA-XSS (Reflected) 反射性 XSS
作者:互联网
反射性XSS,是非持久性,也是最常见的XSS,通过解析传入前段页面,常见为交互式输入框
LOW
审计源码
<?php
// 发送请求头
header ("X-XSS-Protection: 0");
// 判断是否传入是否通过 name 键名传参
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 将 name 传入的内容输入到页面
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
没有对传参name
进行任何过滤,所以可以直接进行弹窗
<script>alert(document.cookie)</script>
成功获取cookie
反弹cookie可以去看我的另一篇博客,DVWA-XSS (DOM) DOM型跨站脚本攻击
Medium
审计源码
<?php
// 设置请求头
header ("X-XSS-Protection: 0");
// 判断是否传入 name 键名,和 name 的值是否为空
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 获取传入的 name值
// str_replace 替换 <script> 为空
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// 将name 传参内容输入到页面
echo "<pre>Hello ${name}</pre>";
}
?>
这里将我们传入的<script>
脚本标签转为了空,根据str_replace
函数的特性,只会进行一个过滤,所以可以进行双写绕过
<scri<script>pt>alert(document.cookie)</script>
成功弹窗
High
审计源码
<?php
// 设置请求头
header ("X-XSS-Protection: 0");
// 判断 name 是否传承那
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 获取传入的内容
// 使用 preg_replace 进行正则匹配
// /.../之间的内容为正则匹配语法
// .匹配除了换行的任意字符
// * 匹配前面表达式零次或者多次
// .* 就是匹配任意字符
// /i 不区分大小写
// 对 <script> 标签进行了严格的过滤
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// 将 name 输入到页面
echo "<pre>Hello ${name}</pre>";
}
?>
对<script>
标签进行了严格的过滤,可以使用<img />
自src
自加载特性,进行弹窗
<img src=1 one rror='alert(document.cookie)' />
成功弹窗
Impossible
审计源码
<?php
// 判断是否传入 name
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 检查 user_token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 获取传入的 name
// htmlspecialchars() 函数会对 html 标签进行实例化
$name = htmlspecialchars( $_GET[ 'name' ] );
// 将 name 输入到页面
echo "<pre>Hello ${name}</pre>";
}
// 生成user_token
generateSessionToken();
?>
可以看到,XSS也是非常容易防护的,只需要使用htmlspecialchars函数
对html标签进行实例化即可
标签:XSS,name,Reflected,DVWA,源码,cookie,Hello,弹窗 来源: https://www.cnblogs.com/Junglezt/p/16336667.html