当前位置: 首页 > news >正文

upload-labs靶场通关

文章目录

  • Pass-01 前端检测(JS检测)
    • 1.1 原理分析
    • 1.2 实验
  • Pass-02 后端检测(MIME检测)
    • 2.1 原理分析
    • 2.2 实验
  • Pass-03 后端检测(黑名单绕过,特殊后缀名)
    • 3.1 原理分析
    • 3.2 实验
  • Pass-04 后端检测(黑名单绕过,.htaccess)
    • 4.1 原理分析
    • 4.2 实验
  • Pass-05 后端检测(黑名单绕过,大小写绕过)
    • 5.1 原理分析
    • 5.2 实验
  • Pass-06 后端检测(黑名单绕过,空格绕过)
    • 6.1 原理分析
    • 6.2 实验
  • Pass-07 后端检测(黑名单绕过,点绕过)
    • 7.1 原理分析
    • 7.2 实验
  • Pass-08 后端检测(黑名单绕过,::$DATA绕过)
    • 8.1 原理分析
    • 8.2 实验
  • Pass-09 后端检测(黑名单绕过,. .绕过)
    • 9.1 原理分析
    • 9.2 实验
  • Pass-10 后端检测(黑名单绕过,双写绕过)
    • 10.1 原理分析
    • 10.2 实验
  • Pass-11 后端检测(白名单绕过,%00截断绕过—get)
    • 11.1 原理分析
    • 11.2 实验
  • Pass-12 后端检测(白名单绕过,%00截断绕过—post)
  • Pass-13 后端检测(白名单绕过,文件内容检测—前两个字节)
    • 13.1 原理分析
    • 13.2 实验
  • Pass-14 后端检测(白名单绕过,文件内容检测—getimagesize)
    • 14.1 原理分析
    • 14.2 实验
  • Pass-15 后端检测(白名单绕过,文件内容检测—exif_imagetype)
    • 15.1 原理分析
    • 15.2 实验
  • Pass-16 后端检测(白名单绕过,二次渲染绕过)
    • 16.1 原理分析
    • 16.2 实验
  • Pass-17 后端检测(白名单绕过,条件竞争(一)绕过)
    • 17.1 原理分析
    • 17.2 实验
  • Pass-18 后端检测(白名单绕过,条件竞争(二)绕过)
    • 18.1 原理分析
    • 18.2 实验
  • Pass-19 后端检测
    • 19.1 原理分析
  • Pass-20 后端检测(白名单绕过,数组绕过)
    • 20.1 原理分析
    • 20.2 实验
  • 总结

环境:在kali中使用docker进行搭建。

Pass-01 前端检测(JS检测)

1.1 原理分析

  客户端(Client):或称为用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也称为JS检测与绕过。

  由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。绕过方法:

  • 删除浏览器事件;
  • 禁用JS;
  • 利用BurpSuite抓包修改文件后缀名。

1.2 实验

查看源码:

在这里插入图片描述

从form表单可以看出他在使用了onsubmit这个函数,触发了鼠标的单击事件,在表单提交后马上调用了checkFile()这个函数对上传的文件进行检查。checkfile()返回值为假,文件将不会上传。

在这里插入图片描述

该函数只允许上传的文件类型为.jpg、.png、.gif

综上分析,这种检测方式属于前端检测(JS检测)。

这里使用上述三种方法进行JS绕过:
(1)禁用JS

在这里插入图片描述

(2)利用burp抓包修改文件后缀

在这里插入图片描述

在这里插入图片描述
(3)删除浏览器事件

先将源代码全部保存到1.html文件中,然后删除onsubmit事件,以及JS函数。使用action事件,告诉浏览器将表单提交给谁。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用火狐打开firefox 1.html,然后上传文件即可。

在这里插入图片描述

在这里插入图片描述

Pass-02 后端检测(MIME检测)

2.1 原理分析

MIME检测原理:
判断$_FILES["upload_file"]["type"]是不是图片格式(image/gif、image/png、image/jpeg),不是则不允许上传。在HTTP 协议中,使用Content-Type 字段表示文件的MIME 类型。 $_FILES["file"]["type"]的值是从请求数据包中Content-Type中获取。

