渗透测试之内核安全系列课程:Rootkit技术初探(二)

今天,我们来讲一下内核安全!

本文章仅提供学习,切勿将其用于不法手段!

目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在PWN的二进制领域,免杀技术,一直是后渗透利用阶段的重要安全技术之一。

想要免杀,需要了解的安全技术知识包括软件加壳、代码混淆(例如,使用花指令)、隐匿技术(例如,Rootkit技术)、动态加密等内容。

接上一篇文章,我们来继续讲述下 Rootkit技术 的相关基础知识点内容!

我们讲到了 GDT 全局描述符表、LDT 局部描述符表、段选择器、段描述符、实模式、保护模式等相关的知识点内容。

学习 Rootkit 技术,这些必要的知识,是学习 Rootkit技术 的 前置知识基础

大家可以把这些知识,理解为 是 学习 Rootkit 技术 的 前置任务

上一篇文章中,我们重点讲述了 段选择器段描述符,现在我们来讲一下,线性地址,是如何被合成的!接下来,如果时间宽裕,我们还可以继续讲一下,线性地址,是如何转换成物理地址的!

想要了解线性地址的合成,我们就必须要知道两个非常重要的寄存器!

它们是,GDTR 全局描述符表 寄存器,还有 LDTR 局部描述符表 寄存器

细心的童鞋儿,会发现,GDTR 和 LDTR 寄存器,在命名规则上,除了首字母不同,其它都是相同的!那么 首字母的不同,说明着什么呢? GDTR 寄存器 的 命名中, G 是 Global 全局的意思!

LDTR 寄存器 的命名中,L 是 Local 本地的意思!

我们通过命名规则,即可看出。GDTR 和 LDTR 寄存器 在 用途上的不同 !

GDTR 寄存器 用于 指向 全局描述符表线性地址

是的! GDTR 寄存器中存储的,就是 线性地址 !!!!

重要的事情,说三遍! GDTR 寄存器中存储的内存地址,是线性地址!GDTR 寄存器中存储的内存地址,是线性地址!GDTR 寄存器中存储的内存地址,是线性地址!

LDTR 寄存器 用于 指向 局部描述符表 !我们需要知道, LDTR 寄存器中,存储的 并不是内存地址! LDTR 寄存器 中 存储 的是 指向 GDT全局描述符表对应 LDT 局部描述符表 的 段描述符 的 GDT全局描述符表 子项 索引值 信息 !!!

LDTR 寄存器 中存储索引信息(通常是一个数字),指向 存储了局部描述符表对应内存空间信息的 GDT全局描述符表子项。 GDT全局描述符表 中存储了多个不同的 LDT 局部描述符表( LDT 段 ) 所对应的不同内存空间信息(所谓的内存空间信息,指的就是  段基址、段限长、段属性 这些信息)!在 GDT 全局描述符表中,LDT 局部描述符表,也被当作一个普通的 “ 段 ” 来对待!在 GDT 全局描述符表中, LDT 局部描述符表 被当作 LDT 段进行使用!含有 LDT 段 的 段基址、段限长、段属性 信息 的 段描述符,在 GDT 全局描述符表中,被当成普通的 段描述符 进行使用!

随着进程的切换,我们只要改变 LDTR 局部描述符表 寄存器内容值,那么 就可以十分方便地切换到当前进程所对应的LDT 局部描述符表

LDTR 局部描述表 寄存器 指向 全局描述符表子项 的这种设计,非常有利于进程快速切换,以及各任务之间的数据隔离!不同的进程,不同的数据,存储在不同的物理内存之上,尽管不同进程的线性地址,可能是不同的,也可能是相同的!尽管不同进程需要使用到的物理地址,可能是不同的,也可能是相同的!但是!如果遇到两个进程,真的需要使用同一块物理内存空间的情况,那么我们也完全可以选择(事实上,操作系统内核,也是这么去实现的),将当前物理内存的数据先以虚拟内存的方式转存到硬盘之上!之后,再将腾出的物理内存空间 留给 新的进程 使用!了解操作系统实现原理,对于我们去进行 Rootkit 行为,是非常有利的!想要进行 Rootkit ,你必须足够了解 操作系统内核 , 你必须能够熟练进行 操作系统 的 内核级别编程

我们需要充分地认知到,每个进程,或者说,每个任务,都会存在一个独立的,独属于自己的 LDT 局部描述符表(也称为 “ 本地描述符表 ” )空间。每个独立进程,都有自己独立的代码段、数据段、栈段 等内存空间!私有的 LDT 局部描述符表中,存储着 对应 自身进程 的 代码段、数据段、栈段的内存空间信息(段基址、段限长、段属性) 的 私有段描述符

通过读取 段选择子第3个比特位 (对应的 比特位索引 为 2 )T1 的内容值,我们可以知道,当前段的 段描述符,是需要到 GDT 全局描述符表 中去寻找,还是到 LDT 局部描述符表 中去寻找!

