Windows安全基础——Windows WMI详解

Windows安全基础——WMI篇

1. WMI简介

WMI(Windows Management Instrumentation, Windows管理规范)是Windows 2000/XP管理系统的核心,属于管理数据和操作的基础模块。设计WMI的初衷是达到一种通用性,通过WMI操作系统、应用程序等来管理本地或者远程资源。它支持分布式组件对象模型(DCOM,Distribution Components Object Model)和Windows远程管理(WinRM),用户可通过WMI服务访问、配置、管理和监视Windows所有资源的功能。对于其他的Win32操作系统来讲,WMI是一个非常不错的插件,同时也是测试人员在攻防实战中的一个完美的**”无文件攻击“**入口途径。

2. WQL

WQL也就是WMI的SQL。WQL的全称是WMI Query Language(Windows管理规范查询语言),主要用于查询WMI的所有托管资源。它的语法与SQL相似,但只能执行数据的查询,不能对类或者实例执行创建、删除、修改等操作。

1. 基础语法
SELECT properties[, properties] FROM class [where clause]

1)SELECT代表WQL语句开始。

2)properties代表要查询的属性名称

3)FROM指定包含SELECT语句中所列出属性的类。

4)class代表要查询的类名称。

5)where clause为可选项,代表要过滤的信息,用来定义搜索范围。

2. 查询用例

1)在CMD命令中执行wbemtest命令进入WMI测试器中,如下图所示:

wmi1

2)在使用之前我们发现需要进行连接,选择默认连接选项即可, 如下图所示:

WMI2

3)连接默认的命名空间后可以看到如下图所示的内容。

WMI3

4)通过单机“查询”模块,可执行WQL语句查询,如下图所示:

WMI4

5)在此输入要执行的WQL语句

SELECT * FROM WIN32_Process where Name Like "%cmd%"

6)上述查询语句将会把当前正在运行的进程的可执行文件中名称包含“cmd”的文件返回到查询结果中。更具体地说,此查询语句将返回WIN32_Process类的每个实例的属性中名称包含“cmd”的属性,如下图所示:

WMI5

7)执行以下命令,从任务管理其中查看,如下图所示:

tasklist //打开任务管理器

WMI6

8)除了WIN32_Process属性之外, 还有很多属性。如需查询更多的WMI属性,可以使用PowerShell中的命令。PowerShell是Windows下功能强大的脚本语言,包含极其丰富的与WMI进行交互的功能。

9)通过PowerShell与WMI进行更多的交互,如下图所示:

powershell //切换到PowerShell

WMI7

10)若要通过PowerShell查看当前系统中的所有属性,可以执行如下命令,执行结果如下图所示:

Get-wmiObject -List  //查看当前系统中的所有属性

WMI8

3. WMI Client

在WMI交互时有很多客户端,实战中可以根据不同的场景选择已有的客户端进行操作。接下来详细介绍可以用于实战的WMI Client。

1. PowerShell

PowerShell是Windows操作系统下非常强大的脚本语言,可以通过PowerShell管理Windows操作系统中的所有功能。PowerShell支持以WMI和CIM两种命令方式与WMI进行交互,这两种命令方式的不同点在于:WMI命令只能用于DCOM协议,而CIM命令不仅支持DCOM协议,还支持WinRM协议。由此可见,CIM命令在与WMI交互时具有更好的灵活性。以下为PowerShell可以与WMI交互的功能。

  • Get-WmiObject
  • Get-CimAssociatedInstatnce
  • Get-CimClass
  • Get-CimInstance
  • Get-CimSession
  • Set-WmiInstance
  • Set-CimInstance
  • Invoke-WmiMethod
  • Invoke-CimMethod
  • New-CimInstance
  • New-CimSession
  • New-CimIndicationEvent
  • Register-CimIndicationEvent
  • Register-WmiEvent
  • Remove-CimInstance
  • Remove-WmiObject
  • Remove-CimSession
2. wmic.exe

wmic.exe是一款主要用于与WMI交互的命令行管理工具,它不但可以管理本地计算机,还能够在权限充分的情况下管理域控制器中的其他计算机。WMIC是Windows自带的一个功能,计算机只要支持WMI即可使用WMIC。因功能强大以及在Windows中免安装,WMIC在内网渗透中扮演着重要的角色。