常见的MIME 类型如下:

文件拓展名Mime-Type
.jsapplication/x-javascript
.htmltest/html
.jpgimage/jpeg
.pngimage/png
.pdfapplication/pdf

绕过方法:修改数据包中的content-type值就行。

2.2 实验

在这里插入图片描述

查看源码,发现检测MIME格式是否为image/gif、image/jpeg、image/png。抓包修改MIME值即可。

在这里插入图片描述
在这里插入图片描述

Pass-03 后端检测(黑名单绕过,特殊后缀名)

3.1 原理分析

(1)黑名单绕过

  1. 名单列表绕过
      有些中间件允许解析其他文件后缀名,如asa、cer之类的或在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件,所以上传一个后缀名为php3、phptml的文件即可。
    在这里插入图片描述

默认状态下.php3,.php4,.php5,.phtml 都是会被解析为php

  1. Windows特性
      一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • ::$DATA,如1.php::$DATA

(2)白名单绕过
白名单绕过需要配合文件包含漏洞或者解析漏洞。

(3).htaccess文件攻击

  .htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。

  • 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。

  在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找**.htacess**文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。

(4)Apahce解析机制
  Apche解析机制:从右往左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止。

3.2 实验

在这里插入图片描述

可见,属于黑名单验证。

在这里插入图片描述

查看源代码,后缀加.(空格)::$DATA、大小写均被拦截。

通过返回的数据包,可知网站中间件为apache,故用特殊可解析后缀进行绕过。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意:

  • 需要配置apache的后缀解析规则,才能使用特殊后缀名绕过黑名单检测;
  • 本靶场搭建在linux上,所以修改/etc/apache2/mods-available/mime.conf文件(windows下为httpd.conf文件),增加语句AddType application/x-httpd-php .phptml ;
  • 如果用不了vim进行编辑,可以是使用echo "AddType application/x-httpd-php .phptml" | cat >> mime.conf

Pass-04 后端检测(黑名单绕过,.htaccess)

4.1 原理分析

  .htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。

  • 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。

  在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htaccess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置

4.2 实验

在这里插入图片描述

黑名单中并没有限制.htaccess文件的上传,故上传一个.htaccess文件,文件内容如下:

<FileMatch "shell.png">
SetHandler application/x-httpd-php

大致意思就是把shell.png图片文件当作php代码进行解析。

先上传.htaccess文件,再上传shell.png文件,即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:

  • 需要修改/etc/apache2/apache2.conf配置文件(windows下为httpd.conf文件),其中的AllowOverride参数设置为All;
  • 使用cat命令进行写入。

Pass-05 后端检测(黑名单绕过,大小写绕过)

5.1 原理分析

原理:windows对大小写不敏感,linux对大小写敏感。

5.2 实验

在这里插入图片描述

可以看出后端没有对大小写进行过滤。

抓包,修改文件后缀。

在这里插入图片描述

在这里插入图片描述

本靶场搭建再linux环境下,故phP文件无法被解析为php文件。

Pass-06 后端检测(黑名单绕过,空格绕过)

6.1 原理分析

  一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:

  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • ::$DATA,如1.php::$DATA

6.2 实验

在这里插入图片描述

可以看出后端没有对空格进行过滤。

在这里插入图片描述
在这里插入图片描述

Pass-07 后端检测(黑名单绕过,点绕过)

7.1 原理分析

  一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:

  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • ::$DATA,如1.php::$DATA

7.2 实验

在这里插入图片描述
可以看出后端没有对点进行过滤。

在这里插入图片描述

Pass-08 后端检测(黑名单绕过,::$DATA绕过)

8.1 原理分析

  一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:

  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • ::$DATA,如1.php::$DATA

8.2 实验

在这里插入图片描述

可以看出后端没有对::$DATA进行过滤。

在这里插入图片描述

注意,在使用蚁剑进行连接时,不要加上::$DATA

Pass-09 后端检测(黑名单绕过,. .绕过)

