文章目录

  • 前记
  • 服务攻防——第八十一天
    • 开发框架安全&SpringBoot&Struts2&Laravel&ThinkPHP&CVE复现
      • 开发框架 - 常见语言开发框架
      • PHP - 框架安全-Thinkphp&Laravel
        • Laravel
          • 漏洞介绍
          • 漏洞复现
            • CVE-2021-3129
        • ThinkPHP
          • 漏洞介绍
          • 漏洞复现
            • CVE-2018-1002015
            • QVD-2022-46174
      • J2EE - 框架漏洞-Struts2&SpringBoot
        • Struts2
          • 漏洞介绍
          • 漏洞复现
            • CVE-2016-0785(S2-029)
            • CVE-2020-17530(S2-061)
            • CVE-2021-31805(S2-062)
        • SpringBoot
          • 漏洞介绍
          • 漏洞复现
            • CVE-2021-21234
            • CVE-2022-22963
            • CVE-2022-22965
            • CVE-2022-22947

前记

  • 今天是学习小迪安全的第八十一天,今天主要是了解PHP和Java的框架漏洞,包括PHP的ThinkPHPLaravel,Java的Struts2SpringBoot
  • 因为是复现其CVE漏洞,所以内容比较多,然后也介绍了很多工具,下去可以归个类,自己也好好复现一下

服务攻防——第八十一天

开发框架安全&SpringBoot&Struts2&Laravel&ThinkPHP&CVE复现

开发框架 - 常见语言开发框架

  • PHP
    • ThinkPHP:国内常用的PHP框架,目前主流的版本为TP8,也有很多企业使用TP6
    • Laravel:国内外都比较常用的框架,安全性比TP高,目前主流版本为Laravel11
    • YII / YII2:国外常用开发框架,目前主流版本为YII2
    • CodeIgniter
    • CakePHP
    • Zend
    • Symfony
  • JAVA
    • Struts / Struts2:早些年最流行的JAVA框架,目前可能只有一些老项目能够见到
    • Spring:15年左右Spring MVC逐渐成熟,成为主推的开发框架
    • SpringBoot:20年左右SpingBoot以 “零配置” 的优点引爆市场;并且随着SpringBoot3.0正式到来,其整体渗透率达到了惊人的68%,是目前最常见的JAVA开发框架
    • MyBatis:是国内常用的JAVA数据库访问控制组件
    • Hibernate:国外常用的JAVA数据库访问控制组件
  • Python
    • Django:是目前国内外主流的Python开发框架,主流版本为5.1 LTS
    • Flask / FlaskAPI:Flask和FlaskAPI也是比较常见的框架
    • Bottle
    • Turbobars
    • Tornado
    • Web2py
  • JavaScript
    • React:UI组件层框架,目前主流版本为18.3,国内外都比较常用
    • Vue.js:比较常用的JS前端框架,主流版本为3.5,国内比较常用
    • Node.js:JS运行时框架,主流版本为22 LTS,JS全栈开发离不开
    • Angular
    • Svelte
    • Bootstrap
    • JQuer:主流版本为3.7.1,老项目仍在使用

PHP - 框架安全-Thinkphp&Laravel

