Upload-labs 1~15 通关详细教程

文章目录

  • Upload-labs 1~15 通关详细教程
    • Pass-01-前端js验证
    • Pass-02-后端MIME验证
    • Pass-03-黑名单验证
    • Pass-04-黑名单验证.htaccess
    • Pass-05-文件后缀名大小写绕过
    • Pass-06-文件后缀名空格绕过
    • Pass-07-文件后缀名点绕过
    • Pass-08-文件后缀名::$DATA绕过
    • Pass-09-点+空格+点+空格绕过
    • Pass-10-文件后缀名双写绕过
    • Pass-11-GET型00截断
    • Pass-12-POST型00截断
    • Pass-13-图片木马绕过
    • Pass-14-getimagesize()检查绕过
    • Pass-15-exif_imagetype()检测绕过

Upload-labs 1~15 通关详细教程

靶场地址Upload-labs。

还有俺写的另一篇博客作为参考任意文件上传。

Pass-01-前端js验证

上传一个php的一句话木马文件

文件内容如下:

image-20230829192328875

这里显示上传的文件类型只能是jpg,png,gif类型的

image-20230829192316607

查看源码

image-20230829194103455

我们可以修改文件后缀名为png。

使用BurpSuite抓取数据包,然后再将文件的后缀名修改为php。

image-20230829192932032

使用中国蚁剑进行连接。

http://192.168.188.183/upload/wuhu.php

image-20230829193418604

Pass-02-后端MIME验证

后端 MIME 验证是一种常用的安全机制,用于验证接收到的文件的MIME 类型(Multipurpose Internet Mail Extensions)。MIME 类型是通过 HTTP 协议将文件的特定类型信息传输给客户端的一种标准方法。后端 MIME 验证是在服务器端对接收到的文件进行验证,确保其声明的 MIME 类型与实际文件类型相匹配。

后端 MIME 验证的目的是防止恶意用户绕过前端限制,通过伪造文件的扩展名或修改文件内容来上传和执行恶意文件。通过验证文件的真实 MIME 类型,可以减少安全风险,有效防止不合法的文件被上传和处理。

在后端 MIME 验证中,服务器会解析上传的文件,并根据文件的内容或文件头部信息判断其实际的 MIME 类型。然后,服务器会将解析得到的 MIME 类型与客户端提交的 MIME 类型进行比较,如果两者不一致,则表示可能存在风险,服务器可以拒绝接受或进一步处理该文件。

后端 MIME 验证通常作为文件上传功能的一部分,结合其他安全措施如文件大小限制、文件类型白名单等,以增强系统的安全性。

回到靶场,上传一个php的一句话木马文件。

image-20230829194159441

页面报错文件类型不正确,需要重新上传。

查看源码

image-20230829194306119

我们在上传文件的时候使用BurpSuite抓取数据包,来修改里面的Content-Type值从而绕过MIME 验证。

image-20230829195244006

上传成功

image-20230829195306245

然后就可以使用蚁剑进行连接了

Pass-03-黑名单验证

查看源码,发现这关设置了文件后缀名的黑名单。

image-20230829210857293

但是这里的黑名单规则不严谨,在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。

这里用.php6文件后缀名,直接上传一个名为wuhu.php6的文件

image-20230829211204289

发现直接上传成功。

image-20230829211231577

Pass-04-黑名单验证.htaccess

查看源码,黑名单中的过滤的内容更多了。

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

这里使用 .htaccess 后缀名的文件。

.htaccess 是一个用于 Apache Web 服务器的配置文件,它是一种特殊的文本文件,使用 “.htaccess” 作为文件名的后缀。该文件通常用于在特定目录下改变 Apache 服务器的行为以及对网站进行配置。

.htaccess 文件的作用是允许网站管理员在特定目录中覆盖默认的服务器设置,以灵活地控制网站的行为和功能。它可以包含一系列指令,用于自定义访问权限、重定向URL、启用或禁用模块、修改请求处理规则等。