9.1 原理分析

  一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:

  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • ::$DATA,如1.php::$DATA

9.2 实验

在这里插入图片描述

deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来。假如文件名为shell.php. .,deldot函数会删除最后一个点,然后将.php. 转换为小写,再去除特殊字符串::$DATA,最后去掉空格,得到.php.绕过检测。

在这里插入图片描述

Pass-10 后端检测(黑名单绕过,双写绕过)

10.1 原理分析

str_ireplace()函数寻找文件名中存在的黑名单字符串,将它替换成空;并且不区分大小写。

10.2 实验

在这里插入图片描述

可见,此处使用str_ireplace()函数删除黑名单后缀。故,使用双写绕过。

在这里插入图片描述
在这里插入图片描述

上述关卡均为黑名单绕过,而且只验证一次。接下来的关卡将是白名单绕过。
	白名单绕过需要配合文件包含漏洞或者解析漏洞。

Pass-11 后端检测(白名单绕过,%00截断绕过—get)

11.1 原理分析

  截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (" "),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。由于00代表结束符,PHP会把00后面的所有字符删除。

截断条件
  PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态。
  
在这里插入图片描述

  • linux在/usr/local/etc/php/php.ini中查看magic_quotes_gpc参数状态。
  • 本靶场php版本高于5.3.4,故只讲原理。

11.2 实验

在这里插入图片描述

str_ireplace()函数遇到%00会截断。如下图,保存路径12.php%00,不管你文件名,最终保存在服务器路径上的文件(你上传的文件)的文件名都为12.php

在这里插入图片描述

Pass-12 后端检测(白名单绕过,%00截断绕过—post)

原理同上,唯一的不同就是路径用post进行传递。

Pass-13 后端检测(白名单绕过,文件内容检测—前两个字节)

13.1 原理分析

根据上传文件内容的前两个字节,来判断上传文件类型。

13.2 实验

制作图片马进行绕过。

在这里插入图片描述
成功上传图片马后,需要通过文件包含漏洞才能成功获取shell。

在这里插入图片描述

Pass-14 后端检测(白名单绕过,文件内容检测—getimagesize)

14.1 原理分析

  利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。服务端主要检测文件幻数:

类型文件幻数
JPGFF D8 FF E0 00 10 4A 46 49 46
GIF47 49 46 38 39 61 (GIF89a)
PNG89 50 4E 47

绕过方式
  在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码
在这里插入图片描述

14.2 实验

在这里插入图片描述

可知,本关卡用getimagesize()函数检测文件函数。使用图片马绕过+文件包含漏洞。

在这里插入图片描述
在这里插入图片描述

Pass-15 后端检测(白名单绕过,文件内容检测—exif_imagetype)

15.1 原理分析

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。只是换了一个函数,故绕过方法与上一关一样。

15.2 实验

在这里插入图片描述
在这里插入图片描述

Pass-16 后端检测(白名单绕过,二次渲染绕过)

16.1 原理分析

在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。

简单来说,就是后台会根据你上传的图片,重建一个相同的图片。

绕过:

  • 对比源文件和渲染后的文件,在没有变化的部分加入一句话木马;
  • 对于做文件上传之二次渲染建议用GIF图片,相对于简单一点。

16.2 实验

使用burp的比较模块进行源文件和渲染后文件的比较。

在这里插入图片描述
在没有变化的部分添加一句话木马。
在这里插入图片描述
在这里插入图片描述

Pass-17 后端检测(白名单绕过,条件竞争(一)绕过)

17.1 原理分析

  一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。

绕过方式
  利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除。

简单来说就是,在删除文件之前,访问文件,这样就会提示文件在另一个程序中无法删除。

17.2 实验

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

从源码中可以看出,后端先把上传的文件从临时文件夹移动到指定的位置,再判断文件后缀是否属于白名单中的文件后缀,不属于,就使用unlink函数删除文件。

上传php文件(只有上传php文件,服务端才会运行其中的php脚本),payload如下:

	<?php fputs(fopen('shell00.php','w'),'<?php phpinfo()?>');?>