3. WBEMTEST

WBEMTEST是Windows自带的一个与WMI基础结构交互的图形化工具,它支持任何Windows系统,在“运行”窗口中输入wbemtest并单击“确认”按钮即可打开。在弹出的“连接”窗口中选择命名空间(WBEMTEST不会浏览命名空间,需要我们手动选择以连接到指定命名空间),默认选择root\cimv2。这样,通过WBEMTEST工具就可以进行枚举对象实例、查询、创建和修改WMI类与对象等操作。

4. WinRM

WinRM(Windows Remtoe Management,Windows远程管理)是Windows操做系统的一部分,我们可以管理员的身份使用该命令。WinRM是WS管理协议的微软实现。WS管理协议是一种基于简单对象访问协议(SOAP, Simple Object Access Protocol)的标准防火墙友好型协议。开启WinRM服务后,占用的端口(默认情况下,WinRM HTTP服务占用5985,HTTPS占用5986)不会被防火墙拦截,因此我们在内网渗透中可以通过Wi你RM进行横向渗透。

5. Win explorer

Win explore (Windows资源查看器)是一款图形化查看WMI信息的工具。它与WBEMTEST类似,不过比WBEMTEST功能更丰富,使用起来更方便。Win explorer允许用户浏览完整的WMI管理类集、对象及其属性,浏览远程计算机上的对象和设置,以及执行任何WQL查询和查看结果集。

6. WSH

VBScript和JScript是微软提供的两种WSH(Windows Script Host)脚本开发语言。这两种脚本开发语言早已过时,但是它们在与WMI交互时仍有很强大的能力。目前市面上已经出现了基于这两种语言开发、使用WMI功能完成基本的命令与控制机制的后门程序。目前只有VBScript和JScript支持调用Event Consumer(事件消费者)接口ActiveScript-EventConsumer(事件消费者组件)来实现无文件写入。

4. WMI远程交互

当前,WMI支持两种远程交互协议:DCOM协议和WinRM协议。我们可以通过这两种协议对远程计算机进行对象查询、事件注册及WMI类方法的执行等操作。攻击者要有效利用这两种协议,需要具备一定的特权用户凭据,因此大多数安全常见通常不会对这两种协议所传输的恶意内容及恶意流量进行审查。这就使得这两种协议对于攻击者有了可利用的空间。接下来分别介绍这两种协议。

1. DCOM

DCOM(分布式组件对象模型)是微软基于COM(组件对象模型)推出的一系列概念和程序接口。通过该技术,在局域网、广域网甚至Internet上不同计算机的对象之间能够进行通信,从而在位置上达到分布性,满足客户和应用的需求。

在了解DCOM之前,我们先简单介绍一下COM技术。COM是微软的一套软件组件接口标准,定义了组件和本地客户端之间互相作用的方式。它使组件和客户端不需要任何中介组件就能相互联系。而DCOM是COM的扩展,使用DCOM可以不受本地限制,通过远程过程调用(RPC)技术实现客户端实例化和访问远程计算机的COM对象。

DCOM为分布在网络不同节点的两个COM组件提供了互相操作的基础结构。它增强了COM的分布式处理性能,支持多种通信协议,加强了组件之间通信的安全保障。DCOM在组件中作用为:作为PC间通信的PCI和ISA总线,负责各种组件之间的传递。如果没有DCOM,则达不到分布式计算环境的要求。

2. WinRM

WinRM(Windows远程管理)目前已成为Windows建议使用的远程管理协议。WinRM是基于WS管理协议所构建的一种基于SOAP的设备管理协议,它允许使用SOAP通过HTTP(S)远程管理Windows计算机,其后端利用了WMI,我们可以把它看作一个基于HTTP的WMI API。另外,PowerShell Remoting是基于WinRM规范的。当计算机启用了行管理。在默认情况下,WinRM会监听5985/TCP(HTTP)、5986/TCP(HTTPS)这两个端口中任意一个,只要其中任意一个端口处于监听状态,都表示WinRM已经配置

可以通过在PowerShell中使用Test-WSMan函数来验证目标是否已经配置了WinRM。如果Test-WSMan返回了如下图所示的信息,则表示目标系统中的WinRM服务处于监听状态。

