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

2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板

题目来源:攻防世界  Confusion1

目录

一、打开靶机,整理信息

二、解题思路

step 1:查看网页源码信息

step 2:模板注入

step 3:构造payload,验证漏洞

step 4:已确认为SSTI漏洞中的Jinjia2模板漏洞,构造payload

三、小结


一、打开靶机,整理信息

        题目信息:php语言,可以用扫描器,

        Login和Register功能都用不了,Home就是当前页面

冷知识:蟒蛇——python  大象——elePHPant

蛇缠住了大象,猜测本题中用到了php+python,网页源码中该图片名称为:PythonVsPhp

二、解题思路

step 1:查看网页源码信息

Home页面读到了网页源码信息

Login、Register页面虽然报错,但是也包含了信息(看到其他师傅的wp才发现,报错页面也是会包含信息的)

        根据txt后缀,这里应该是暗示了flag的位置

step 2:模板注入

        新知识:服务器模板注入(SSTI)

服务器模板注入(SSTI)

1.概念:当应用程序在处理用户输入并将其直接嵌入到模板中进行渲染,而没有进行适当的输入验证和过滤时,就可能发生 SSTI 漏洞。攻击者可以利用这个漏洞,通过精心构造恶意输入,让模板引擎执行恶意代码,从而控制服务器。

2.攻击原理

  • 模板引擎工作流程:正常情况下,模板引擎从应用程序获取数据,将数据填充到模板的占位符中,然后生成最终的 HTML 页面返回给用户。例如,一个简单的模板可能是 “Hello, {{username}}!”,其中 {{username}} 是占位符,应用程序会将实际的用户名数据填充进去。
  • 攻击方式:攻击者利用 SSTI 漏洞,将恶意代码作为数据输入,模板引擎会把这些恶意代码当作合法的模板指令进行解析和执行。例如,在某些支持 Python 代码执行的模板引擎中,攻击者可能输入 {{__import__('os').system('rm -rf /')}},这条恶意代码如果被执行,就可能删除服务器根目录下的所有文件(在 Linux 系统中),造成严重破坏。

3.检测方法

  • 手动测试:在输入处输特殊字符与模板语句,如 Jinja2 中输{{7*7}} ,看能否执行。故意输错引发报错,分析含模板引擎调试信息的错误提示,判断是否存在漏洞。
  • 自动化扫描工具:借助 OWASP ZAP 等 Web 漏洞扫描器,模拟攻击场景检测。利用 Bandit 等代码扫描工具,排查开发代码中用户输入直接嵌入模板且无过滤的风险。
  • 日志分析:审查 Web 服务器日志,找含模板语法或恶意代码的异常请求。查看应用程序日志,依据处理用户输入时的异常记录,判断是否存在 SSTI 漏洞。

        如果处于解题阶段,可以挨个尝试漏洞(需要很大的知识储备量),但是学习的目的是为了增加知识储备量,所以学会漏洞原理以及出现场景才是重点。

        参考思路:https://blog.csdn.net/l8947943/article/details/122241240

step 3:构造payload,验证漏洞

        构造如下payload:(Login.php页面同样效果)

/register.php/{{7*7}}}

        说明存在SSTI漏洞,继续测试

/register.php/{{7*'7'}}}

        成功回显,说明是Jinja2或Twig模板

Jinja2

1.解释:Jinja2 是 Python 中一个非常流行的模板引擎,就像是一个神奇的 “代码模板加工厂” ,帮助开发者轻松创建动态网页或生成各种格式化文本。

2.基本用途:

  • 动态网页生成:在 Web 开发中,你可能需要根据不同用户请求,展示不同数据的网页。比如,电商网站要根据每个用户的浏览历史,展示个性化推荐商品列表。使用 Jinja2,你可以创建一个网页模板,里面预留一些 “空位”,然后根据具体数据来填充这些 “空位”,快速生成动态网页。
  • 配置文件生成:在开发过程中,有时需要生成各种配置文件。比如,为不同的服务器环境生成对应的数据库连接配置文件。Jinja2 能依据通用的配置模板和特定环境参数,生成准确的配置文件。