注意,写入的文件夹名不能与上传的文件夹名一致,不然会被删掉。

在这里插入图片描述
无限发送空的payload

在这里插入图片描述
python访问脚本:

import requests
url = "http://192.168.92.1:32768/upload/shell00.php"
while True:html = requests.get(url)if html.status_code == 200:print("OK")break

在bp攻击的同时,运行python脚本访问上传的文件。

在这里插入图片描述
在这里插入图片描述

Pass-18 后端检测(白名单绕过,条件竞争(二)绕过)

18.1 原理分析

原理同上

18.2 实验

//index.php
$is_upload = false;
$msg = null;
if (isset($_POST['submit']))
{require_once("./myupload.php");$imgFileName =time();$u = new MyUpload($_FILES['upload_file']['name'], $_FILES['upload_file']['tmp_name'], $_FILES['upload_file']['size'],$imgFileName);$status_code = $u->upload(UPLOAD_PATH);switch ($status_code) {case 1:$is_upload = true;$img_path = $u->cls_upload_dir . $u->cls_file_rename_to;break;case 2:$msg = '文件已经被上传,但没有重命名。';break; case -1:$msg = '这个文件不能上传到服务器的临时文件存储目录。';break; case -2:$msg = '上传失败,上传目录不可写。';break; case -3:$msg = '上传失败,无法上传该类型文件。';break; case -4:$msg = '上传失败,上传的文件过大。';break; case -5:$msg = '上传失败,服务器已经存在相同名称文件。';break; case -6:$msg = '文件无法上传,文件不能复制到目标目录。';break;      default:$msg = '未知错误!';break;}
}//myupload.php
class MyUpload{
......
......
...... var $cls_arr_ext_accepted = array(".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",".ppt",".html", ".xml", ".tiff", ".jpeg", ".png" );......
......
......  /** upload()**** Method to upload the file.** This is the only method to call outside the class.** @para String name of directory we upload to** @returns void**/function upload( $dir ){$ret = $this->isUploadedFile();if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->setDir( $dir );if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->checkExtension();if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->checkSize();if( $ret != 1 ){return $this->resultUpload( $ret );    }// if flag to check if the file exists is set to 1if( $this->cls_file_exists == 1 ){$ret = $this->checkFileExists();if( $ret != 1 ){return $this->resultUpload( $ret );    }}// if we are here, we are ready to move the file to destination$ret = $this->move();if( $ret != 1 ){return $this->resultUpload( $ret );    }// check if we need to rename the fileif( $this->cls_rename_file == 1 ){$ret = $this->renameFile();if( $ret != 1 ){return $this->resultUpload( $ret );    }}// if we are here, everything worked as planned :)return $this->resultUpload( "SUCCESS" );}
......
......
...... 
};

  从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在,文件上传之后又对其进行了重命名。

故,上传图片马,而且在图片马没有被重命名之前访问它,配合其他漏洞,比如文件包含,apache解析漏洞等,最终获取shell。

一句话木马,一访问图片马,就将php探针写入到shell01.php中。