如果 段选择子第3个比特位 (对应的 比特位索引 为 2 )T1 的内容值 0,则表示 段描述符 需要到 GDT 全局描述符表 中去寻找!找到 指定的 段描述符 后,我们就获得了 指定段 的 段基址、段限长、段属性 等信息,通过这些信息,我们就能够访问 指定的 内存段空间了!

如果 段选择子第3个比特位 (对应的 比特位索引 为 2 )T1 的内容值1,则表示 段描述符 在 LDT 局部描述符 表中!如果 段描述符 ,在 LDT 局部描述符表中,我们需要先去 LDTR 局部描述符表 寄存器 中 读取 LDT 局部描述符表(LDT 段在 GDT 全局描述符表 中的 索引值!当我们通过使用 LDTR 局部描述符表 寄存器中存储的 LDT 段 在GDT 全局描述符表 中的 索引值, 在 GDT 全局描述符表 中找到 LDTR 寄存器内容值 所对应的 LDT 局部描述符表(LDT 段的 段描述符 之后,通过解析 段描述符,我们就能获得 LDT 局部描述符表( LDT 段 )的 段基址、段限长、段属性信息!通过这些信息,我们可以十分轻松愉快地访问LDT 局部描述符表!再然后,我们就可以通过 段选择子 中的 段描述符表 索引信息,去 LDT 局部段描述符表 中寻找对应的 段空间信息(段基址、段限长、段属性)了!有了这些信息,我们就可以去访问 指定的 内存段空间 了!

GDT 全局描述符表 和 LDT 局部描述符表 的作用是什么?!

它们,会帮助我们得到 代码段、数据段、栈段 等的 段基址、段限长、段属性信息

这是非常重要的!

如果,我们想通过虚拟地址( 这样的格式:段选择子 : 段偏移量 ),来定位线性地址

我们需要先通过 段选择子 指定的 段选择子 内容,获得段基址

之后,我们就可以通过 段基址 + 段偏移量 的方式,来定位 指定内存空间线性地址 了!

你明白了吗?定位线性地址,我们需要 透彻理解 GDTR 全局段描述符表 寄存器 、LDTR 局部段描述符表 寄存器 、GDT 全局描述符表 、LDT 局部描述符表底层知识硬性基础

下一篇内容中,我们将重点讲解线性地址 如何被转换成 物理地址

(未完待续)

请关注下一篇,渗透测试之内核安全系列课程:Rootkit技术初探(三)

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

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

相关文章

[office] 16种常见的COUNTIF函数公式设置 #笔记#职场发展

16种常见的COUNTIF函数公式设置 1、返回包含值12的单元格数量 COUNTIF(A:A,12) 2、返回包含负值的单元格数量 COUNTIF(A:A,"<0") 3、返回不等于0的单元格数量 COUNTIF(A:A,"<>0") 4、返回大于5的单元格数量 COUNTIF(A:A,">5"…

中国新闻网怎么投稿 新闻稿件文章如何发布到中国新闻网上,附中国新闻网价格明细

中国新闻网是中国最具影响力和权威性的新闻门户网站之一。作为广大作者和媒体从业者&#xff0c;怎样向中国新闻网投稿一直是一个备受关注的话题。在这篇文章中&#xff0c;我们将着重介绍媒介库网发稿平台&#xff0c;并分享如何在该平台上成功投稿至中国新闻网。 媒介库网发稿…

深度学习中tensorflow和pytorch框架有什么不同,该如何选择

Tensorflow与Pytorch的选择 1. 编程风格和易用性2. 社区和生态系统3. 性能和优化4. 选择建议 TensorFlow 和 PyTorch 是两种流行的深度学习框架&#xff0c;各有优缺点和特定的使用场景。以下是它们的主要区别以及选择时需要考虑的因素&#xff1a; 1. 编程风格和易用性 Tenso…

IDEA 2022

介绍 【尚硅谷IDEA安装idea实战教程&#xff08;百万播放&#xff0c;新版来袭&#xff09;】 jetbrains 中文官网 IDEA 官网 IDEA 从 IDEA 2022.1 版本开始支持 JDK 17&#xff0c;也就是说如果想要使用 JDK 17&#xff0c;那么就要下载 IDEA 2022.1 或之后的版本。 公司…

二叉树的非递归后序遍历

二叉树的后序遍历是一种深度优先遍历算法&#xff0c;其遍历顺序为&#xff1a;左子树 -> 右子树 -> 根节点。非递归实现后序遍历通常使用一个辅助栈来模拟递归过程。 以下是使用C实现二叉树非递归后序遍历的示例代码&#xff1a; #include <iostream> #include …

C语言.数据结构.双向链表

数据结构.双向链表 1.双向链表的结构1.1链表的简单介绍1.2图文分析 2.实现双向链表2.1链表的初始化2.1.1初始化2.1.2节点的申请 2.2链表的打印2.2.1代码实现2.2.2图文分析 2.3链表的尾插2.3.1代码实现2.3.2图文分析 2.4链表的头插2.4.1代码实现2.4.2图文分析 2.5链表的尾删2.5.…

CMMI软件能力成熟度评估标准

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl CMMI概述 CMMI&#xff0c;全称为Capability Maturity Model Integration&#xff0c;即能力成熟度模型集成&#xff0c;是在原有的CMM&#xff08;Capability Maturity Mo…

一文吃透!如何在鸿蒙上开发Unity游戏的方法!

实际效果&#xff1a; 使用 Webview 在鸿蒙设备上运行 Unity 游戏需要几个步骤&#xff1f; 用 Webview 在鸿蒙上运行 Unity 游戏 ①创建鸿蒙全屏工程 在 DevEco 中创建一个新工程&#xff0c;模板选择 Full Screen Ability。 ②添加 Webview 这个工程的布局很简单&#xf…

JavaScript中获取时间戳的方法

在 JavaScript 中获取时间戳的方法有多种&#xff0c;具体如下&#xff1a; 1.使用 Date 对象的 getTime() 方法获取当前时间的时间戳&#xff1a; var timestamp new Date().getTime(); 2.使用 Date 对象的 valueOf() 方法获取当前时间的时间戳&#xff1a; var timestamp n…

esp32-c6所有配套教程

1.介绍 本文是esp32-c6所有资料的介绍 如果需要详细代码的话请访问下面这个链接 esp32-c6使用教程wifi&#xff08;espidf修改成arduino&#xff09;附带代码websocket&#xff0c;舵机&#xff0c;点灯【2024年】-CSDN博客 配置环境 视频教程 0-2设置开发环境_哔哩哔哩_bi…

策略模式+简单工厂

&#x1f347;工厂模式 &#x1f348;工厂模式向策略模式过度——工厂加一个保安 &#x1f34f;策略模式 &#x1f350;策略模式简单工厂 声明本文需要理解多态的基础上才能来学习 欢迎前来学习——继承和多态 学习记录 工厂模式 需要什么就生成什么 // 工厂模式 class Fact…

Flink任务如何跑起来之 1.DataStream和Transformation

Flink任务如何跑起来之 1.DataStream和Transformation 1. 滥觞 在使用Flink完成业务功能之余&#xff0c;有必要了解下我们的任务是如何跑起来的。知其然&#xff0c;知其所以然。 既然重点是学习应用程序如何跑起来&#xff0c;那么应用程序的内容不重要&#xff0c;越简单…

好家风短视频:成都鼎茂宏升文化传媒公司

好家风短视频&#xff1a;传承与发扬家庭美德的新载体 在数字时代的浪潮中&#xff0c;短视频以其简短、生动、直观的特点&#xff0c;成为了人们获取信息、传递情感的重要渠道。成都鼎茂宏升文化传媒公司而在这个多元化的内容生态中&#xff0c;好家风短视频以其独特的价值和…

5.透明效果

实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha channel&#xff09;。 当一个物体被渲染到屏幕上时&#xff0c;每个片元除了颜色和深度值之外&#xff0c;它还有另一个属性—透明度。 当透明度为1时&#xff0c;表示该像素是完…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl&#xff0c;发现一个SOAP服务。在SO…

MySQL 存储过程(二)

本篇继续介绍MySQL存储过程的相关内容。 目录 一、if语句 二、case 三、循环语句 while loop repeat 一、if语句 在存储过程中&#xff0c;可以使用if语句进行条件判断&#xff0c;其语法结构如下&#xff1a; if 判断语句 then 逻辑语句..... elseif 判断语句 then 逻…

【Linux取经路】初识信号

文章目录 一、人眼中的信号 VS 进程眼中的信号二、ctrlc 终止一个前台进程三、查看信号信息3.1 Core dump——核心转储功能验证 四、信号的处理方式五、ctrlc 被解释成2号信号验证5.1 signal——设置自定义捕捉方法 六、ctrlc 是如何变成信号的&#xff1f;七、异步、软中断八、…

【SQL边干边学系列】04中级问题(续)

文章目录 前言回顾中级问题25.高昂运费26.2015年的高昂运费27.高昂运维 - 使用between28.去年的高昂运费29.库存清单30.没有任何订单的客户31.没有任何订单的客户&#xff0c;员工ID为4 答案25.高昂运费26.2015年的高昂运费27.高昂运维 - 使用between28.去年的高昂运费29.库存清…

CVE-2022-4230

CVE-2022-4230 漏洞介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用…

DDMA信号处理以及数据处理的流程---DDMA原理介绍

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…