Laravel
漏洞介绍
  • Laravel 是一套简洁、优雅的 PHP Web 开发框架(PHP Web Framework)
  • CVE-2021-3129
    • 漏洞描述:当 APP_DEBUG=true 时,内置调试组件 Ignition 的「解决方案」接口未过滤用户输入,可通过 Phar 反序列化实现远程代码执行。
    • 影响版本
      • Laravel ≤ 8.4.2
      • facade/ignition < 2.5.2
    • 利用条件
      • 开启Debug模式(APP_DEBUG = true
      • igniton组件版本低于2.5.2
  • CVE-2022-31279
    • 漏洞描述:Laravel 9.1.8 之前未对「广播队列」负载做签名校验,攻击者可投递恶意序列化对象,触发 POP 链 RCE
    • 影响版本
      • Laravel < 9.1.8
    • 利用条件
      • 使用 redis/database 等广播驱动
      • 队列 worker 消费攻击者可控的广播数据
  • CVE-2024-47823
    • 漏洞描述:Livewire 上传组件只看 MIME 类型,未校验真实后缀,导致可上传 .php 文件。
    • 影响版本
      • Livewire 2 ≥ 2.12.7< 3.5.2
      • Livewire 3 < 3.5.2
    • 说明:Livewire 是 Laravel 的“全栈动态界面”框架,属于其第三方组件,并非框架漏洞
  • CVE-2025-53833
    • 漏洞描述:文档工具 LaRecipe 的 renderBlade() 直接把 Markdown 里的 {{ }}{!! !!} 交给 Blade 编译,造成 SSTI → RCE
    • 影响版本
      • LaRecipe < 2.8.1
    • 说明:LaRecipe 是 Laravel 的专用文档生成器,同样也属于其第三方组件,并非框架本身漏洞
  • CVE-2024-55556
    • 漏洞描述:Laravel 的 decrypt() 会自动反序列化解密数据;一旦 APP_KEY 泄露,攻击者可构造恶意 payload 触发 RCE
    • 影响版本
      • Laravel 10.x(含10.x)之前的所有版本
    • 利用条件(满足其一即可):
      • SESSION_DRIVER=cookie 且 KEY 泄露
      • 业务把用户输入直接丢进 decrypt()
漏洞复现
CVE-2021-3129
  • 首先开启靶机:
    在这里插入图片描述

  • 然后我们就直接使用工具一把梭就好了,项目地址:https://github.com/zhzyker/CVE-2021-3129

  • 下载文件夹之后我们使用命令:

python exp.py http://123.58.224.8:20094

在这里插入图片描述

  • 可以看到第二个,还有其他下面的很多都能够成功返回whoami的执行结果,说明存在该漏洞
  • 其实这个exp.py本身是基于phpggc这个工具的,为什么是上面特定的exp执行成功就是因为这几个exp满足当前的Laravel版本:
    在这里插入图片描述
ThinkPHP
漏洞介绍
  • ThinkPHP 是一套开源的、基于 PHP 的轻量级 Web 应用开发框架。
  • CVE-2018-1002015
    • 漏洞描述:在解析控制器名时,直接把用户输入拼接到类名字符串,且仅做简单正则过滤,允许插入反斜杠 \\ 穿越命名空间,从而可调用任意公共方法。
    • 影响版本
      • TP 5.0.x≤ 5.0.23
      • TP 5.1.x< 5.1.31
    • 利用条件
      • url_route_must 保持默认(false,未开启强制路由)
  • CVE-2019-9082
    • 漏洞描述:框架把 PATHINFO 直接当控制器类名,导致可调用任意 public 方法
    • 影响版本
      • TP 5.0.0~5.0.23
    • 利用条件
      • url_route_must 未开启(默认)
  • CVE-2018-20062
    • 漏洞描述:5.1 重写路由后,对控制器名正则过滤不完整,可插入 \ 穿越
    • 影响版本
      • TP 5.1.0~5.1.31
    • 利用条件
      • url_route_must 未开启(默认)
  • CNVD-2021-44350
    • 漏洞描述Builder::parseData() 把数组键名当字段名拼接,未过滤导致SQL注入
    • 影响版本
      • TP 5.0.13~5.0.15
      • TP 5.1.0~5.1.5
    • 利用条件
      • $_POST 直接当数组键名写进 insert()
  • CVE-2022-45982
    • 漏洞描述:默认文件/Redis 缓存对数据 unserialize(),可被写入恶意对象
    • 影响版本
      • TP 6.0.0~6.0.13
      • TP 6.1.0~6.1.1
    • 利用条件
      • 使用默认缓存驱动
  • QVD-2022-46174
    • 漏洞描述lang=../../../path 可穿越包含任意 PHP 文件
    • 影响版本
      • TP 5.0/5.1 全分支
      • TP 6.0.1~6.0.13
    • 利用条件
      • 开启多语言(lang_switch_on=true
    • 文件上传:在开启register_argc_argv且安装了pcel/pear的情况下,可以包含/usr/local/lib/php/pearcmd.php并写入任意文件
  • CVE-2024-48112
    • 漏洞描述think\exception 模板渲染链可被反序列化,导致任意代码执行
    • 影响版本
      • TP 6.1.3~8.0.4
    • 利用条件
      • 开启异常模板调试(默认关闭)
  • 我看了一下,在8月5号的时候TP5又爆出来一个RCE,但是这里就不多写了,具体可以自查CVE官网:CVE: Common Vulnerabilities and Exposures
漏洞复现
  • 同样,直接工具一把梭即可,这里工具可以直接使用ONE-FOX自带的thinkphp检测工具,也可以使用蓝鲸这个工具
  • 下载地址:https://github.com/bewhale/thinkphp_gui_tools/
CVE-2018-1002015
  • 启动靶场,然后访问目标网站:
    在这里插入图片描述

  • 这里从图标可以看出来网站是Thinkphp搭建,但是没有具体版本号,但是可以尝试让他报错,看看是否暴漏版本号:
    在这里插入图片描述

  • 这里确实可以拿到版本号为TP 5.1.30,符合上面好几个的漏洞版本,那这里我们就可以一个一个试了

  • 假设我们知道这里就是关于CVE-2018-1002015的漏洞利用,所以我们就也是直接使用Payload

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

在这里插入图片描述

  • 成功执行任意命令,接下来就可以尝试上传WebShell
  • 当然,这里使用工具一把梭也是能够RCE的:
    在这里插入图片描述
QVD-2022-46174
  • 启动靶机,访问地址/public/index.php
    在这里插入图片描述

  • 直接给出了TP版本号为6.0.12,那可以利用的也就那几个漏洞,一个一个试就完了

  • 当然这里我们查看网络数据包发现Set-Cookie的值有个think_lang=zh-cn,可以猜测存在多语言的漏洞:
    在这里插入图片描述

  • 直接抓包,转到Repeater模块,写入如下Payload看看是否有回显:

/public/index.php?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+/var/www/html/shell.php

在这里插入图片描述

  • 然后我们访问shell.php看看是否创建了phpinfo()的页面:
    在这里插入图片描述

  • 说明存在RCE漏洞,同样我们也可以尝试使用工具一把梭:
    在这里插入图片描述

  • 也可以扫出来可能存在这个漏洞,手动验证一下即可

J2EE - 框架漏洞-Struts2&SpringBoot

Struts2
漏洞介绍
  • Apache Struts2框架是一个使用JavaEE网络应用程序的Web框架,可能存在OGNL表达式注入扩展,从而造成RCE,风险极大
  • CVE-2020-17530(S2-061):
    • 漏洞描述:标签属性二次 OGNL 解析
    • 影响版本
      • Struts2 2.0.0 ~ 2.5.25
    • 利用条件
      • 目标应用使用受影响标签
      • 标签的“id”或其他可二次解析属性被赋值为用户可控数据
      • 服务器未升级到 2.5.30/6.0.0 以上
  • CVE-2021-31805(S2-062):
    • 漏洞描述:这是对 2020 年 CVE-2020-17530(S2-061)补丁的“二次绕过”。当 JSP 标签属性使用 %{...} 强制 OGNL 评估且属性值来自用户输入时,攻击者仍可注入 OGNL 表达式,导致任意代码执行。
    • 影响版本
      • Struts 2.0.0 ~ 2.5.29(含)
    • 利用条件
      • CVE-2020-17530
  • CVE-2023-50164(S2-066):
    • 漏洞描述:文件上传拦截器对“上传路径+文件名”的校验存在缺陷,允许攻击者通过构造 ../ 序列将任意文件写入 Web 容器可执行目录,进而导致远程代码执行。
    • 影响版本:
      • Struts2 2.5.0 ~ 2.5.32
      • Struts2 6.0.0 ~ 6.3.0
    • 利用条件:
      • 应用使用了 <s:file> 上传功能并且保存路径由后端自动拼接
      • 未对上传后缀或路径做额外白名单限制
      • 具备文件上传权限(多数场景无需管理员身份)
  • 其他漏洞,看到比较全的文章是这篇:Struts2框架漏洞总结与复现 - FreeBuf网络安全行业门户
漏洞复现
  • 同样,直接工具一把梭即可,工具可以使用ONE-FOX自带的struts2全版本检测工具
  • 该工具目前仍在更新,下载地址:https://github.com/abc123info/Struts2VulsScanTools/releases
CVE-2016-0785(S2-029)
  • 这个是老漏洞了,像这种就纯是用工具一把梭了,基本实战已经碰不到了

  • 启动靶场,是这个样子的:
    在这里插入图片描述

  • 怎么判断是否为Struts2框架呢,首先是看看指纹识别工具是否能够识别出,然后可以看看有没有.action这种后缀的页面,最后实在没有就看这个网站它是不是哪种看起来就特别老的网站,并且是Java语言开发的

  • 这里并没有,也不用管,反正就盲扫就盲扫就完了:
    在这里插入图片描述

  • 也是能够成功扫到漏洞并利用成功

CVE-2020-17530(S2-061)
  • 启动靶机,也是不管,就扫:
    在这里插入图片描述

  • 这里又是扫到了,然后他提示并没有利用功能,但是我们选择执行命令,仍然是可以执行成功的:
    在这里插入图片描述

  • 当然,如果确定漏洞,但这里也利用不了的话,我们就使用具体的利用工具:yaunsky/s2-061-rce: s2-061批量扫描兼命令执行exp
    在这里插入图片描述

  • 成功利用

CVE-2021-31805(S2-062)
  • 启动靶机,然后访问网站,还是用工具扫:
    在这里插入图片描述

  • 不过很可惜的是这里并没有扫出来,当然也可以使用其他的工具扫描,比如Tscan、Yakit等等带PoC的工具慢慢尝试

  • 这里也假设知道了就是这个漏洞,我们就使用网上的exp进行利用即可,下载地址:pyroxenites/s2-062: 远程代码执行S2-062 CVE-2021-31805验证POC

  • 这里使用有回显的那个脚本都是利用失败的,原因是因为这里传入的参数为name,但脚本中的默认参数为id

  • emmm,虽然改完之后也没用,可能他是不回显的,那我们尝试他的第二个dnslog带外的脚本:

python exp.py --url http://192.168.0.143:58503/s2_062/index.action --par name

在这里插入图片描述

  • 可以看到,是存在漏洞的,那么我们就尝试利用,这里抓包然后尝试反弹Shell

  • 怎么抓到python的包呢,我们就可以利用之前学到的Proxifier联动BP抓包:
    在这里插入图片描述

  • 抓到包之后转到Repeater模块:
    在这里插入图片描述

  • 这里先在kali上开启监听,比如监听9999端口:
    在这里插入图片描述

  • 然后我们将这个name的值转到Decode模块,URL解码之后,将命令改成反弹Shell的命令,然后URL编码:
    在这里插入图片描述

  • 替换参数之后发包,我还是不明白为什么这里老是连不上,真没办法理解是环境的问题还是我的问题

SpringBoot
漏洞介绍
  • CVE-2021-21234
    • 漏洞描述:spring-boot-actuator-logview(第三方日志查看器)在 0.2.13 之前版本未对 base 参数做校验,仅校验 filename 参数。攻击者可将 base 设为任意路径穿越串,拼接后读取日志根目录之外的任意文件,造成目录遍历/任意文件读取。
    • 影响版本
      • spring-boot-actuator-logview < 0.2.13
    • 利用条件
      • 应用显式引入上述依赖
      • /log/view/manage/log/view 端点可访问且未鉴权
      • 运行用户对目标文件具有读权限
    • 说明:该漏洞是第三方组件的漏洞,并非SpringBoot本身的框架漏洞,因此如果对方未引用该组件,便无法形成危害
  • CVE-2022-22947
    • 漏洞描述:Spring Cloud Gateway 在启用并暴露 Gateway Actuator 端点(/actuator/gateway/routes/actuator/gateway/refresh)时,允许远程攻击者通过 POST 创建恶意路由。路由中的 filter 字段会被 Gateway 内部 ShortcutConfigurable#getValue() 方法以 SpEL 表达式形式解析,且使用 StandardEvaluationContext,从而可执行任意系统命令,造成 未经身份验证的 RCE
    • 影响版本
      • Spring Cloud Gateway 3.1.x < 3.1.1
      • Spring Cloud Gateway 3.0.x < 3.0.7
      • 其他旧版本分支同样受此影响
    • 利用条件
      • 应用引入 spring-cloud-gateway-server 并启用 Actuatormanagement.endpoints.web.exposure.include=gateway*
      • 端点 未做认证保护(默认无鉴权)
      • 攻击者可发送 HTTP POST 请求到 /actuator/gateway/routes/{id}/actuator/gateway/refresh
      • 网关版本在受影响范围内。
    • 说明:和上面一样,这个漏洞本质是 Spring Cloud Gateway 的缺陷,不属于 Spring Boot 框架本身的漏洞
  • CVE-2022-22963
    • 漏洞描述:Spring Cloud Function 的 RoutingFunction 在收到 functionRouter 请求时,会把 HTTP 头 spring.cloud.function.routing-expression 的值直接交给 SpEL 解析器。攻击者可在该头写入任意 SpEL,从而远程执行系统命令。
    • 影响版本
      • 3.0.0.RELEASE ≤ Spring Cloud Function ≤ 3.2.2(含 3.1.6、3.2.2 等全部维护分支)
    • 利用条件
      • 应用引入 spring-cloud-function-context 并暴露 functionRouter 端点(默认即存在)
      • 路由功能开启(spring.cloud.function.routing.enabled=true,默认开启)
      • 攻击者可发送 HTTP POST 请求
    • 说明:同样,这个漏洞本质是 Spring Cloud FunctionSpEL 解析缺陷,不属于 Spring Boot 框架本身的漏洞
  • CVE-2022-22965
    • 漏洞描述:Spring Framework 5.3.17/5.2.19 及更早版本在 JDK 9+ 环境下,对 Java Bean 属性绑定过滤不完整,允许攻击者通过嵌套属性链访问 class.module.classLoader 等内部对象。结合 Tomcat 的 AccessLogValve 可在 Web 根目录写入任意文件,实现远程代码执行。
    • 影响版本
      • Spring Framework 5.3.0 ~ 5.3.17
      • Spring Framework 5.2.0 ~ 5.2.19
      • 其他旧分支同样受影响
    • 利用条件
      • JDK ≥ 9(模块系统绕过关键)
      • 使用 Spring MVC/WebFlux 且存在 POJO 参数绑定
      • 部署方式为 WAR 包运行在 Apache Tomcat(jar 包无法写入 webapps)
      • 未对 class.*Class.* 等字段做全局黑名单过滤
    • 说明:本质是 Spring Framework 核心缺陷,并非 Spring Boot 自身代码漏洞,但是基本上的项目都会将该组件拉进来,所以也算是其框架漏洞了
  • CVE-2022-27772
    • 漏洞描述:Spring Boot 自带的 Unix 启动脚本(spring-boot-loader-tools 生成的 init.d 服务)在创建临时目录时未校验符号链接,导致本地攻击者通过目录劫持实现任意文件写入/覆盖,最终可获取代码执行权限。
    • 影响版本
      • SpringBoot 2.2.0 ~ 2.2.10 RELEASE
      • SpringBoot 1.5.x
    • 利用条件
      • 应用以 systemd / init.d 方式安装并启用 Spring Boot 自带启动脚本
      • 攻击者已拥有本地普通用户 shell
      • 可预测或控制 /tmp/spring-boot-* 临时目录路径(默认权限 755,重启后清空)
  • CVE-2023-34055
    • 漏洞描述:Spring Boot 对外部配置源(环境变量、JNDI、spring.application.jsonspring.config.import)的信任链校验不足,攻击者可在容器/云平台注入恶意属性,导致敏感配置泄露或间接远程代码执行。
    • 影响版本
      • SpringBoot 2.6.x 全系列
      • SpringBoot 2.7.0 ~ 2.7.18
      • SpringBoot 3.0.0 ~ 3.0.11
    • 利用条件
      • 应用使用 spring-boot-starter-actuatorspring-cloud-kubernetes 等动态配置能力
      • 攻击者可控制 Pod/容器环境变量或 ConfigMap(例如拥有 patch 权限)
      • 应用将 Environment 属性直接拼接到命令行、JVM 参数或日志输出
漏洞复现
  • 对于大部分的SpringBoot漏洞,我们同样可以采用现成的工具,比如SpringBoot_Scan和YYBaby
  • 下载地址:
    • AabyssZG/SpringBoot-Scan: 针对SpringBoot的开源渗透框架,以及Spring相关高危漏洞利用工具
    • YYBaby Spring Scan —— 强大的 Spring & SpringBoot 漏洞扫描工具_秃兔安全
CVE-2021-21234
  • 启动靶机,先看看是不是SpringBoot框架:
    在这里插入图片描述

  • 显示为Spring框架,都差不多,那我们就直接用工具先扫一遍,看看能不能扫出东西:

python .\SpringBoot-Scan.py -v http://192.168.0.143:55190/

在这里插入图片描述

  • 那可以看到就扫出来了,直接利用即可,抓包然后逐个尝试其Payload
    在这里插入图片描述
CVE-2022-22963
  • 这个漏洞的靶机我们使用vulhub,因为vulfocus上好像没有,启动起来之后访问网站:
    在这里插入图片描述

  • 打开就是熟悉的报错页面,确定为SpringBoot,然后工具启动:
    在这里插入图片描述

  • 成功扫到了存在漏洞CVE-2022-22963,于是我们就在网上找找有没有直接利用的exp,下载地址:brinhosa/CVE-2022-22963-Spring-cloud-function-SpEL-RCE: Spring-cloud-function-SpEL-RCE 批量检测脚本,反弹shell_EXP,欢迎师傅们试用

  • 先在本地进行监听:

.\nc.exe -lvvp 9999
  • 然后运行这个脚本:
    在这里插入图片描述

  • 成功反弹Shell:
    在这里插入图片描述

  • 这里我们可以看看exp是怎么写的:
    在这里插入图片描述

  • 其实就很简单了,就是将反弹Shell的命令通过Runtiome.getRuntime().exec()去执行,然后放到请求头中发送给目标网站的/functionRouter路径

  • 当然我们也就可以直接尝试用BP抓包去利用,这里就不再尝试了

CVE-2022-22965
  • 这个漏洞我们也用vulhub,启动靶机之后访问网站:
    在这里插入图片描述

  • 可以看到指纹识别到为Spring,还是直接工具开扫:
    在这里插入图片描述

  • 这里让我们自己尝试,那直接访问提供的地址:
    在这里插入图片描述

  • 成功利用,那这里我们还是先搜一下有没有利用脚本,下载地址:likewhite/CVE-2022-22965: CVE-2022-22965 EXP

  • 我们就不利用了,直接看他的exp是怎么写的:
    在这里插入图片描述

  • 首先对请求头进行加工,这里添加一些数据,然后对请求的data数据,写入我们的payload,比如写入参数为cmd,写入的文件后缀为.jsp,文件名和文件路径都由用户指定,最后使用post提交

  • 那我们可以尝试抓包自己利用一下看看能不能成功:
    在这里插入图片描述

  • 比如这里写入文件名为tomcatwar.jsp,用post提交提示405方法不允许,改为get提交提示200成功,但是访问这个文件仍然显示不存在

  • 这个就不知道是什么原因了,我重新用那个SpringBoot_Scan利用了一遍抓包,换个文件名也不行,不懂

CVE-2022-22947
  • 这里我们又换回vulfocus靶场,启动起来,然后访问网站:
    在这里插入图片描述

  • 同样Spring框架,同样工具先扫描一遍:
    在这里插入图片描述

  • 这里就直接扫到了,我们还是再了解一下利用过程,这里也不用搜了,我感觉网上的exp好多都利用不了,直接看SpringBoot_Scan的数据包吧
    在这里插入图片描述

  • 他的逻辑就是首先创建一个路由,路径为/actuator/gateway/routes/路由名称,让他的值为命令执行的语句,执行id命令

  • 再访问这个路径,就可以看到命令执行的结果了:
    在这里插入图片描述

  • 之后再通过/static/uploadify/uploadFile.jsp?uploadPath=/static/uploadify路径上传一句话木马getshell

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

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

相关文章

从音频到Token:构建原神角色语音识别模型的完整实践

本文将带你从零实现一个基于音频Token化的角色语音识别系统&#xff0c;完整复现原神角色语音分类任务&#xff0c;包含数据处理、模型训练和推理全流程。音频波形通过滑动窗口转换为数值Token序列的过程 一、为什么需要音频Token化&#xff1f; 传统音频处理通常依赖MFCC、频谱…

关于TCP和UDP两种网络协议的区别

1、tcp协议TCP (Transmission Control Protocol - 传输控制协议)TCP 的核心目标是为应用层提供一条可靠的、无差错的、有序的字节流通道。主要特点&#xff1a;面向连接&#xff1a;在数据传输之前&#xff0c;必须通过“三次握手”建立稳定的连接&#xff0c;传输结束后通过“…

Alibaba Lens:阿里巴巴推出的 AI 图像搜索浏览器扩展,助力B2B采购

本文转载自&#xff1a;https://www.hello123.com/alibaba-lens ** 一、&#x1f31f; 一键截图&#xff0c;轻松找货&#xff1a;采购神器 Alibaba Lens 详解 Alibaba Lens 是阿里巴巴集团专为全球 B2B 采购商打造的一款智能浏览器插件&#xff08;支持 Chrome 等主流浏览器…

WPF常见问题清单

1.Grid 内容自动换行及自适应行高 <DataGrid Grid.Row"1" FontSize"14" IsReadOnly"True" VerticalScrollBarVisibility"Auto" RowHeight"NaN" ItemsSource"{Binding List}" AutoGenerateColumns"False…

Linux驱动开发笔记(十)——中断

视频&#xff1a;第13.1讲 Linux中断实验-Linux内核中断框架简介_哔哩哔哩_bilibili 文档&#xff1a;《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81.pdf》五十一章 1. 中断API函数 每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断。在Linux 内核中使用一…

ubuntu18.04安装PCL1.14

简化版说明 1. 安装依赖库&#xff1a; (1) boost1.84 &#xff08;https://www.boost.org/releases/1.84.0/&#xff09; tar vxf boost_xxx.tar.gz ./bootstrap.sh --prefix/usr/local/ ./b2 sudo ./b2 install (2) vtk9.1.0 &#xff08;https://vtk.org/files/releas…

python将pdf转txt,并切割ai

python将pdf转txt&#xff0c;并切割ai step1:pdf转换 from PIL import Image import pytesseract import os import tempfile from pdf2image import convert_from_path# 设置 Tesseract 路径 pytesseract.pytesseract.tesseract_cmd rC:\Users\wangrusheng\AppData\Local\Pr…

Ubuntu22.04更换阿里镜像源,ubuntu更换源

在 Ubuntu 22.04 上更换为阿里云镜像源可以加速软件包的下载和更新&#xff0c;大幅提升系统更新速度。以下是更换阿里云镜像源的步骤&#xff1a;1. 备份现有源列表在更换镜像源之前&#xff0c;建议先备份当前的源配置文件&#xff1a;bashsudo cp /etc/apt/sources.list /et…

Git版本控制工具+基础命令

Git是什么&#xff1f;Git是目前世界上最先进的分布式版本控制系统代码托管平台&#xff1a;Gitlab/Github/Gitee&#xff08;码云&#xff09;什么是版本控制系统&#xff1f;指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。版本控制最主要的功能就是追…

图解设计模式【3】

本系列共分为三篇文章&#xff0c;其中包含的设计模式如下表&#xff1a; 名称设计模式图解设计模式【1】Iterator、Adapter、Template Method、Factory Method、Singleton、Prototype、 Builder、Abstract Factory、 Bridge、 Strategy图解设计模式【2】Composite、 Decorato…

(纯新手教学)计算机视觉(opencv)实战十四——模板与多个对象匹配

图片旋转、图片镜像相关教学&#xff1a; &#xff08;纯新手教学&#xff09;计算机视觉&#xff08;opencv&#xff09;实战十三——图片旋转、图片镜像 的几种常用方法-CSDN博客https://blog.csdn.net/2302_78022640/article/details/151356600?spm1011.2415.3001.5331 模板…

Java面试核心知识点总结:Redis与MySQL高可用、高并发解决方案

在分布式系统开发中&#xff0c;高并发场景下的数据一致性、系统可用性以及性能优化始终是核心挑战。本文基于Java技术栈&#xff0c;结合Redis与MySQL的工程实践&#xff0c;系统梳理分布式系统设计的关键技术要点。一、Redis集群架构演进与高可用实践1.1 主从哨兵模式部署方案…

R 语言科研绘图第 72 期 --- mantel检验图

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

4.2-中间件之MySQL

4.2.1MySQL的基本知识SQL语句用于存取数据以及查询、更新和管理关系数据库系统。包括&#xff1a;DQL&#xff08;select&#xff09;、DML&#xff08;insert,update,delete&#xff09;、DDL&#xff08;create,alter,drop&#xff09;、DCL&#xff08;grant,revoke&#xf…

LVS + Keepalived 高可用负载均衡集群

目录 一、核心组件与作用 1. LVS&#xff08;Linux Virtual Server&#xff09; 2. Keepalived 二、DR 模式下的 LVS Keepalived 工作原理 1. 整体架构 2. 数据包流向&#xff08;DR 模式&#xff09; 三、部署步骤&#xff08;DR 模式&#xff09; 3.1 环境规划 3.2…

知识沉淀过于碎片化如何形成体系化框架

要将过于碎片化的知识沉淀转变为体系化的框架&#xff0c;必须采取一套自上而下设计与自下而上归集相结合的系统性方法&#xff0c;其核心路径在于首先进行战略性诊断与顶层蓝图设计、其次构建统一且可扩展的知识架构&#xff08;分类与标签体系&#xff09;、然后实施系统性的…

XLua教程之C#调用Lua

上一篇文章 XLua教程之入门篇-CSDN博客 在C#脚本中访问lua全局数据&#xff0c;特别是table以及function&#xff0c;代价比较大&#xff0c;建议尽量少做相关操作。 LuaEnv.Global.Get 用于获取一个全局变量&#xff0c;但是无法获取局部变量(用local修饰) 全局基本类型变量…

C++ 标准库中的哈希函数:从std::hash到自定义哈希器

C 标准库中的哈希函数&#xff1a;从 std::hash 到自定义哈希器 1. 引言 在上一篇中&#xff0c;我们介绍了哈希表为什么能够实现 O(1) 查找。 核心秘密在于&#xff1a;哈希函数。 在 C 标准库中&#xff0c;哈希表容器&#xff08;如 unordered_map、unordered_set&#xff0…

在图形 / 游戏开发中,为何 Pixels Per Unit(PPU)数值越小,物体在屏幕上显示的尺寸越大?

1. 什么是 PPU&#xff1f; PPU&#xff08;Pixels Per Unit&#xff09;指的是 多少像素对应游戏世界中的一个单位&#xff08;Unit&#xff09;。 在 Unity 等游戏引擎中&#xff0c;1 Unit 通常被视为世界空间的基本长度&#xff0c;比如 1 米。2. PPU 与物体大小的关系PPU …

【ZYNQ开发篇】Petalinux和电脑端的静态ip地址配置

使用Petalinux工具为ZYNQ板卡搭建嵌入式Linux操作系统&#xff0c;成功搭建后&#xff0c;用户通常会使用客户端软件对ZYNQ板卡上的Linux系统进行访问&#xff0c;软件需要知道ZYNQ板卡的ip地址才能进行访问&#xff0c;如果ip地址是动态变化的&#xff0c;软件每次访问都要重新…