	<?php fputs(fopen('shell01.php','w'),'<?php phpinfo();?>');?>

bp的操作和上一关一样,bp发包的同时,python脚本访问。

在这里插入图片描述

在这里插入图片描述

需要用到文件包含漏洞,python脚本如下:

import requests
url = "http://192./include.php?file=upload/pass19.png"
while True:html = requests.get(url)if ( 'Warning'  not in  str(html.text)):print('ok')break

在这里插入图片描述

Pass-19 后端检测

19.1 原理分析

在这里插入图片描述

根据源码,本关卡没有对上传的文件做判断,只对用户输入的文件名做判断。黑名单用于用户输入的文件后缀名进行判断。move_uploaded_file()会忽略掉文件末尾的 /.

在这里插入图片描述
在这里插入图片描述

Pass-20 后端检测(白名单绕过,数组绕过)

20.1 原理分析

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){//检查MIME$allow_type = array('image/jpeg','image/png','image/gif');if(!in_array($_FILES['upload_file']['type'],$allow_type)){$msg = "禁止上传该类型文件!";}else{//save_name不是数组,就对文件的文件名进行切分$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];if (!is_array($file)) {$file = explode('.', strtolower($file));}$ext = end($file);$allow_suffix = array('jpg','png','gif');if (!in_array($ext, $allow_suffix)) {$msg = "禁止上传该后缀文件!";}else{$file_name = reset($file) . '.' . $file[count($file) - 1];$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' .$file_name;if (move_uploaded_file($temp_file, $img_path)) {$msg = "文件上传成功!";$is_upload = true;} else {$msg = "文件上传失败!";}}}
}else{$msg = "请选择要上传的文件!";
}
验证过程:
--> 验证上传路径是否存在
--> 验证['upload_file']的content-type是否合法
--> 判断POST参数是否为空,并定义$file变量(关键:构造数组绕过下一步的判断)
-->	判断file不是数组则使用explode('.', strtolower($file))对file进行切割,将file变为一个数组
--> 判断数组最后一个元素是否合法
--> 数组第一位和$file[count($file) - 1]进行拼接,产生保存文件名file_name
--> 上传文件

20.2 实验

在这里插入图片描述

reset()函数将内部指针指向数组中的第一个元素,并输出 upload-20.php
伪造的数组有两个值,count($file)-1=2-1=1

$file[1]='' 空
save_name[0]='upload-20.php'
save_name[1]=''
save_name[2]='png'
file={'upload-20.php','','png'}

经过源码中的拼接upload-20.php.

在这里插入图片描述
靶场搭建在windows上,就可以访问到phpinfo页面。

总结

在这里插入图片描述

相关文章:

upload-labs靶场通关

文章目录 Pass-01 前端检测&#xff08;JS检测&#xff09;1.1 原理分析1.2 实验 Pass-02 后端检测&#xff08;MIME检测&#xff09;2.1 原理分析2.2 实验 Pass-03 后端检测&#xff08;黑名单绕过&#xff0c;特殊后缀名&#xff09;3.1 原理分析3.2 实验 Pass-04 后端检测&a…...

git拉取代码过程

第一步&#xff1a;先在本地创建文件夹 &#xff0c;比如我这里的文件夹名称是 fengkgong_zntjfx 第二步&#xff1a;执行命令&#xff1a;git init 第三步&#xff1a;git clone 第四步&#xff1a;git fetch 第五步&#xff1a;git branch -a 第六步&#xff1a;cd 项目 【…...

Swift | 属性包装器

Swift | 属性包装器 1. 什么是 Swift Property Wrapper&#xff1f; Swift Property Wrapper 是一种特性&#xff0c;它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器&#xff0c;我们可以在不修改类或结构体定义的情况下&#xff0c;定制属性的访问和存储方…...

Android改造CardView为圆形View,Kotlin

Android改造CardView为圆形View&#xff0c;Kotlin 可以利用androidx.cardview.widget.CardView的cardCornerRadius特性&#xff0c;将CardView改造成一个圆形的View&#xff0c;技术实现的关键首先设定CardView为一个宽高相等的View&#xff08;正方形&#xff09;&#xff0c…...

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来&#xff0c;但是旧的分支还是可以启动其他分支&#xff0c;在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…...

【数据结构】什么是算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.算法的定义 1.算法的概念 2.数据结构与算法的关系 二.算法的特性 输入 输出 有穷性 确定性 可行性 三.算法的设计要求 1.正确性 2.可读性 3.健壮性 4.效…...

复旦大学EMBA:揭秘科创企业,领略未来战略!

智能制造&#xff0c;国之重器。作为制造强国建设的主攻方向&#xff0c;智能制造的发展水平关系到我国未来制造业在全球的地位与影响力。发展智能制造&#xff0c;是加快建设现代化产业体系的重要手段&#xff0c;提升供给体系适配性的有力抓手&#xff0c;也是建设数字中国的…...

根据您的数据量定制的ChatGPT,改变客户服务的方式