WMI9

5. WMI事件

1. WMI永久事件订阅组成

(1)事件过滤器

事件过滤器(Event Filter)存储在一个ROOT\subscription:_EventFilter对象的实例里,其主要作用是使用WMI的查询语言来过滤审核特定的事件。一个事件过滤器接收一个WMI事件查询参数,同时可以对内部事件(Intrinsic Event)和外部事件(Extrinsic Event)进行事件查询。

1)内部事件。我们在创建、删除、修改WMI类或类实例以及命名空间时所产生的事件,都可以称为i额内部事件。每个内部事件类都代表了一种特定类型的更改,内部事件作为系统类存在于每个命名空间。一般情况下,WMI为存储在WMI存储库中的对象创建内部事件,提供程序为动态类生成内部事件,如果没有可用的提供程序,WMI将会为动态类创建一个实例。以下为WMI用于报告内部事件的系统类。

_ClassCreationEvent                                 //创建类时通知消费者
_ClassDeletionEvent									//当类被删除时通知消费者
_ClassModificationEvent								//当类被修改时通知消费者
_InstanceCreationEvent								//创建类实例时通知消费者
_InstanceOperationEvent								//当任何实例事件发生时通知消费者
_InstanceDeletionEvent								//当实例被修改时通知消费者
_InstanceModificationEvent							//当实例被修改时通知消费者
_NamespaceCreationEvent								//当创建命名空间时通知使用者
_NamespaceDeletionEvent								//当命名空间被删除时通知消费者
_NamespaceModificationEvent							//当命名空间被修改时通知消费者
_ConsumerFailureEvent								//当某个其他事件由于事件消费者的失败而被丢弃时通知消费者
_EventDroppedEvent									//当一些其他事件被丢弃而不是传递给请求事件的消费者时通知消费者
_EventQueueOVerflowEvent							//当由于传递队列溢出而丢弃事件时通知使用者
_MethodInvocationEvent								//当方法调用事件时通知消费者

2)外部事件。外部事件是非系统类预定义事件,WMI使外部事件提供程序直接定义描述事件的事件类(例如当初计算机切换到待机模式的事件为外部事件时)。外部事件能够及时响应触发,解决了内部事件事件间隔的问题。虽然外部事件通常不会包含太多的信息,但其事件功能还是极其强大的。以下为常见的外部事件类。

ROOT\CIMV2:Win32_ComputerShutdownEvent ROOT\CIMV2:Win32_IP4RouteTableEvent
ROOT\CIMV2:Win32_ProcessStartTrace ROOT\CIMV2:Win32_ModuleLoadTrace
ROOT\CIMV2:Win32_ThreadStartTrace ROOT\CIMV2:Win32_VolumeChangeEvent
ROOT\CIMV2:Msft_WmiProvider*   ROOT\DEFAULT:RegistryKeyChangeEvent
ROOT\DEFAULT:RegistryValueChangeEvent

(2) 事件消费者

事件消费者(EventConsumer)指的是当事件传递给EventConsumer类时执行的命令动作,也可以理解为我们希望在事件触发时发生的特定操作。事件消费者大体可分为临时事件消费者和永久事件消费者两类。

1)临时事件消费者。只在运行期间关心并处理特定的事件。临时事件消费者必须手动启动,并且不能再WMI重新启动或操作系统重新启动后持续存在。临时事件消费者只能在其运行时处理事件。

2)永久性事件消费者。类实例注册在WMI命名空间中,一直有效直至注销。(永久性的WMI事件时持久性驻留的, 并且以SYSTEM权限运行,重启后仍然还在。)永久事件消费者一直运行到其注册被显示取消,并会在WMI或系统重启时启动。永久事件消费者是系统上WMI类、过滤器和COM对象的组合。

在事件消费者中,系统提供了如下WMI预安装的永久事件消费者的类,它们都属于Root\CTMV2以及ROOT\DEFAULT这两个命名空间。我们可以创建这些类的实例以提供永久事件消费者类,提供在过滤器中指定的事件触发时间时响应的逻辑消费者。例如,属于ActiveScriptEventConsumer类执行VBScript/JScript脚本代码程序。