常见的用途和功能:

  1. URL 重写:通过 RewriteRule 指令可以修改 URL 地址的结构,使得对外暴露的 URL 更加友好和易读,同时也方便实现重定向和 URL 路由功能。
  2. 访问控制:通过使用指令如 Require 和 Allow/Deny,可以限制特定用户或 IP 地址的访问权限,保护敏感目录或文件。
  3. 自定义错误页面:通过 ErrorDocument 指令,可以针对不同的 HTTP 错误代码自定义相应的错误页面。
  4. 缓存控制:通过使用指令如 ExpiresByType,可以设置不同类型文件的缓存过期时间,以提升网站性能和加快页面加载速度。
  5. MIME 类型配置:通过 AddType 或 AddHandler 指令,可以自定义文件扩展名与 MIME 类型之间的映射关系。
  6. 重写规则:使用 RewriteRule 和 RewriteCond 指令,可以实现灵活的 URL 重写和重定向规则,对请求进行修改或转发。

上传文件的内容

<FilesMatch "jpg">   SetHandler application/x-httpd-php
</FilesMatch>

说明:如果文件里面有一个后缀为.jpg的文件,就会被解析成.php。

image-20230830193001305

先上传**.htaccess**文件,然后上传phpinfo.jpg文件。

image-20230830200733495

Pass-05-文件后缀名大小写绕过

查看源码,发现本关的黑名单中过滤了.htaccess文件,所以这关无法使用.htaccess来进行绕过。

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

观察发现源码中缺少了strtolower函数,说明这里可以尝试大小写绕过。

$file_ext = strtolower($file_ext); //转换为小写

上传**.Php**后缀名的文件

image-20230830205024296

image-20230830205124858

Pass-06-文件后缀名空格绕过

