中断门提权操作

中断门在idt表中 因此构造一个函数 把函数地址给它 然后产生一个中断 就实现了提权
1。查看

nt!DbgBreakPointWithStatus+0x4:
83eb2110 cc              int     3
kd> r idtr
idtr=80b95400

2.查看表

kd> dq 80b95400 L30
80b95400  83e78e00`00085fc0 83e78e00`00086150
80b95410  00008500`00580000 83e7ee00`000865c0
80b95420  83e7ee00`00086748 83e78e00`000868a8
80b95430  83e78e00`00086a1c 83e78e00`00087018
80b95440  00008500`00500000 83e78e00`00087478
80b95450  83e78e00`0008759c 83e78e00`000876dc
80b95460  83e78e00`0008793c 83e78e00`00087c2c
80b95470  83e78e00`000882fc 83e78e00`000886b0
80b95480  83e78e00`000887d4 83e78e00`00088914
80b95490  00008500`00a00000 83e78e00`00088a80
80b954a0  83e78e00`000886b0 83e78e00`000886b0
80b954b0  83e78e00`000886b0 83e78e00`000886b0
80b954c0  83e78e00`000886b0 83e78e00`000886b0
80b954d0  83e78e00`000886b0 83e78e00`000886b0
80b954e0  83e78e00`000886b0 83e78e00`000886b0
80b954f0  83e78e00`000886b0 83e18e00`0008aaf8
80b95500  00000000`00080000 00000000`00080000
80b95510  00000000`00080000 00000000`00080000
80b95520  00000000`00080000 00000000`00080000
80b95530  00000000`00080000 00000000`00080000
80b95540  00000000`00080000 00000000`00080000
80b95550  83e7ee00`0008563a 83e7ee00`000857c0
80b95560  83e7ee00`000858fc 83e7ee00`00086498
80b95570  83e7ee00`00084fee 83e78e00`000886b0

修改地址

eq 80b95500 0044ee000008f370 ( 0044ee000008f370 解释 :由门描述符 得知 前4位与最后4位和为函数地址这里是0044f370 ee00代表中断门 0008 代表代码(cs)段选择子)

kd> eq 80b95500  0044ee00`0008f370
kd> dq 80b95400 L30
80b95400  83e78e00`00085fc0 83e78e00`00086150
80b95410  00008500`00580000 83e7ee00`000865c0
80b95420  83e7ee00`00086748 83e78e00`000868a8
80b95430  83e78e00`00086a1c 83e78e00`00087018
80b95440  00008500`00500000 83e78e00`00087478
80b95450  83e78e00`0008759c 83e78e00`000876dc
80b95460  83e78e00`0008793c 83e78e00`00087c2c
80b95470  83e78e00`000882fc 83e78e00`000886b0
80b95480  83e78e00`000887d4 83e78e00`00088914
80b95490  00008500`00a00000 83e78e00`00088a80
80b954a0  83e78e00`000886b0 83e78e00`000886b0
80b954b0  83e78e00`000886b0 83e78e00`000886b0
80b954c0  83e78e00`000886b0 83e78e00`000886b0
80b954d0  83e78e00`000886b0 83e78e00`000886b0
80b954e0  83e78e00`000886b0 83e78e00`000886b0
80b954f0  83e78e00`000886b0 83e18e00`0008aaf8
80b95500  0044ee00`0008f370 00000000`00080000
80b95510  00000000`00080000 00000000`00080000
80b95520  00000000`00080000 00000000`00080000
80b95530  00000000`00080000 00000000`00080000
80b95540  00000000`00080000 00000000`00080000
80b95550  83e7ee00`0008563a 83e7ee00`000857c0
80b95560  83e7ee00`000858fc 83e7ee00`00086498
80b95570  83e7ee00`00084fee 83e78e00`000886b0

运行

注意点 虚拟机修改成单核 (不然可能出错)

测试程序去掉随机基址
源码

#include <stdio.h>

int g_high2G; // 在中断门中读取高2G内存保存进来。
int g_eflagsBefore; // 保存进入中断门前的 EFLAGS 寄存器。
int g_eflagsAfter; // 保存进入中断门里的 EFLAGS 寄存器。
int g_eax; // 待会在中断门里要用到 eax ,先把旧的保存到这里。

__declspec(naked) void func() {
    __asm {
        /*
        此时栈结构:
        | eip3 | <- esp0
        | cs3  |
        |eflags|
        | esp3 |
        | ss3  |
        */
        mov g_eax, eax
        // 保存当前 eflags
        pushfd
        pop g_eflagsAfter
        // 保存原始 eflags
        mov eax, [esp + 0x08]
        mov g_eflagsBefore, eax
        // 读取 xxxx 处的值(找个空位)
        mov eax, ds:[0x80b95500]
        mov g_high2G, eax
        // 恢复 eax
        mov eax, g_eax

        // 中断门返回
        iretd
    }
}
int main(int argc, char* argv[])
{
    //func();  //044f370
    __asm {
        // 构造的中断门描述符安装在 IDT[32] 这个位置。
        int 0x20;
    }
    printf("0x8003f500: %08x\n", g_high2G);
    printf("进入中断门前的 EFLAGS = %08x\n", g_eflagsBefore);
    printf("进入中断门后的 EFLAGS = %08x\n", g_eflagsAfter);
    getchar();
    return 0;
}

原文地址:http://blog.51cto.com/haidragon/2131217

时间: 2025-01-16 12:57:04

中断门提权操作的相关文章

调用门提权操作

1.调用门在gdt表中 在dgt表中注册一个回调函数 然后调用 提权与中断相同操作 nt!DbgBreakPointWithStatus+0x4: 83eb2110 cc int 3 kd> r gdtr gdtr=80b95000 kd> dq 80b95000 L30 80b95000 00000000`00000000 00cf9b00`0000ffff 80b95010 00cf9300`0000ffff 00cffb00`0000ffff 80b95020 00cff300`0000