LogFileEventConsumer					//将事件数据写入指定的日志文件
ActiveScriptEventConsumer				//允许执行任意脚本(VBScript/JScript)
NTEventLogEventConsumer					//创建一个包含事件数据的日志入口点
SMTPEventConsumer						//将事件数据用邮件发送
CommandLineEventConsumer				//执行一个命令

从红队的角度来看,我们比较关注两个类:可执行VBScript/JScript脚本代码程序的ActiveScriptEventConsumer类,以及可以运行任意命令的CommandLineEventConsumer类。这两个类为我们提供了很大的灵活性,供我们执行任何的有效载荷(payload),完美实现无文件写入。

(3)FilterToConsumerBinding

FilterToConsumerBinding(消费者绑定筛选器)将EventConsumer实例与EventFilter实例相关联,以明确什么事件由什么消费者处理和负责。如下代码通过创建FilterToConsumerBinding类的实例来将EventFilter和EventConsumer这两个实例连接绑定在一起。

instance of_FilterToConsumerBinding
{
	Filter = $EventFilter;
	Consumer = $Consumer;
};

2. 创建永久事件订阅

永久事件订阅是存储再CIM存储库中的一组静态WMI类,我们可以通过MOF的方式分4个步骤来创建永久事件订阅。如下是具体步骤以及创建永久事件订阅模板的MOF示例。

//1. 将上下文更改为ROOT\Subscription,命名空间中的所有标准使用者类都在那里注册
# pragma namespace("\\\\.\\root\\subscription")

//2. 创建_EventFilter类的实例并使用其查询属性来存储WQL事件查询
instance of_EventFilter as $EventFilter
{
    Name = "Event Filter Instance Name";
    EventNamespace = "Root\\Cimv2";
    Query = "WQL Event query text";
    QueryLanguage = "WQL";
};

//3. 创建_EventConsumer派生类的实例(ActiveScriptEventConsumer、SMTPEventConsumer等)
instance of_EventConsumer derived class as $Consumer
{
    Name = "Event Consumer Instance";
    //指定任何其他相关属性
};

//4. 创建 _FilterToConsumerBinding类的实例
instance of_FilterToConsumerBinding
{
    Filter = $EventFilter;
    Consumer = $Consumer;
};

6. WMI攻击

1. 信息搜集

在拿到内网某一台计算机的权限后,红队第一时间要做的就是收集信息。WMI中的各种类为内网信息收集提供了十分有利的条件,红队可以利用如下WMI中各种类的子集来对目标进行全方位的信息收集。

  • 主机/操作系统信息:Win32_OperatingSystem 、Win32_ComputerSystem。
  • 文件/目录列举:CIM_DataFile。
  • 磁盘卷列举:Win32_Volume。
  • 注册表操作:StdRegProv。
  • 运行进程:Win32_Process。
  • 服务列举:Win32_Service。
  • 事件日志:Win32_NtLogEvent。
  • 登录账户:Win32_LoggedOnUser/Win32_LogonSession。
  • 共享:Win32_Share。
  • 已安装补丁:Win32_QuickFixEngineering。
  • 网络信息:Win32_IP4RouteTable。
  • 用户账户:Win32_UserAccount。
  • 用户组:Win32_Group。
2. 杀毒引擎检测

默认情况下,杀毒引擎会自动注册在WMI的AntiVirusProduct类中的root\SecurityCenter或root\SecurityCenter2命名空间中,可以执行SELECT * FROM AntiVirusProduct查询语句来查询当前已安装的杀毒引擎。

3. 代码执行及横向移动

在内网中,可以利用事件订阅和win32_process类的Create方法来实现代码执行及横向移动。

(1)事件订阅

可以使用WMI的功能来订阅事件并在该事件发生时执行任意代码,从而在系统上提供持久化。例如:利用ActiveScriptEventConsumer(事件消费者组件类)来实现无文件写入或者利用_IntervalTimeInstruction类,让其在往后特定的几秒触发运行,让其作为我们的攻击向量,又或者将Win32_ProcessStartTrace的外部事件作为创建LogonUI.exe的触发器,实现在屏幕锁定后执行特定的操作。可以选择Windows系统中的任意一个事件筛选器来实现想要的操作。

(2)win32_process类的Create方法