3.基础语法——Python表达式

  • 变量:用 {{ variable_name }} 来表示。变量就是你在 Python 代码中定义好,要传递到模板中的数据。例如,在 Python 代码中定义 name = "Alice",在 Jinja2 模板里就可以用 {{ name }} 来显示 “Alice”。
  • 控制结构
    • if 语句:类似于 Python 中的 if 条件判断。例如,{% if user.is_authenticated %} 欢迎,{{ user.name }}! {% else %} 请登录 {% endif %},它会根据 user.is_authenticated 的真假来决定显示哪部分内容。
    • for 循环:用于遍历列表等可迭代对象。比如,有一个商品列表 products = ['手机', '电脑', '平板'],在模板中可以用 {% for product in products %} <li>{{ product }}</li> {% endfor %},这样就能循环展示每个商品列表项。
  • 过滤器:对变量进行处理。例如,{{ "hello world" | capitalize }},这里 capitalize 是过滤器,它会把字符串 “hello world” 首字母大写,结果为 “Hello world”。常用过滤器还有 length(获取字符串或列表长度)、format(格式化字符串)等。

Twig模板

1.简述:展示逻辑分离。Twig 允许开发者创建模板文件,其中包含静态内容(如 HTML 标签)和动态占位符,然后通过 PHP 代码将动态数据填充到这些占位符中,最终生成完整的输出页面。

2.基本语法:

  • 变量输出:使用双花括号 {{ }} 来输出变量。例如,在 PHP 代码中定义了一个变量 $name = 'John';,在 Twig 模板中可以使用 {{ name }} 来输出这个变量的值。
  • 控制结构
    • if 语句:用于条件判断。
    • for 循环:用于遍历数组或对象。

    • 过滤器:用于对变量进行处理。例如,{{ text|upper }} 会将 text 变量的值转换为大写。常用的过滤器还有 length(获取字符串或数组的长度)、date(格式化日期)等。

        二者差异性:Jinja2 的语法相对更灵活一些,能支持更多 Python 风格的表达式。Twig 语法更多遵循 PHP 的规范和习惯。

区分方法:用python的表达式,看能否正确解析,成功则为Jinja2,否则为Twig

  • Jinja2
    • Python 风格表达式:尝试输入 Python 风格的表达式,如 {{ [1, 2, 3][0] }} (列表索引操作)或 {{ __import__('os').system('id') }} (尝试执行系统命令,在有漏洞情况下)。如果页面能正确解析并执行这些 Python 风格的操作,很可能是 Jinja2 模板引擎。因为 Jinja2 与 Python 紧密结合,支持这类 Python 表达式。
    • 内置函数:测试 Jinja2 特有的内置函数,如 {{ cycler('a', 'b').next() }} ,若能得到预期结果,则可辅助判断为 Jinja2。
  • Twig
    • PHP 相关特性:输入符合 PHP 语法习惯的内容。例如,测试 Twig 中特有的功能,如使用 date 过滤器按照 PHP 的日期格式进行日期处理,输入 {{ "now"|date("Y-m-d") }} ,如果能正确显示格式化后的日期,更倾向于是 Twig 模板。

传参:/register.php/{{ __import__('os').system('id') }}

得到回复:不要使用这种方法——意为该漏洞存在,说明方向正确

传参:/register.php/{{ "now"|date("Y-m-d") }}

得到回复:不行!换一种方法

        由此可以确定是Jiinjia2模板,这里也验证了Home页面的图片,蟒蛇python更胜一筹

step 4:已确认为SSTI漏洞中的Jinjia2模板漏洞,构造payload

        使用python的open函数来读取文件,构造payload如下