在当今竞争激烈的商业环境中&#xff0c;提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务&#xff0c;因为它直接影响客户留存和品牌声誉。随着技术的进步&#xff0c;公司不断探索创新解决方案&#xff0c;以增强客户服…...

《Unity Shader 入门精要》笔记03

UnityShader的内置变量&#xff08;数学篇&#xff09; Unity内置的变换矩阵摄像机和屏幕参数float3 _WorldSpaceCameraPosfloat4 _ProjectionParamsfloat4 _ZBufferParamsfloat4 unity_OrthoParamsfloat4x4 unity_CameraProjectionfloat4x4 unity_CameraInvProjectionfloat4 u…...

LINUX系统使用软件异地同步数据(灾备)

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 一、宝塔环境: 有宝塔软件商城支持&#xff0c;参考&#xff1a;https://www.bt.cn/bbs/thread-98022-1-1.html 二、…...

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…...

c#设计模式-行为型模式 之 状态模式

&#x1f680;简介 状态模式是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为&#xff0c;我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后&#xff0c;我们可以创建一个上下文类&#xff0c;它会根据其当前的状态对象来改…...

使用Docker安装JupyterHub

安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d&#xff1a;后台运行 # -p 8000:8000&#xff1a;宿主机的8000端口映射容器中的8000端口 # --name jupyterhub&#xff1a;给运行的容器起名…...

SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题

在集成 Spring Cloud Gateway 网关的时候&#xff0c;会出现没有 basePath 的情况&#xff0c;例如定义的 /jeeplus-auth、/jeeplus-system 等微服务前缀导致访问接口404&#xff1a; maven依赖&#xff1a; swagger2于17年停止维护&#xff0c;现在最新的版本为 Swagger3&am…...

html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

有人知道使用 protocol relative URLs 是否有问题吗&#xff1f;用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…...

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…...

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥&#xff0c;而守卫类型也比较多&#xff0c;其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难&#xff0c;这边主要介绍…...

方案:快递站智能视频监控3大亮点汇总

快递站智能视频监控方案是一种利用先进的技术和设备&#xff0c;来提升快递站安全管理和快递流程监控的解决方案。具体包括哪些方面呢&#xff1f;今天小编就带大家来看看&#xff01; 1、视频监控系统 在快递站的关键区域安装旭帆科技高清摄像头&#xff0c;如快递仓库、操作…...

Direct3D网格

创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 &#xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数&#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存&#xff0c;之后即可手工填入网格数据。 HRESULT WINA…...

docker安装wiki

1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库&#xff0c;接下…...

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…...

设计模式学习

文章目录 前言设计模式的七大原则单一职责原则开放封闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特原则总结 GoF二十三种设计模式创建型模式&#xff08;五种&#xff09;结构型模式&#xff08;七种&#xff09;行为型模式&#xff08;十一种&#xff09; 游…...

Openfire身份认证绕过漏洞

漏洞详情&#xff1a; Openfire是采用Java编程语言开发的实时协作服务器&#xff0c;Openfire的管理控制台是一个基于Web的应用程序&#xff0c;被发现可以使用路径遍历的方式绕过权限校验。未经身份验证的用户可以访问Openfire管理控制台中的后台页面。同时由于Openfire管理控…...

类目体系设计总结

一、背景 公司窗帘产品在做分类调整&#xff0c;从原先二级类目调整为三级类目&#xff0c;相对于平台电商我们的类目层次结构要简单很多&#xff08;没有定义商品动态属性等&#xff09;&#xff0c;但对于也有上万款SKU的系统来讲,做好基础的分类对于采购、商品促销、数据报…...

gRPC之proto数据验证

1、proto数据验证 本篇将介绍grpc_validator&#xff0c;它可以对gRPC数据的输入和输出进行验证。 这里复用上一篇文章的代码。 1.1 创建proto文件&#xff0c;添加验证规则 这里使用第三方插件go-proto-validators 自动生成验证规则。 地址&#xff1a;https://github.co…...

计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…...

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…...

C超市商品信息查询系统

