[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

news2024/11/26 22:49:38

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

    • XSS(Reflected)-low level
      • 源代码
      • 姿势
    • XSS(Reflected)-medium level
      • 源代码
      • 姿势
        • 1.双写绕过
        • 2.大小写绕过
    • XSS(Reflected)-high level
      • 源代码
        • str_replace函数
      • 姿势
    • XSS(Reflected)-Impossible level
      • 源代码
      • 代码审计
    • 总结

免责声明:本文仅分享XSS攻击相关知识,不承担任何法律责任。
DVWA请读者自行安装,本文不再赘述。


XSS(Reflected)-low level

源代码

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?> 

无任何过滤 可实施XSS注入

姿势

先提交name1
浏览顶部URL栏发现为GET请求
在这里插入图片描述
Payload:GET<script>alert("qiu")</script>

在这里插入图片描述


XSS(Reflected)-medium level

源代码

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = str_replace( '<script>', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello {$name}</pre>";
}
?> 
使用 str_replace() 函数将 <script> 标签替换为空

姿势

1.双写绕过

Payload:<scri<script>pt>alert("qiu")</script>
由于str_replace() 函数将<script>标签替换为空,且str_replace函数仅执行一次
Payload将变为<script>alert("qiu")</script>,从而实现了正常XSS语句的注入
在这里插入图片描述

2.大小写绕过

在 PHP 中,变量名、函数名、常量名等标识符都是区分大小写的。
例如,$Qiu$qiu 是两个不同的变量
因此我们可构造Payload如下来绕过限制:
Payload:<Script>alert("qiu")</script>
在这里插入图片描述<sCript>alert("qiu")</script><ScRIpt>alert("qiu")</script>均可


XSS(Reflected)-high level

源代码

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello {$name}</pre>";
}

?> 

str_replace函数

preg_replace 是 PHP 内置的一个函数,用于使用正则表达式对字符串进行搜索和替换。其语法如下:

preg_replace($pattern, $replacement, $subject);

其中:

  • $pattern:表示正则表达式模式,用于指定需要搜索的规则;
  • $replacement:表示替换后的字符串,可以是字符串、数组或回调函数等;
  • $subject:表示输入的字符串,需要进行搜索和替换的目标字符串。

preg_replace 函数会在 $subject 中搜索符合 $pattern 的子串,并将其用 $replacement 进行替换。如果 $pattern 中包含捕获分组,可以在 $replacement 中使用 $n ($n 表示第 n 个捕获分组)的形式来引用捕获的内容。

下面是一个使用 preg_replace 函数过滤 HTML 标签的简单示例。

$str = "<p>这是一段<b>加粗</b>的文本。</p>";
$pattern = "/<[^>]*>/";
$replacement = "";
echo preg_replace($pattern, $replacement, $str);

上述代码中,定义了一个包含 HTML 标签的字符串 $str

接着,使用正则表达式 $pattern 匹配其中的标签内容,即 /<[^>]*>/ 表示匹配任意以 < 开头,以 > 结尾的字符串。

然后,将匹配到的标签内容,即<p><b></b></p>用空字符串 $replacement 进行替换,即删除所有标签。

最后,使用 preg_replace 函数输出过滤后的字符串,即不包含 HTML 标签的纯文本内容。结果如下所示:

这是一段加粗的文本。

.* 是正则表达式中的一个元字符组合,表示匹配任意数量的任意类型字符。其中.表示匹配任意一个字符,* 表示匹配该字符的数量是 0 到无限个。

例如,a.*b 表示匹配以字母 a 开始,以字母 b 结尾的字符串,并且两端之间包含了任意数量的字符。如 acbcaba-&^%$#@!b 等等都是符合这个正则表达式的字符串。


正则表达式 /<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i 中的 /i 表示忽略大小写。
例如,如果输入的字符串中存在如下标签:

<Script></Script>

那么在未加 /i 修饰符时,由于标签名中大小写混合,<Script>无法被/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i完全匹配,因此不会被过滤掉。而当我们加上 /i 修饰符后,就可以忽略大小写,将其正确地匹配并过滤掉。


正则表达式/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i表示匹配包含任意字符的 <script 标签。使用 preg_replace() 函数时,将会过滤所有以<开头、以t结尾的字符串
例如,以下的字符串均可被上述正则表达式匹配到:

<script></script>
<Scri<script>pt></scriUIXpt>
<SCCRIRIPPTTTTTt></scriIIOpt>

如果正则表达式为/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t(.*)>/i,则会过滤所有以<开头,以>结尾的字符串


姿势

切换XSS语句的标签即可绕过限制
Payload:<img src=1 onerror=alert("qiu")>,注入成功:
在这里插入图片描述


XSS(Reflected)-Impossible level

源代码

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello {$name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

代码审计

  1. 检查是否存在名为 name 的 GET 参数,并且该参数不为空;
  2. 使用 checkToken() 函数对用户提交的 Anti-CSRF token 进行验证,通过比对 $_REQUEST['user_token']$_SESSION['session_token']的值,防止跨站请求伪造攻击(CSRF);
  3. 使用 htmlspecialchars() 函数对用户输入的 name 参数进行 HTML 实体编码,以避免客户端 JavaScript 的执行和 XSS 攻击;
  4. 输出经过处理的 name 参数,同时包裹在<pre></pre>标签中,使其能够以预格式化的方式显示,提升了输出信息的可读性。

另外,在该代码中也出现了一些与 CSRF 防御相关的函数调用:

  • generateSessionToken() 函数用于产生随机的 Session Token,用于 CSRF 防御中防止攻击者利用各种手段获取到合法的 token 值;
  • checkToken() 函数用于验证用户提交的 Anti-CSRF token 是否合法。在其中,会比对用户提交的 token 值和服务器端存储的 token 值是否一致,如果不一致,则将会触发防御机制。

总结

以上为[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集,读者可躬身实践。
后续将分享[网络安全]DVWA之XSS(Stored)攻击姿势及解题详析合集
我是秋说,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssh正反隧道(代理msf对icmp穿透监听)

ssh正向隧道&#xff1a; 就是将本地端口映射到远程上&#xff0c;相当访问本地端口就是访问远程的端口 正向 访问本地对应的是远程的端口 ssh -fNCL 本地ip:本地port:远程ip:远程port 用户远程ip/域名 实例&#xff1a; ssh -fNCL 192.168.222.128:90:192…

HTML的表单

前后端交互过程&#xff1a; 表单在 Web 网页中用来给访问者填写信息采集客户端信息&#xff0c;使网页具有交互的功能&#xff0c;用户填写完提交后&#xff0c;表单的内容就从客户端的浏览器传送到服务器上&#xff0c;经过服务器上程序处理后&#xff0c;再将用户所需信息传…

人机大战?——带你玩转三子棋(C语言)

TOC 1、前言 在学习完数组之后&#xff0c;我们就可以自己来实现一个简单游戏—三子棋了&#xff01; 为了确保程序的独立性&#xff1a;我们创建了一个源函数game.c 和test.c&#xff0c;一个头文件game.h test.c——测试游戏 game.c——游戏函数的实现 game.h——游戏函数…

Redis缓存数据库(三)

目录 一、概述 1、Redis架构 2、AKF 3、CAP原则 一、概述 1、Redis架构 Redis 有哪些架构模式&#xff1f;讲讲各自的特点 单机版 特点&#xff1a;简单 问题&#xff1a; 1、内存容量有限 2、处理能力有限 3、无法高可用。 主从复制 Redis 的复制&#xff08;replic…

python绘制散点图|散点大小和颜色深浅由数值决定

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

【嵌入式系统应用开发】FPGA——HLS入门实践之led灯闪烁

目录 1 HLS1.1 HLS简介1.2 HLS与VHDL/Verilog1.3 HLS优点与局限 2 环境配置3 HLS实例——Led点亮3.1 工程创建3.2 添加文件3.3 C仿真与C综合3.4 创建Vivado工程3.5 导入HLS生成的IP核3.6 添加实验代码3.7 编译生成获取结果 总结 1 HLS 1.1 HLS简介 HLS(High Level Synthesis)…

十大排序算法(上)直接插入排序、希尔排序、直接选择排序、堆排序

&#x1f308;目录 1. 排序的概念2. 常见的排序算法3. 排序算法的实现3.1 插入排序3.1.1 直接插入排序3.1.2 希尔排序&#xff08;缩小增量排序&#xff09; 3.2 选择排序3.2.1 基本思想3.2.2 直接选择排序3.2.3 堆排序 1. 排序的概念 排序&#xff0c;就是使一串记录&#xf…

阿里通义千问_VS_讯飞星火

今天终于获得阿里通义千问大模型体验授权&#xff0c;第一时间来测试一下效果&#xff0c;使用申请手机号登录&#xff08;地址&#xff1a;https://tongyi.aliyun.com&#xff09;后&#xff0c;需要同意通义千问大模型体验规则&#xff0c;如下图所示&#xff1a; 同意之后就…

【C++初阶】类与对象(中)之运算符重载 + 赋值运算符重载

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

CPU性能优化:Cache

CPU性能提升&#xff1a;Cache机制 随着半导体工艺和芯片设计技术的发展&#xff0c;CPU的工作频率也越来越高&#xff0c;和CPU进行频繁的数据交换的内存的运行速度却没有相应的提升&#xff0c;于是两者之间产生了带宽问题。进而影响计算机系统的整体性能。CPU执行一条指令需…

C++/PTA 至多删三个字符

至多删三个字符 题目要求解题思路代码总结 题目要求 给定一个全部由小写英文字母组成的字符串&#xff0c;允许你至多删掉其中 3 个字符&#xff0c;结果可能有多少种不同的字符串&#xff1f; 输入格式&#xff1a; 输入在一行中给出全部由小写英文字母组成的、长度在区间 […

关于摆摊气球的调研-网红气球

本章主要介绍一下最近网红气球&#xff1a; 最近看到很多摆摊的抖音视频&#xff0c;都在说卖气球很好&#xff0c;成本低&#xff0c;收益高&#xff0c;所以调研了一下&#xff0c;网红气球分好几种&#xff1a; a,飘空气球&#xff1b; b.手持网红气球 c.青蛙 首先介绍飘空…

文件上传,内容逻辑数组绕过(22)

uploadd 第十三关 这一关告诉我们的&#xff0c;有一些上传漏洞需要配合这个文件包含和加解密。 这个先在一个图片源码里面写入php后门的脚本代码 这里也可以手工注入到图片的源码里面来&#xff0c;手工注入&#xff0c;如果采用16进制打开这个图片&#xff0c;这个图片在…

okhttp篇4:RetryAndFollowUpInterceptor

在上一篇 okhttp篇3&#xff1a;RealCall_yolan6824的博客-CSDN博客 中讲到RealCall无论是在execute还是enqueue方法中&#xff0c;都是通过getResponseWithInterceptorChain方法获取Request对应的Response的。而getResponseWithInterceptorChain这个方法&#xff0c;又是通过…

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手&#xff0c;在使用虚…

【vimsolo】让vim看起来像VSCode:颜色主题和状态栏的配置

文章目录 1. 目的2. 理念&#xff1a; vimsolo3. vimrc: 配置颜色4. vimrc: 配置状态栏5. 拷贝颜色主题和.vimrc: python安装脚本 1. 目的 习惯了 VSCode 默认的配色&#xff1a;黑色主题&#xff0c;蓝色状态栏。偶尔使用 Vim 时想让 vim 伪装的像 VSCode&#xff0c;不考虑花…

Web 测试和 App 测试重点总结

单纯从功能测试的层面上来讲的话&#xff0c;App 测试、Web 测试在流程和功能测试上是没有区别的&#xff0c;但由于系统结构方面存在差异&#xff08;web 项目&#xff0c;b/s 架构&#xff1b;app 项目&#xff0c;c/s 结构&#xff09;在测试中还是有不同的侧重点内容&#…

ZED使用指南(八)Depth Sensing

ZED立体相机再现了人类双目视觉的工作方式。通过比较左眼和右眼看到的两种视图&#xff0c;不仅可以推断深度&#xff0c;还可以推断空间中的3D运动。 ZED立体相机可以捕捉到场景的高分辨率3D视频&#xff0c;通过比较左右图像之间的像素位移可以估计深度和运动。 深度感知 …

CTFHub-ctfhub-Git泄露-Log

CTFHub-ctfhub-Git泄露-Log 当前大量开发人员使用git进行版本控制&#xff0c;对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题 1、dirsearch扫描 github上下载dirsearch-master 命令F…

SpringMVC第二阶段:@RequestMapping注解详解

RequestMapping注解详解 RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序&#xff0c;在web.xml中配置了访问地址之后&#xff0c;它们之间就有一个访问映射关系。 1、value属性 value 属性用于配置方法对应的访问地址. /*** RequestMapping 可以配…