win32_process类的Create方法是最经典的代码执行技术场景,通过运行进程win32_process类的Create方法来直接与本地或者远程计算机进行交互。

7. WMI攻击检测

WMI拥有极其强大的事件子处理系统,因在操作系统中的所有操作行为都可以触发WMI事件,我们可以将WMI理解成Windows操作系统自带的一个免费IDS(入侵流量检测)。WMI的定位就是实时捕获攻击者的攻击操作,而利用WMI所产生的事件可进一步判断一个操作是不是攻击者的操作。以下是攻击者常用的攻击利用手法以及触发的事件。

  • 攻击者使用WMI作为持久性机制,EventFilter、EventConsumer、FilterToConsumer被绑定创建,_InstanceCreationEvent事件被触发。
  • WMI Shell工具集被用作C2通道,会创建和修改命名空间对象的实例,因此会触发NamespaceCreationEvent和NamespaceModificationEvent事件。

创建WMI类存储攻击者数,_ClassCreationEvent事件会被触发。

  • 当攻击者安装恶意WMI提供程序时,一个Provider类的实例会被创建,InstanceCreationEvent事件会被触发
  • 当攻击者使用开始菜单或注册表做持久化时,一个Win32_StartupCommand类的实例会被创建,_InstanceCreationEvent事件会被触发。
  • 当攻击者安装服务时,一个Win32_Service实例会被创建,InstanceCreationEvent事件会被触发。
    onEvent和NamespaceModificationEvent事件。

创建WMI类存储攻击者数,_ClassCreationEvent事件会被触发。

  • 当攻击者安装恶意WMI提供程序时,一个Provider类的实例会被创建,InstanceCreationEvent事件会被触发
  • 当攻击者使用开始菜单或注册表做持久化时,一个Win32_StartupCommand类的实例会被创建,_InstanceCreationEvent事件会被触发。
  • 当攻击者安装服务时,一个Win32_Service实例会被创建,InstanceCreationEvent事件会被触发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建智能外卖跑腿小程序:技术实践与代码示例

在快节奏的现代生活中,外卖跑腿服务已成为人们日常生活中不可或缺的一部分。为了提供更智能、高效的外卖跑腿体验,本文将深入探讨构建一款智能外卖跑腿小程序所需的关键技术,并提供相应的代码示例。 1. 地理位置服务的整合 外卖跑腿小程序…

nodejs微信小程序+python+PHP个性化服装搭配系统APP-计算机毕业设计推荐 android

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Ubuntu22.04安装和卸载软件的命令行

一、安装 sudo apt install xxx 二、卸载 sudo apt remove xxx 三、卸载依赖包(可选) 第二步软件卸载之后,有一些依赖包没有被卸载。可以使用sudo apt autoremove xxx来卸载。如果不卸载应该也没什么影响

【开源】基于Vue和SpringBoot的高校学院网站

项目编号: S 020 ,文末获取源码。 \color{red}{项目编号:S020,文末获取源码。} 项目编号:S020,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教…

Python爬取酷我音乐

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…

Python-docx 深入word源码 自定义字符间距

代码和实现效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 调整pt设置字间距 def SetParagraphCharSpaceByPt(run, pt1):通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距…

【Maven教程】(十二):版本管理 ——版本号定义约定及相关概念,自动化版本发布与创建分支,GPG签名 ~

Maven 版本管理 1️⃣ 版本管理的概念2️⃣ Maven 的版本号定义约定3️⃣ 主干、标签与分支4️⃣ 自动化版本发布5️⃣ 自动化创建分支6️⃣ GPG签名6.1 GPG 及其基本使用6.2 Maven GPG Plugin 🌾 总结 一个健康的项目通常有一个长期、合理的版本演变过程。例如JUn…

Nginx访问FTP服务器文件的时效性/安全校验

背景 FTP文件服务器在我们日常开发中经常使用,在项目中我们经常把FTP文件下载到内存中,然后转为base64给前端进行展示。如果excel中也需要导出图片,数据量大的情况下会直接返回一个后端的开放接口地址,然后在项目中对接口的参数进…

Golang 使用 Template 引擎构建漂亮的邮件内容并且完成邮件发送