一、系统界面介绍 1. 超市商品信息查询系统 1、显示商品信息&#xff0c;包括&#xff1a;商品名称、商品种类&#xff08;休闲食品、奶品水饮、生鲜水果&#xff09;、商品价格、商品保质期、商品生产日期&#xff1b; 2、从文件中导入数据、显示、排序、查询的功能。&…...

黑马JVM总结(二十七)

&#xff08;1&#xff09;synchronized代码块 synchronized代码块的底层原理&#xff0c;它是给一个对象进行一个加锁操作&#xff0c;它是如何保证如果你出现了synchronized代码块中出现了问题&#xff0c;它需要给这个对象有一个正确的解锁操作呢&#xff0c;加锁解锁是成对…...

软件测试/测试开发丨Python异常处理 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27722 异常处理 编写程序时&#xff0c;即使语句或表达式使用了正确的语法&#xff0c;执行时仍可能触发错误。执行时检测到的错误称为异常&#xff0c;大…...

026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线

026- STM32学习笔记 - 液晶屏控制&#xff08;三&#xff09; - DMA2D快速绘制矩形、直线等 上节直接操作LTDC在先视频上直接显示&#xff0c;我们直接操作显存地址空间中的内容&#xff0c;用来显示图形&#xff0c;但是相对来说&#xff0c;这种方法费时费力&#xff0c;这节…...

【牛客网】OR59 字符串中找出连续最长的数字串

题目 思路 创建两个字符串 temp 和 ret 创建指针i用来遍历字符串通过i遍历字符串,如果遇到数字则将这个数组加到字符串temp中 i,如果遇到字母,则判断temp字符串的长度和ret字符串的长度,如果temp<ret则说明这个字符串不是要的字符串,如果temp>ret则说明此时temp字符串是…...

云原生监控系统Prometheus:基于Prometheus构建智能化监控告警系统

目录 一、理论 1.Promethues简介 2.监控告警系统设计思路 3.Prometheus监控体系 4.Prometheus时间序列数据 5.Prometheus的生态组件 6.Prometheus工作原理 7.Prometheus监控内容 8.部署Prometheus 9.部署Exporters 10.部署Grafana进行展示 二、实验 1.部署Prometh…...

C++ 学习系列 -- std::list

一 std::list 介绍 list 是 c 中的序列式容器&#xff0c;其实现是双向链表&#xff0c;每个元素都有两个指针&#xff0c;分别指向前一个节点与后一个节点 链表与数组都是计算机常用的内存数据结构&#xff0c;与数组连续内存空间不一样的地方在于&#xff0c;链表的空间是不…...

YOLOv8血细胞检测(6):多维协作注意模块MCA | 原创独家创新首发

💡💡💡本文改进:多维协作注意模块MCA,效果秒杀ECA、SRM、CBAM,创新性十足,可直接作为创新点使用。 MCA | 亲测在血细胞检测项目中涨点,map@0.5 从原始0.895提升至0.910 收录专栏: 💡💡💡YOLO医学影像检测:http://t.csdnimg.cn/N4zBP ✨✨✨实战医学影…...

FFmpeg横竖版视频互换背景模糊一键生成

视频处理是现代多媒体应用中常见的需求。其中横竖版视频互换和背景模糊是视频编辑中常见的操作。FFmpeg是一个功能强大的工具,适用于这些任务。 本文将详细介绍如何使用FFmpeg进行横竖版视频互换和背景模糊。 文章目录 操作命令与命令说明横版转竖版竖版转横版背景模糊处理横…...

Java 华为真题-小朋友分班

需求&#xff1a; 题目描述 幼儿园两个班的小朋友在排队时混在了一起&#xff0c;每位小朋友都知道自己是否与前面一位小朋友同班&#xff0c;请你帮忙把同班的小朋友找出来小朋友的编号是整数&#xff0c;与前一位小朋友同班用Y表示&#xff0c;不同班用N表示学生序号范围(0&…...

机器学习必修课 - 编码分类变量 encoding categorical variables

1. 数据预处理和数据集分割 import pandas as pd from sklearn.model_selection import train_test_split导入所需的Python库 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 # Read the data X pd.read_csv(/content/Housing-prices-data/t…...