提权操作函数

DWORD AdjustProcessToken(HANDLE hProcess, LPCTSTR lpPrivilegeName) { HANDLE hToken; TOKEN_PRIVILEGES tp; tp.PrivilegeCount =1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES,&hToken)) { retu

利用linux漏洞提权

提权就是让普通用户拥有超级用户的权限. 本次试验漏洞适用于RHELt或CenOS系列5~6系列所有版本.主要利用/tmp/目录和/bin/ping命令的权限漏洞进行提权.     试验环境:腾讯云CentOS6.8     内核:2.6.32-642.6.2.el6.x86_64 1.查看系统环境 2.创建普通用户进行权限测试 3.开始提权操作     写一段C语言,用于提权     提权成功 最终执行完命令之后,可以看到执行权限变成了root,提权成功.

[转帖]提权

windows提权 https://www.cnblogs.com/v01cano/p/10317458.html 之前一直不太理解 感觉作者写的很好记录一下. 0,起因,由于前几天拿了一个菠菜站的webshell,但是只有iis权限,执行无法创建用户等操作,更无法对整个服务器进行控制了,于是此时便需要提权了,对于一个刚刚入门的小白来说,此刻真正意识到了提权的重要性,于是便开始学习提取相关知识,以拿下该菠菜的站点. 提权前的准备工作 1,通常来说,不同的脚本所处的权限是不一样的.这就意味着,如果

1_中断提权

1 使用pchunter查看系统中断表(中断描述符表) 1.1 那些中断处理地址内核高2GB ,所以中断处理环境坑定在0环 利用分析: 那我们把自己得处理函数放在这里面,那经过这个表调用就能获得高权限; 注意: 代码 应该把随机基址关闭,并且使用release版本,这样地址稳定一些,debug 即使不开随机基址,可能运行中 子函数的地址会因为重构(当你改变内容的时候,可能编译器判断换个地址更优)而改变. 注意:选择项目属性:工具集 vs-2015xp兼容,并MFC静态编译(因为缺少一个dll,当

Windows渗透与提权技巧汇总

参考:http://netsecurity.51cto.com/art/201312/426150_all.htm 1.旁站路径问题 2.用以下VBS: On Error Resume Next  If (LCase(Right(WScript.Fullname, 11)) = "wscript.exe") Then  MsgBox Space(12) & "IIS Virtual Web Viewer" & Space(12) & Chr(

Linux下提权常用小命令

有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么难,你真去尝试做了,也许你就会发现Linux下的提权并不难,尤其是一些简单的提权方法是很容易学会的.Linux下的提权我知道的比较简单的方法都是在命令行下完成的,很多新手叉子可能根本没接触过Linux下的一些常用命令,今天危险漫步就给大家介绍一些Linux下提权过程中常用到的Linux命令,由于我也

2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒绝.为了获得受害机器的完全权限,需要绕过限制,获取本来没有的一些权限,这些权限可以用来删除文件,查看私有信息,或者安装特殊程序,比如病毒. Metasploit有很多种后渗透方法,可以用于对目标机器的权限绕过,最终获取到系统权限. UAC 用户帐户控制(User Account Control, U

六.Windows内核保护机制--中断门

一.中断门,和调用门差不多,细节方面有些差异: 1.符号表的问题,调用门中所使用的是GDT表,而中断门中使用的是IDT表. 2.中断门,不能直接传参数. 3.TEPY标志不一样,调用门是1100 ,32位中断门是1110 ,16位中断门是0110. 4.调用方式不太一样,调用门使用的是CALL调用,中断门直接使用 int [ index](index使用10进制就行了),对IDT表进行搜索. 5.前面说过了,调用门在使用的时候,会更改 CS SS EIP ESP四个寄存.中断门除了这4个,还增加