背景 邮件是常见的触达用户的途径,本文详细介绍基于 golang 的模版引擎构建漂亮的邮件内容,并且发送给模板用户。 思路 go 内置了 html/template 模块,类似 ejs 模块引擎。利用 template 能力可以将变量动态的注入到HTML字符串中&#xff…

迅为RK3568开发板使用OpenCV处理图像(颜色转换)

1 颜色转换 本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\05”目录下,如下图所示: cv2.cvtColor()函数功能: 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型&#xff…

5G CPE可代替宽带,解决断网问题

最近某运营商就玩起了套餐,断用户的网。 老百姓对宽带半知不解,网络断了没法上网,很着急。因为相信运营商,维修人员怎么说,老百姓就怎么办呗,直到最后才发现自己上当,但钱都给了。 截至2023年9月…

Django讲课笔记02:Django环境搭建

文章目录 一、学习目标二、相关概念(一)Python(二)Django 三、环境搭建(一)安装Python1. 从官方网站下载最新版本的Python2. 运行安装程序并按照安装向导进行操作3. 勾选添加到路径复选框4. 完成安装过程5.…

公共模块无法实例化Elasticsearch的interface类

public interface EsLogDao extends ElasticsearchRepository<EsLog, String> {}Data NoArgsConstructor Document(indexName "my_log") public class EsLog implements Serializable {Idprivate String id; } 出现的错误 解决方案&#xff0c;在公共模块增加…

centos7安全防护_CPU占用率超过百分之300_centos7.4中毒CPU百分之百_清理毒源---Linux工作笔记068

执行top命令的时候看到有个进程: sshd占用cpu百分之300多...而且就算是kill -9 杀掉进程以后,进程又会自动启动 ll /proc/7298 我们执行这个命令,可以看到有个/var/tmp/sshd的文件 我们进入cd /var/tmp 然后我们执行 rm -rf sshd删除这个文件,然后我们再去top可以看到 cpu就…

多线程(初阶九:线程池)

目录 一、线程池的由来 二、线程池的简单介绍 1、ThreadPoolExecutor类 &#xff08;1&#xff09;核心线程数和最大线程数&#xff1a; &#xff08;2&#xff09;保持存活时间和存活时间的单位 &#xff08;3&#xff09;放任务的队列 &#xff08;4&#xff09;线程工…

我的网站服务器被入侵了该怎么办?

最近有用户咨询到德迅云安全&#xff0c;说自己再用的网站服务器遇到了入侵情况&#xff0c;询问该怎么处理入侵问题&#xff0c;有什么安全方案可以解决服务器被入侵的问题。下面&#xff0c;我们就来简单讲下服务器遇到入侵了&#xff0c;该从哪方面入手处理&#xff0c;在预…

华清远见嵌入式学习——QT——作业3

作业要求: 代码效果图&#xff1a; 登录成功并跳转页面 登录失败 关闭 代码&#xff1a; 第一页面头文件&#xff1a; #ifndef LOGIN_H #define LOGIN_H#include <QWidget> #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Login; } QT_END_NAME…

Hbase2.5.5分布式部署安装记录

文章目录 1 环境准备1.1 节点部署情况1.2 安装说明 2 Hbase安装过程Step1&#xff1a;Step2:Step3:Step4&#xff1a; 3 Web UI检查状态并测试3.1 Web UI3.2 创建测试命名空间 1 环境准备 1.1 节点部署情况 Hadoop11&#xff1a;Hadoop3.1.4 、 zookeeper3.4.6、jdk8 Hadoop1…

OpenCV | sift函数使用——得到特征点

scale invariant feature transform (sift) 图像尺度空间 在一定的范围内&#xff0c;无论物体是大还是小&#xff0c;人眼都可以分辨出来&#xff0c;然而计算机要有相同的能力却很难&#xff0c;所以要让机器能够对物体在不同尺度下有一个统一的认知&#xff0c; 就需要考虑…

分页设计(平时在表下面的栏框,有首页 | 上一页 | 下一页 | 尾页),下面代码带你实现

分页设计的本质就是&#xff0c;分页查询&#xff0c;就是SQL语句当中的(select * from ? limit ? , &#xff1f;&#xff09;,这里第一个&#xff1f;是所分页的那张表 &#xff0c;第二个&#xff1f;从哪条开始&#xff0c;第三个&#xff1f;是在页面上想让这张表出现几…