/register.php/{{ open('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read() }}

        回显失败,应该是被过滤了,再次构造

getattr函数

1.Python内置函数,主要用于获取对象的属性值。

2.语法和参数

getattr(object, name[, default])

  • object:必选参数,要获取属性的对象,可以是自定义类的实例、内置对象(如列表、字典等)。
  • name:必选参数,字符串类型,表示要获取的属性名。
  • default:可选参数,如果指定的属性不存在,返回该默认值;若未提供该参数,且属性不存在,则会引发 AttributeError 异常。
/register.php/{{ ''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt' ).read() }}

        仍然回显错误,尝试逐字符拼接函数名

/register.php/{{ ''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt' )[ 'r' + 'e' + 'a' + 'd' ]() }}

        仍然被过滤,下面用到了request函数,构造payload

/register.php/{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

        得到了flag回显。

以上payload解释:

以一个空字符串 '' 作为起始对象,因为在 Python 中,所有对象都继承自 object 类,我们可以通过空字符串对象逐步向上查找类层次结构

''.__class__:获取空字符串对象的类,即 str 类。

__mro__:是 Python 类的一个属性,它表示方法解析顺序(Method Resolution Order),是一个包含类层次结构的元组。

[2]:通过索引 2 可以从 str 类的 __mro__ 元组中获取到 object 类。在 Python 中,object 类是所有类的基类,我们可以通过它获取所有子类列表

__subclasses__() 是 Python 类的一个方法,它会返回该类的所有直接子类组成的列表

索引 40 对应的类通常是 _io.TextIOWrapper 类(在 Python 3 中)或者 file 类(在 Python 2 中),这个类可以用于文件的读写操作

调用 _io.TextIOWrapper 类的构造函数,传入要读取的文件路径,从而打开指定文件

.read():调用打开文件对象的 read 方法,读取文件的全部内容

payload以及注释摘自:3.攻防世界 Confusion1(服务器模板注入SSTI)-CSDN博客

request是Flask框架的一个全局对象,表示“当前请求的对象(flask.request)"

Flask框架

1.基本概念:Flask 是一个轻量级的 Python Web 框架,它只提供了 Web 应用的核心功能,如路由、请求处理、响应返回等。开发者可以根据项目需求自由选择和集成各种扩展,这种灵活性使得 Flask 既适合初学者学习 Web 开发,也适合开发小型到大型的各种 Web 项目。

2.主要特点:

  • 轻量级与简洁性:Flask 的核心代码简洁,易于理解和上手。它不强制使用特定的数据库、模板引擎或其他组件,开发者可以根据自己的喜好进行选择。例如,Flask 本身不自带数据库操作功能,但可以轻松集成 SQLAlchemy(用于关系型数据库)或 MongoEngine(用于 MongoDB)等数据库操作库。
  • 高度可扩展性:拥有丰富的扩展生态系统,涵盖了从用户认证、数据库操作到缓存管理等各个方面。例如,Flask-Login 可用于用户登录管理,Flask-SQLAlchemy 简化了数据库操作,Flask-Caching 可以实现缓存功能。
  • 灵活性:允许开发者自由组织项目结构,无论是小型的单文件应用,还是大型的模块化项目,Flask 都能很好地适应。开发者可以根据业务需求灵活设计路由、视图函数和模板结构。

三、小结

1.SSTI模板注入,以下流程很重要

逐步排查验证,然后构造payload

2.Jinja2模板和Twig模板区别在于,前者更多使用Python,后者更多使用php语言,可以从两种语言的不同进行区分两种模板

3.SSTI模板注入和前面做过的xss模板注入的沙箱逃逸,都用到了双花括号中加入计算式进行验证漏洞,以后也可以多使用,看是否能遇到相似题目

相关文章:

2025.2.8——二、Confusion1 SSTI模板注入|Jinja2模板

题目来源&#xff1a;攻防世界 Confusion1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;查看网页源码信息 step 2&#xff1a;模板注入 step 3&#xff1a;构造payload&#xff0c;验证漏洞 step 4&#xff1a;已确认为SSTI漏洞中的Jinjia2…...

Mysql 函数解析

文章目录 一、模糊匹配【like】二、CASE函数1、简单case2、搜索case3、搜索case 聚合函数 一、模糊匹配【like】 一般形式为&#xff1a;列名 [NOT] LIKE ‘%关键字%’&#xff0c;示例如下&#xff1a; like %北京%列名包括北京的字样like ‘北京%’ 列名北京开头like ‘%北…...

Docker 部署 MongoDB | 国内阿里镜像

一、简易单机版 1、镜像拉取 docker pull registry.cn-hangzhou.aliyuncs.com/farerboy/mongo:8.0.5-rc1 2、运行镜像 docker run -it --name mongodb \ -e MONGO_INITDB_ROOT_USERNAMEmongoroot \ -e MONGO_INITDB_ROOT_PASSWORDmongoroot \ -v /wwwroot/opt/docker/mong…...

加速度计信号处理

【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究&#xff08;Matlab代码实现&#xff09;_加速度计滤波器-CSDN博客 https://wenku.baidu.com/view/622d38b90f22590102020740be1e650e52eacff9.html?_wkts_1738906719916&bdQ…...

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3&#xff0e;使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…...

20240824 美团 笔试

文章目录 1、单选题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、编程题2.12.2岗位:硬件开发工程师(嵌入式系统软件开发方向) 题型:20 道单选题,2 道编程题题 1、单选题 1.1 C 语言中,如果输入整数 v 是 2 的幂,下面表达式中哪个会返…...

【扫描件PDF】如何批量识别扫描件PDF多个区域内容保存到Excel表格,基于WPF和腾讯OCR的详细解决方案

在很多实际业务场景中&#xff0c;需要对大量扫描件 PDF 中的特定区域内容进行识别并整理到 Excel 表格里&#xff0c;以下是一些常见的应用场景&#xff1a;物流运单扫描件 PDF 中包含发货人信息、收货人信息、货物信息等。批量识别这些区域内容到 Excel 表格&#xff0c;有助…...

Django开发入门 – 3.用Django创建一个Web项目

Django开发入门 – 3.用Django创建一个Web项目 Build A Web Based Project With Django By JacksonML 本文简要介绍如何利用最新版Python 3.13.2来搭建Django环境&#xff0c;以及创建第一个Django Web应用项目&#xff0c;并能够运行Django Web服务器。 创建该Django项目需…...

C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割

在一个热闹的科技公司里&#xff0c;阿强是一个负责图像分析的员工。他的日常工作就是从各种复杂的图像中提取出有用的信息&#xff0c;可这可不是一件轻松的事情哦 最近&#xff0c;阿强接到了一个艰巨的任务&#xff1a;要从一堆嘈杂的监控图像中分离出运动的物体&#xff0c…...

SIPp的参数及命令示例

以下是SIPp参数的分类表格整理&#xff0c;方便快速查阅和使用&#xff1a; SIPp 参数分类表格 分类参数描述默认值示例基本参数-sc指定XML场景文件&#xff08;客户端模式&#xff09;无-sc uac.xml-sd指定XML场景文件&#xff08;服务器端模式&#xff09;无-sd uas.xml-i本…...

【Mac排错】ls: command not found 终端命令失效的解决办法

【TroubleShooting on Mac】ls: command not found 终端命令失效的解决办法 A Solution to Solve “Command not found” of Terminal on Mac 一直在使用心爱的MacBook Pro的Terminal&#xff0c;并且为她定制了不同的Profile。 这样&#xff0c;看起来她可以在不同季节&…...

【OneAPI】通过网页预渲染让搜索引擎收录网页

API简介 网页预渲染&#xff0c;适用于动态网页以及单页面的SEO&#xff0c;支持网页缓存。 您无须更改代码即可让搜索引擎收录您的网页。只要将需要预渲染的页面转发的本接口即可。 如果您使用Nginx作为网页服务器&#xff0c;推荐使用以下配置&#xff1a; #您的网站locat…...

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…...

git命令行删除远程分支、删除远程提交日志

目录 1、从本地通过命令行删除远程git分支2、删除已 commit 并 push 的记录 1、从本地通过命令行删除远程git分支 git push origin --delete feature/feature_xxx 删除远程分支 feature/feature_xxx 2、删除已 commit 并 push 的记录 git reset --hard 7b5d01xxxxxxxxxx 恢复到…...

05-多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 方法一&#xff1a;哈希表法 通过哈希表来记录每个元素出现的次数&#xff0c;…...

一个简单的Windows TCP服务器实现

初始化 WSADATA wsaData; SOCKET serverSocket, clientSocket; struct sockaddr_in serverAddr { 0x00 }; struct sockaddr_in clientAddr { 0x00 }; int clientAddrLen sizeof(clientAddr);if (WSAStartup(MAKEWORD(2, 2), &wsaData) ! 0) {printf("WSAStartup f…...

salesforce 中 Account 转移给新 Owner 后如何仅转移 Case,而不转移 Opportunity

在 Salesforce 中&#xff0c;当更改 Account Owner 时&#xff0c;系统默认会将所有相关的 Opportunities&#xff08;商机&#xff09; 和 Cases&#xff08;案例&#xff09; 也一并转移给新的 Account Owner。如果你希望 仅转移 Case&#xff0c;而不转移 Opportunities&am…...

Spring Boot 中的日志配置

文章目录 Spring Boot 中日志配置的源码分析1. Spring Boot 日志框架的选择与自动配置2. 日志自动配置与默认行为3. 日志系统的核心组件&#xff1a;Logger 和 LoggerFactory4. 日志配置文件的解析配置日志级别配置日志输出格式和目标 5. 日志级别的控制自定义日志级别 6. 自定…...

[前端]CRX持久化

在 Chrome 扩展开发中&#xff0c;持久化保存数据通常使用 Chrome 的 storage API。storage API 提供了两种存储选项&#xff1a;local 和 sync。使用 local 存储的数据保存在本地浏览器中&#xff0c;只能在同一设备上访问。使用 sync 存储的数据可以在用户登录其 Google 帐户…...

绕组电感 - Ansys Maxwell 磁通链与电流

在本博客中&#xff0c;我将演示如何使用 Ansys Maxwell 中磁瞬态求解器的磁通链和电流结果来计算绕组电感。Ansys Maxwell 磁瞬态求解器在场计算中考虑了涡流效应&#xff0c;我将展示一种使用磁通链和电流结果来计算绕组电感的简单方法。 实际上&#xff0c;电感是非线性的…...

ComfyUI 安装教程:macOS 和 Linux 统一步骤

本教程将详细介绍如何在 macOS 和 Linux 上安装 ComfyUI。我们将从 安装 Anaconda 开始&#xff0c;到安装 PyTorch 和 ComfyUI&#xff0c;最后提供一些常见问题的解决方法。 macOS和linux安装步骤很相似 可以按照1️⃣安装anaconda2️⃣安装python3️⃣torch4️⃣comfyui Co…...

SMTP和POP3协议

SMTP和POP3协议 SMTP&#xff08;简单邮件传输协议&#xff09;和POP3&#xff08;邮局协议版本3&#xff09;是电子邮件系统中用于发送和接收邮件的核心协议。以下是它们的详细说明&#xff1a; 1. SMTP&#xff08;Simple Mail Transfer Protocol&#xff09; SMTP和POP3分…...

【C语言】#define和typedef的区别

文章目录 1.define特点 2.typedef特点 1.define #define 是预处理器指令&#xff0c;用来进行宏定义。它在编译之前由预处理器处理&#xff0c;主要用于定义常量、简单的函数宏或者代码片段的替换。 特点 文本替换&#xff1a;#define 主要用于文本替换&#xff0c;在编译前…...

2025清华:DeepSeek从入门到精通.pdf(附下载)

本文是一份关于如何深入理解和使用DeepSeek技术的全面指南&#xff0c;由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队编撰。DeepSeek是一家中国科技公司&#xff0c;专注于通用人工智能&#xff08;AGI&#xff09;的研发&#xff0c;其开源推…...

Linux运维——用户管理

Linux用户管理 一、Linux用户管理要点二、常用命令2.1、groupadd2.2、groupdel2.3、groupmod2.4、groups2.5、useradd2.6、userdel2.7、passwd2.9、su2.10、sudo2.10.1、给普通用户授权 sudo2.10.2、 免密码授权 sudo 一、Linux用户管理要点 创建用户组 - 使用 groupadd删除用…...

Redis持久化的两种方式:RDB和AOF

redis中的数据存储在缓存中&#xff0c;如果没有持久化的策略&#xff0c;Redis一旦宕机&#xff0c;那么将会导致数据丢失&#xff1b;因此redis提供了以下两种持久化方式&#xff1a;RDB和AOF 一般来说&#xff0c;大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…...

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…...

LIMO:上海交大的工作 “少即是多” LLM 推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型&#xff08;LLM&#xff09;中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据&#xff08;通常超过 100,000 个示例&#xff09;&#xff0c;但本文展…...

Windows逆向工程入门之汇编环境搭建

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…...

Git安全回退历史版本

Git安全回退历史版本 方法特点git revert保留所有中间提交历史&#xff0c;生成显式的反向提交&#xff0c;适合精确撤销特定提交。直接提交快速生成一个回退提交&#xff0c;无需处理多个撤销操作&#xff0c;适合简单回退到某个旧版本。 git revert 仅回退一个版本 git r…...

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 在白色家电领域&#xff0c;降压转换器的应用非常广泛&#xff0c;为了实现不同的功能就需要不同的电源轨。TPS542…...

ASP.NET Core 外部向SignalR的Hub发消息

实现 Hub类中的方法只应该用于消息的发布&#xff0c;而不应该用来写业务逻辑&#xff0c;SignalR中客户端给服务器端传递消息的超时时间为30s&#xff0c;如果对Hub类中的方法的调用执行时间超过30s&#xff0c;程序就会报错。可以在MVC控制器、托管服务等外部向客户端推送消…...

Ubuntu 多版本 gcc 配置常用命令备忘

用的频率不高&#xff0c;总忘记具体参数 1&#xff0c;安装多版本 gcc 以 gcc-11 和12 为例&#xff1a; sudo apt-get install gcc-11 gcc-12 sudo apt-get install gcc-11 gcc-12 2&#xff0c;配置多版本 gcc gcc 与 g 一起配置进数据库中&#xff1a; sudo update-a…...

树形表查询方法

树形数据表在开发中会经常遇到,parentid字段为父结点ID&#xff0c;它是树型结构的标志字段。 查询方法: 1.自连接查询 如果树的层级固定可以使用表的自链接去查询&#xff0c;比如&#xff1a;我们只查询两级课程分类&#xff0c;可以用下边的SQL selectone.id …...

OpenStack-Train版-Allinone自动化部署脚本

一、环境准备 操作系统&#xff1a;CentOS 7 或以上版本 建议配置&#xff1a; CPU&#xff1a;8 核或以上 内存&#xff1a;16 GB 或以上 磁盘&#xff1a;500 GB 或以上 网络配置&#xff1a; 确保虚拟机已配置静态 IP 地址 确保虚拟机可以正常访问外部网络 二、自动…...

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…...

Hono.js入门指南_从零开始构建Web应用

1. 引言 项目背景与动机 随着现代Web开发的快速发展,构建高效、轻量且易于维护的Web应用变得越来越重要。Hono.js作为一个轻量级的Node.js框架,以其简洁的API和高效的性能吸引了众多开发者。本文将带你从零开始,逐步构建一个功能齐全的Web应用,帮助你快速上手Hono.js。 …...

后盾人JS -- 模块化开发

开发模块管理引擎 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…...

python-leetcode 23.回文链表

题目&#xff1a; 给定单链表的头节点head,判断该链表是否为回文链表&#xff0c;如果是&#xff0c;返回True,否则&#xff0c;返回False 输入&#xff1a;head[1,2,2,1] 输出&#xff1a;true 方法一&#xff1a;将值复制到数组中后用双指针法 有两种常用的列表实现&#…...

echarts 3d中国地图飞行线

一、3D中国地图 1. 一定要使用 echarts 5.0及以上的版本; 2. echarts 5.0没有内置中国地图了。点击下载 china.json&#xff1b; 3. 一共使用了四层地图。 &#xff08;1&#xff09;第一层是中国地图各省细边框和展示南海诸岛&#xff1b; &#xff08;2&#xff09;第二层是…...

Vivado IP之浮点数Floating-point

在Vivado的IP Catalog中搜索Floating-point即可找到该IP Operation Selection界面 1.绝对值&#xff0c;即result|A| 2.累加 3.两个浮点数的加法或者减法 4.两个浮点数进行比较 5.两个浮点数的除法 6.求指数&#xff0c;即e^A 7.定点数到浮点数的转化 8.浮点数转化为定…...

只需三步!5分钟本地部署deep seek——MAC环境

MAC本地部署deep seek 第一步:下载Ollama第二步:下载deepseek-r1模型第三步&#xff1a;安装谷歌浏览器插件 第一步:下载Ollama 打开此网址&#xff1a;https://ollama.com/&#xff0c;点击下载即可&#xff0c;如果网络比较慢可使用文末百度网盘链接 注&#xff1a;Ollama是…...

DeepSeek和ChatGPT的优劣或者区别(答案来DeepSeek和ChatGPT)

DeepSeek的答案 DeepSeek与ChatGPT作为当前两大主流AI模型&#xff0c;在架构设计、性能表现、应用场景等方面存在显著差异&#xff0c;以下从多个维度进行对比分析&#xff1a; 一、架构与训练效率 架构设计 DeepSeek&#xff1a;采用混合专家&#xff08;MoE&#xff09;框架…...

1 推荐系统概述

推荐系统概述 1 推荐系统的意义平台方信息生产者&#xff08;物品&#xff09;信息消费者&#xff08;用户&#xff09;推荐和搜索的区别 2 推荐系统架构系统架构算法架构 3 推荐系统技术栈算法画像层召回/粗排精排重排序 工程 1 推荐系统的意义 信息生产者&#xff08;平台方…...

JavaEE架构

一.架构选型 1.VM架构 VM架构通常指的是虚拟机&#xff08;Virtual Machine&#xff09;的架构。虚拟机是一种软件实现的计算机系统&#xff0c;它模拟了物理计算机的功能&#xff0c;允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件&#xff…...

C++ labmbd表达式

文章目录 C++ Lambda 表达式详解1. Lambda 表达式的组成部分:2. Lambda 语法示例(1) 最简单的 Lambda(2) 带参数的 Lambda(3) 指定返回类型的 Lambda3. 捕获外部变量(1) 值捕获(复制)(2) 引用捕获(3) 捕获所有变量4. Lambda 在 STL 中的应用5. Lambda 作为 `std::function`6…...

当Axure遇见DeepSeek:设计工具的革命性进化

从传统的平面设计软件到如今的交互原型工具&#xff0c;设计工具经历了多次革命性的进化。然而&#xff0c;随着人工智能技术的不断发展&#xff0c;设计工具正面临又一次重大的变革。Axure&#xff0c;作为设计界知名的原型设计工具&#xff0c;以其强大的功能和灵活的操作性&…...

[LeetCode] day19 454. 四数相加 II

题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&…...

FPGA开发技能(10)热电偶测温ADS1118方案

文章目录 1.热电偶原理2.ADS1118方案2.1ADS介绍2.2原理设计2.3实物连接图2.4测温原理 3.误差校准3.1查表法3.2冷端补偿法 4.SPI操作时序5.传送门 1.热电偶原理 两个不同材料的金属线一端在同一结点连接&#xff0c;另一端放在被测温点&#xff0c;则二者会产生一定的压差&…...

CNN-day5-经典神经网络LeNets5

经典神经网络-LeNets5 1998年Yann LeCun等提出的第一个用于手写数字识别问题并产生实际商业&#xff08;邮政行业&#xff09;价值的卷积神经网络 参考&#xff1a;论文笔记&#xff1a;Gradient-Based Learning Applied to Document Recognition-CSDN博客 1 网络模型结构 …...