ClickHouse进阶(二十二):clickhouse管理与运维-服务监控

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作,你的点赞是对我创…...

Hadoop使用hdfs指令查看hdfs目录的根目录显示被拒

背景 分布式部署hadoop,服务机只有namenode节点,主机包含其他所有节点 主机关机后,没有停止所有节点,导致服务机namenode继续保存 再次开启主机hadoop,使用hdfs查看hdfs根目录的时候显示访问被拒 解决方案 1.主机再次开启hadoop并继续执行关闭 2.服务器再次开启hadoop并继…...

[Mac] 安装paddle-pipelines出现 ERROR: Failed building wheel for lmdb

今天在mac换了新系统&#xff0c;然后重新安装paddle-piplines的时候出现了下面的问题&#xff1a; xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunerror: comma…...

LED灯亮灭

.text .global _start _start: 设置GPIO寄存器的时钟使能  RCC_MP_AHB4ENSETR[4]->1 0x50000a28LDR R0,0x50000A28LDR R1,[R0] 从R0为起始地址的&#xff14;个字节数据取出放入R1中ORR R1,R1,#(0x1<<4) 第四位设置为1STR R1,[R0] 写回LDR R0,0x5000…...

Acwing.143 最大异或对(trie树)

题目 在给定的N个整数A1&#xff0c;A2 . …Ax中选出两个进行xor(异或)运算&#xff0c;得到的结果最大是多少? 输入格式 第一行输入一个整数N。 第二行输入N个整数A1~AN。 输出格式 输出一个整数表示答案。 数据范围 1 ≤N ≤105,0≤A<231 输入样例: 3 1 2 3输出样…...

day10.8ubentu流水灯

流水灯 .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28LDR R0,0X50000A28LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1ORR R1,R1,#(0x1<<4) 第4位设置为1STR R1,[R0] 写回2.设置PE10管脚为输出模式 G…...

transformer系列5---transformer显存占用分析

Transformer显存占用分析 1 影响因素概述2 前向计算临时Tensor显存占用2.1 self-attention显存占用2.2 MLP显存占用 3 梯度和优化器显存占用3.1 模型训练过程两者显存占用3.2 模型推理过程两者显存占用 1 影响因素概述 模型训练框架&#xff1a;例如pytorch框架的cuda context…...

Docker项目部署

目录 一、前端项目部署 1、上传文件 2、开启容器 3、测试 二、后端项目部署 1、打包java项目 2、将jar包和Dockerfile文件长传到Linux系统 3、构建镜像 4、开启容器 5、测试 三、DockerCompose快速部署 基本语法 一、前端项目部署 1、上传文件 里面包括页面和配置文…...

vue3实现文本超出鼠标移入的时候文本滚动

判断文本长度是否大于容器长度 鼠标移入的时候判断&#xff0c;此处使用了tailwindcss&#xff0c;注意一下要设置文本不换行。 <divref"functionsItems"mouseenter"enterFunctionsItem($event, index)"><img class"w-5 h-5" :src&quo…...

光伏系统MPPT、恒功率控制切换Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

mysql双主互从通过KeepAlived虚拟IP实现高可用

mysql双主互从通过KeepAlived虚拟IP实现高可用 在mysql 双主互从的基础上&#xff0c; 架构图&#xff1a; Keepalived有两个主要的功能&#xff1a; 提供虚拟IP&#xff0c;实现双机热备通过LVS&#xff0c;实现负载均衡 安装 # 安装 yum -y install keepalived # 卸载 …...

​苹果应用高版本出现:“无法安装此app,因为无法验证其完整性”是怎么回事?竟然是错误的?

最近经常有同学私聊我问苹果应用签名后用落地页下载出现高版本是什么意思&#xff1f;我一脸懵&#xff01;还有这个操作&#xff1f;高版本是个啥玩意&#xff01;所以我就上了一下科技去搜索引擎搜索了下&#xff0c;哈哈哈&#xff0c;然后了解下来发现是这样的首先我们确定…...