查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = $_FILES['upload_file']['name'];$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATAif (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;if (move_uploaded_file($temp_file,$img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件不允许上传';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

观察发现源码中缺少了trim函数(去除字符串首尾处的空白字符),说明这里可以尝试空格绕过。

$file_ext = trim($file_ext); //首尾去空

上传php文件,然后抓取数据包,在文件后缀名后面加一个空格。

image-20230830205927340

上传成功

image-20230830205941655

Pass-07-文件后缀名点绕过

查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

观察源码发现缺少deldot,删除文件名末尾的点

$file_name = deldot($file_name); //删除文件名末尾的点

上传php文件,然后抓取数据包,在文件后缀名后面加一个点。

利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过。

image-20230830211613569

上传成功

image-20230830211651126

访问上传的php文件

image-20230830211826038

Pass-08-文件后缀名::$DATA绕过

查看源码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

观察源码发现缺少了去除字符串str_ireplace。

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

说明:

  • 在 Windows 操作系统中,::$DATA 是一种用于隐藏文件的特殊附加数据流(Alternate Data Stream)。它是一种扩展文件属性,可以将额外的数据附加到一个文件中,而不会影响文件的主要内容。
  • 附加数据流基于文件名和冒号之间的特殊语法,例如:file.txt::$DATA。附加数据流可以储存任意类型的数据,例如文本、二进制文件或其他文件。这使得 .::$DATA 可以被用于隐藏文件内容、存储元数据或其他需要与主文件相关但不希望直接显示给用户的信息。

上传php文件,然后抓取数据包,在文件后缀名后面加上::$DATA即可。

image-20230830212739182

上传成功

image-20230830212805004

Pass-09-点+空格+点+空格绕过

查看源码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

观察源码发现代码先是去除文件名前后的空格,再去除文件名末尾的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,本关没有循环验证,说明转换大小写去除空格什么的它只验证一次。

上传php文件,然后抓取数据包,在文件后缀名后面加上.php. . 即可。也就是点+空格+点+空格绕过。

image-20230830215151089

上传成功

image-20230830215206545

Pass-10-文件后缀名双写绕过

查看源码:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;        if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}

上传一个文件查看,发现将违规的文件后缀名替换为空了

image-20230830220537283

那么我们可以使用文件后缀名双写来绕过

image-20230830220731658

上传成功

image-20230830220749469

页面访问

image-20230830220943381

Pass-11-GET型00截断

查看源码:

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上传出错!';}} else{$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

观察源码发现是白名单上传,只允许上传白名单中的后缀名。

关键代码如下:

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

这个$img_path变量是直接进行拼接的,所以可以使用%00截断绕过。

%00截断的条件:php版本要小于5.3.4 修改php.ini配置文件中的magic_quotes_gpc为OFF状态。

上传PHP文件,使用bp抓包,然后修改save_path的值

image-20230902132111050

说明GET请求提交的内容会被自动进行URL编码

上传成功

image-20230902132141760

页面访问

image-20230902132342093

补充

00截断(Null Byte Injection)是一种针对Web应用程序的安全漏洞,它利用输入验证不充分的情况下,以空字节(\x00或%00)作为终止字符来截断字符序列。这种漏洞通常出现在不正确地处理用户输入的情况下,尤其是在字符串拼接或文件路径处理等场景中。

当应用程序没有正确处理输入数据时,攻击者可以通过插入空字节来绕过输入验证。空字节可以用来截断字符串,导致应用程序对输入数据的处理产生意外结果,进而造成安全问题。

0x00,%00,/00这三类阶截断都是属于同种原理。在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。

例如:在1.php文件名改为1.php%00.jpg会被解析为1.php,欺骗应用程序认为这是受支持的php文件类型,从而绕过文件类型验证,上传shell。

Pass-12-POST型00截断

查看源码:

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传失败";}} else {$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}

同样的白名单策略,与上一关不同的是,这次换成了POST方式传参,使用00截断。

上传php木马,使用bp抓取数据包,修改数据包内容

image-20230902135836340

但是这里不会像GET方式那样会对%00进行解码,所以要对%00进行URL编码。

image-20230902135719027

上传成功

image-20230902135957884

页面访问

image-20230902140026854

Pass-13-图片木马绕过

查看源码

function getReailFileType($filename){$file = fopen($filename, "rb");$bin = fread($file, 2); //只读2字节fclose($file);$strInfo = @unpack("C2chars", $bin);    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);    $fileType = '';    switch($typeCode){      case 255216:            $fileType = 'jpg';break;case 13780:            $fileType = 'png';break;        case 7173:            $fileType = 'gif';break;default:            $fileType = 'unknown';}    return $fileType;
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$file_type = getReailFileType($temp_file);if($file_type == 'unknown'){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

使用cmd命令:

copy  imgName/b + phpName/a newImgName

image-20230831195452437

image-20230831195434294

上传图片木马

image-20230902142550093

结合文件包含漏洞执行图片木马,利用靶场提供的include.php文件进行漏洞测试。

image-20230902143127420

浏览器访问路径

http://192.168.188.183/include.php?file=./upload/6720230902142414.png

image-20230902143531316

蚁剑进行连接

image-20230902143434822

Pass-14-getimagesize()检查绕过

查看源码

function isImage($filename){$types = '.jpeg|.png|.gif';if(file_exists($filename)){$info = getimagesize($filename);$ext = image_type_to_extension($info[2]);if(stripos($types,$ext)>=0){return $ext;}else{return false;}}else{return false;}
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

观察源码发现,getimagesize()函数,该函数会对文件内容进行检测,但是只检测文件头部。

上传php,使用bp抓取数据包,修改数据包中的内容,在文件内容的头部添加”GIF89a“。

image-20230902150450674

上传成功

image-20230902150517016

结合文件包含漏洞执行图片木马,利用靶场提供的include.php文件进行漏洞测试。

浏览器访问路径:

http://192.168.188.183/include.php?file=./upload/9920230902150500.gif

image-20230902150623110

Pass-15-exif_imagetype()检测绕过

查看源码:

function isImage($filename){//需要开启php_exif模块$image_type = exif_imagetype($filename);switch ($image_type) {case IMAGETYPE_GIF:return "gif";break;case IMAGETYPE_JPEG:return "jpg";break;case IMAGETYPE_PNG:return "png";break;    default:return false;break;}
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$res = isImage($temp_file);if(!$res){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}

观察源码发现有一个exif_imagetype()函数,该函数是判断一个图形的类型。

绕过方式采用图片木马:

image-20230902151741299

结合文件包含漏洞执行图片木马,利用靶场提供的include.php文件进行漏洞测试。

浏览器访问:

image-20230902151828561

蚁剑进行连接即可。

也可以使用Pass-14的方式进行绕过。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小沐学Unity3d】3ds Max 骨骼动画制作(CAT、Character Studio、Biped、骨骼对象)

文章目录 1、简介2、 CAT2.1 加载 CATRig 预设库2.2 从头开始创建 CATRig 3、character studio3.1 基本描述3.2 Biped3.3 Physique 4、骨骼系统4.1 创建方法4.2 简单示例 结语 1、简介 官网地址&#xff1a; https://help.autodesk.com/view/3DSMAX/2018/CHS https://help.aut…

R语言nlme、nlmer、lme4用(非)线性混合模型non-linear mixed model分析藻类数据实例...

原文链接&#xff1a;http://tecdat.cn/?p23426 混合线性模型&#xff0c;又名多层线性模型(Hierarchical linear model)。它比较适合处理嵌套设计(nested)的实验和调查研究数据&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 序言 此外&#xff0…

使用Python进行Base64编码和解码

假设您有一个想要通过网络传输的二进制图像文件。您很惊讶对方没有正确接收该文件 - 该文件只是包含奇怪的字符&#xff01; 嗯&#xff0c;您似乎试图以原始位和字节格式发送文件&#xff0c;而所使用的媒体是为流文本而设计的。 避免此类问题的解决方法是什么&#xff1f;答…

【Vue3】组件递归

【Vue3】组件递归 实现效果 通过传入一个数字&#xff0c;实现数字次循环 父组件 <script setup> import { ref } from "vue"; import RecursionMe from "./components/RecursionMe/index.vue";const level ref(0);const add () > level.val…

接口自动化测试 —— JMeter断言基本使用

断言 断言&#xff1a;就是让程序判断预期结果和实际结果是否一致 注意&#xff1a;请求发起成功了&#xff0c;不代表着一定符合预期的结果。 JMeter中常用断言 响应断言 JSON断言 持续时间断言 响应断言 步骤&#xff1a;&#xff1a;线程组——HTTP取样器——断言——…

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说&#xff0c;肯定要学springboot&#xff0c;什么sevlet、maven、java基础&#xff0c;都太老土了&#xff0c;用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”&#xff0c;测试开源项目时&#xff0c;编译总是报错&#xff…

Linux-Centos7安装Docker

文章目录 一、前言二、Docker安装1、Docker及系统版本2、Docker的自动化安装3、Docker手动安装3.1、卸载Docker&#xff08;可选&#xff09;3.2、设置源仓库3.3、Docker安装3.4、Docker启动3.5、验证是否安装成功3.5.1、拉取镜像3.5.2、查看镜像3.5.3、运行镜像 3.6、删除Dock…

http和https的区别?

什么是 HTTP&#xff1f; HTTP是一种互联网数据传输协议&#xff0c;用于在网络服务器和客户端之间进行数据传输。作为万维网的基础&#xff0c;HTTP协议允许网络浏览器向网络服务器发送请求&#xff0c;服务器则会返回响应。HTTP协议基于文本&#xff0c;因此传输的数据是人类…

多源最短路径算法:Floyd-Warshall算法分析

文章目录 图的邻接矩阵 一.Floyd-Warshall算法思想(基于动态规划)二.Floyd-Warshall算法接口笔记附录:单源最短路径--Bellman-Ford算法1.Bellman-Ford算法接口核心部分2.Bellman-Ford算法接口 图的邻接矩阵 namespace Graph_Structure {//Vertex是代表顶点的数据类型,Weight是…

Approaching (Almost) Any Machine Learning Problem中译版

前言 Abhishek Thakur&#xff0c;很多kaggler对他都非常熟悉&#xff0c;2017年&#xff0c;他在 Linkedin 发表了一篇名为Approaching (Almost) Any Machine Learning Problem的文章&#xff0c;介绍他建立的一个自动的机器学习框架&#xff0c;几乎可以解决任何机器学习问题…

JY901B智能9轴加速度计陀螺仪角度传感器

今日学习使用JY901B智能9轴加速度计陀螺仪角度传感器 本文会先使用上位机获取数据作演示&#xff0c;后介绍它的数据表发送原理。 文章提供详细的原理讲解&#xff0c;测试工程下载&#xff0c;代码讲解&#xff0c;本人有多注释的习惯&#xff0c;希望对大家有帮助。 我的J…

【LeetCode】剑指 Offer <二刷>(4)

目录 题目&#xff1a;剑指 Offer 09. 用两个栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 10- I. 斐波那契数列 - 力扣&am…

FFmpeg5.0源码阅读——FFmpeg大体框架

摘要&#xff1a;前一段时间熟悉了下FFmpeg主流程源码实现&#xff0c;对FFmpeg的整体框架有了个大概的认识&#xff0c;因此在此做一个笔记&#xff0c;希望以比较容易理解的文字描述FFmpeg本身的结构&#xff0c;加深对FFmpeg的框架进行梳理加深理解&#xff0c;如果文章中有…

Linux 常见命令操作

一、目录管理 1.1 列出目录 ls # ls 命令 # -a 参数&#xff0c;查看全部的文件&#xff0c;包括隐藏的文件 # -l 参数&#xff0c;列出所有的文件&#xff0c;包括文件的属性和权限&#xff0c;不显示隐藏文件 [rootlocalhost /]# ls bin boot dev etc home lib lib64…

C# Dapper 操作Oracle数据库

nuget安装内容 1.配置连接字符串 OracleConnectionString这个可用 {"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","…

前几天写的博客被选中进入【CSDN月度精选】榜单

小收获&#xff0c;记录一下&#xff0c;哈哈 这个貌似是CSDN给的排名和得分&#xff1a;

中东 Shopify 如何使用 Bytebase 构建一站式数据库开发工作流

公司简介 Salla 是一家 2016 年成立&#xff0c;位于沙特麦加的自建站电商平台。 作为中东 Shopify&#xff0c;其最大的特点是支持阿拉伯语建站&#xff0c;并且提供更多适应中东地区特点的本地化服务。截止目前&#xff0c;已有 47,000 家店铺入驻 Salla&#xff0c;商品销售…

云计算环境中高性能计算的挑战与对策

文章目录 云计算中的高性能计算挑战1. 资源竞争&#xff1a;2. 网络延迟&#xff1a;3. 数据传输效率&#xff1a;4. 虚拟化开销&#xff1a;5. 节点异构性&#xff1a; 高性能计算在云计算环境中的对策1. 定制化虚拟机镜像&#xff1a;2. 弹性资源调整&#xff1a;3. 高效数据…

springCloud整合Zookeeper的时候调用找不到服务

SpringCloud整合Zookeeper的时候调用找不到服务 首先&#xff0c;我们在注册中心注册了这个服务&#xff1a; 然后我们使用RestTemplate 调用的时候发现失败了&#xff1a;找不到这个服务&#xff1a; 找了很多资料发现这个必须要加上负载才行 BeanLoadBalanced //负载publi…

_数字矩阵

题目&#xff1a;一个3阶的数字矩阵如下&#xff1a; 1 2 3 8 9 4 7 6 5 现在给定数字n(1<n≤20)&#xff0c;输出n阶数字矩阵。 思路&#xff1a; 放出一条好玩的贪吃蛇&#xff0c;按照右下左上的顺序吃蛋糕&#xff0c;一边吃蛋糕&#xff0c;一边拉数字&#xff1b…