句柄降权保护自己

简介: 简述了句柄降权的原理和作用

句柄降权保护自己

概述:

通过句柄降权保护自己的内存

实验环境:

Windows7 x86 ,Windbg

前置条件:

必须要先看这篇文章https://www.52pojie.cn/thread-1770541-1-1.html,不看的话以下内容基本上是看不懂的

原理讲解:

私有句柄表中的值总共64bit位,高32bit位代表句柄拥有者对句柄对象的操作权限,低32bit位与运算上0xF是句柄对应的对象在内核中的地址,之所以与运算0xF是因为低32bit位中的最后3bit位为对象的三个属性。

速战速决:

根据上面所说的原理我们通过举例一个句柄值来操作便知道具体操作了,加入现在有个私有句柄表中的句柄值为000000039f026cc1`,那么此时00000003便是句柄拥有者的权限,权限有以下几种:

#define PROCESS_TERMINATE                  (0x0001)  
#define PROCESS_CREATE_THREAD              (0x0002)  
#define PROCESS_SET_SESSIONID              (0x0004)  
#define PROCESS_VM_OPERATION               (0x0008)  
#define PROCESS_VM_READ                    (0x0010)  
#define PROCESS_VM_WRITE                   (0x0020)  
#define PROCESS_DUP_HANDLE                 (0x0040)  
#define PROCESS_CREATE_PROCESS             (0x0080)  
#define PROCESS_SET_QUOTA                  (0x0100)  
#define PROCESS_SET_INFORMATION            (0x0200)  
#define PROCESS_QUERY_INFORMATION          (0x0400)  
#define PROCESS_SUSPEND_RESUME             (0x0800)  
#define PROCESS_QUERY_LIMITED_INFORMATION  (0x1000)  
#define PROCESS_SET_LIMITED_INFORMATION    (0x2000)  
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define PROCESS_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \0xFFFF)

当我们通过OpenProcess以多种权限申请打开进程时便将多种权限或运算就得到了我们想要的权限值,我们的目的是为了降低句柄拥有者对我们要保护的进程的操作权限,那最简单暴力的方法便是把高32bit位置0,直接让句柄拥有者对我们的进程失去所有权限。依然按照昨天必读那篇文章的保护进程123.exe来说,我们只需要在原判断成功123.exe进程对象句柄在其他进程里的时候把对应的句柄值的高32bit位置0就实现了,更改后的代码如下:

        count_2 = count_2 - 1;
        ULONG64 pTmpTableValue = 0;
        ULONG uHight32 = 0;
        ULONG uLow32 = 0;
        UCHAR uType = 0;
        PUCHAR pProcessName = NULL;
        ULONG uFindNum = 0;
        PULONG pTableAddr = 0;
        int iClearNum = 0;
        for (int i = 0; i < count_2-1; i++)
        {
   
   
                for (int j = 0; j < 512; j++)
                {
   
   
                        if (pOneTableCode[i] == 0)
                        {
   
   
                                break;
                        }
                        pTableAddr = ((PUCHAR)pOneTableCode[i] + j * 8);
                        pTmpTableValue = *((PULONG64)(pTableAddr));
                        uHight32 = pTmpTableValue >> 32;
                        uLow32 = pTmpTableValue & 0x00000000ffffffff;
                        uLow32 = uLow32 & 0xFFFFFFF8;
                        if (uLow32 != 0 && uLow32>0x80000000)
                        {
   
   

                                uType = *(PUCHAR)((PUCHAR)uLow32 + 0xc);
                                if (uType == 0x7)
                                {
   
   
                                        pProcessName = (PUCHAR)((PUCHAR)uLow32 + 0x18 + 0x16c);
                                        if (strcmp(pProcessName, "123.exe") == 0)
                                        {
   
   
                                                //高32bit位写为0
                                                RtlCopyMemory(pTableAddr, &iClearNum, 4);
                                                openflag++;
                                        }
                                        DbgPrintEx(77, 0, "[db][exeinfor]:Processname:%s\n", pProcessName);
                                }

                        }
                        uFindNum++;
                }
        }

结果:

因为123.exe的句柄拥有者有CE调试器,所以如果我们保护成功了的话,CE是无法正常访问123.exe的进程数据的,所以看图

11.png
22.png

结论:

句柄降权暴力有效,但是任然能被化解,攻防就像矛盾!

相关文章
|
3月前
|
SQL 安全 Shell
vulnhub靶机实战_DC-3
本文介绍DC-3靶机渗透测试全过程,涵盖环境搭建、信息扫描、SQL注入、权限提升等环节。通过Joomla漏洞获取管理员密码,上传木马并提权至root,最终获取flag,是一套完整的渗透实战流程。
825 1
|
API Windows
我的免杀之路:虚拟保护
虚拟保护技术利用的是 Windows API 中的 VirtualProtect 函数,是对应 Win32 函数的逻辑包装函数,它会在呼叫处理程序的虚拟位置空间里,变更认可页面区域上的保护。
1025 0
我的免杀之路:虚拟保护
|
数据处理 C语言
深入解析x86架构:X86, X86_32和X86_64的差异与应用
深入解析x86架构:X86, X86_32和X86_64的差异与应用
|
数据采集 Web App开发 监控
捕获抖音截图:如何用Puppeteer保存页面状态
随着抖音直播的兴起,实时动态和互动元素吸引了大量用户。为了捕获直播页面的实时信息,本文介绍了如何使用 Puppeteer 和代理 IP 服务,解决页面动态加载、反爬虫机制等问题,实现自动化抓取和截图保存。通过安装 Puppeteer、配置代理 IP 和编写简单脚本,可以高效地捕获抖音直播页面的状态。
512 51
|
10月前
|
SQL 分布式计算 DataWorks
轻松搞定,数据开发与分析也能如此简单方便!
DataWorks 是一站式智能大数据开发治理平台,支持阿里云多种大数据和AI计算服务。本次实验将引导您使用Data Studio中的Notebook开发环境,创建个人开发实例,连接MaxCompute等资源进行SQL开发,并体验Python数据分析及DataWorks Copilot智能助手功能。实验涵盖Notebook新建、多引擎SQL开发、交互式分析及智能数据探索,帮助用户快速上手DataWorks的智能化数据开发与管理功能。
windbg分析 IRQL_NOT_LESS_OR_EQUAL 蓝屏问题
本文通过windbg分析了电脑出现的IRQL_NOT_LESS_OR_EQUAL蓝屏问题,并尝试了多种解决方法,最终通过硬件清理暂时解决了问题。
992 0
windbg分析 IRQL_NOT_LESS_OR_EQUAL 蓝屏问题
|
存储 弹性计算 安全
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
本次专场内容包括阿里云弹性计算全新发布的产品家族、阿里云第9代 ECS 企业级实例、CIPU 2.0技术解读、E-HPC+超算融合、倚天云原生算力解析等内容,并发布了国内首个云超算国家标准。
|
Web App开发 安全 关系型数据库
xss漏洞原理(五)BeEF
xss漏洞原理(五)BeEF
|
安全 测试技术 网络安全
D盾防火墙安全防护绕过-[文件上传]
D盾防火墙安全防护绕过-[文件上传]
1224 0