1、构造一个调用门,实现3环读取高2G内存

2、在第一题的基础上进行修改,实现通过fq的方式返回到其他地址

3、在第一题的基础上进行修改,在门中再建一个门跳转到其他地址

要求:代码正常执行不蓝屏

1、构造一个调用门,实现3环读取高2G内存

这个就是前面课后作业做过的,没有什么问题,注意调用门描述符中的函数地址要写对,否则会蓝屏。

#include <windows.h>
#include <stdio.h>DWORD dwHigh2GValue;// 该函数通过 CALL FAR 调用,使用调用门提权,拥有0环权限
void __declspec(naked) FunctionHas0CPL()
{__asm{pushadpushfd// 读取了GDT表第二项的低4字节mov eax,0x8003f008mov eax,[eax]mov dwHigh2GValue,eaxpopfdpopadretf // 注意堆栈平衡,写错蓝屏}
}int main(int argc, char* argv[])
{char buff[6] = {0,0,0,0,0x48,0};__asm{call fword ptr [buff] // 长调用,使用调用门提权}printf("%08x\n",dwHigh2GValue);getchar();return 0;
}

2、在第一题的基础上进行修改,实现通过fq的方式返回到其他地址

所谓的“fq”,只是一个形象的比喻,意思是不走原来的 RETF,而是修改堆栈中保存的返回地址,跳转到其他地址执行。
代码如下,请根据自己机器上的函数地址修改代码和调用门描述符。

#include <windows.h>
#include <stdio.h>DWORD dwHigh2GValue;// 该函数通过 CALL FAR 调用,使用调用门提权,拥有0环权限
void __declspec(naked) FunctionHas0CPL()
{__asm{pushadpushfd// 读取了GDT表第二项的低4字节mov eax,0x8003f008mov eax,[eax]mov dwHigh2GValue,eax// 修改返回地址,跳转到Exit函数执行mov eax,0x4113eemov [esp+0x24],eaxpopfdpopad      retf    // 注意堆栈平衡,写错蓝屏}
}void Exit()
{printf("bye!\n");ExitProcess(0);
}int main(int argc, char* argv[])
{char buff[6] = {0,0,0,0,0x48,0};__asm{call fword ptr [buff] // 长调用,使用调用门提权}printf("%08x\n",dwHigh2GValue);getchar();return 0;
}

3、在第一题的基础上进行修改,在门中再建一个门跳转到其他地址

这题的意思应该是在裸函数内用另一个调用门跳到别的函数。

我在两个裸函数里修改了两个全局变量,以证明确实被调用了,当然,也可以在裸函数内写一个 INT 3 ,使其在windbg被断下,这样也可以证明裸函数被调用。

需要注意,从第一个裸函数跳到第二个裸函数时,调用门中的DPL要设置成0,因为此时裸函数1的CPL=0.

在0环中,似乎不能调用printf,另外,调用门描述符定义成全局变量时,要用ds段引用。

根据两个裸函数的地址设置门描述符:

代码如下:

#include <windows.h>
#include <stdio.h>DWORD dwHigh2GValue; // 高2G内存
BOOL bFunctionHas0CPL1Called; // 证明裸函数1被调用
BOOL bFunctionHas0CPL2Called; // 证明裸函数2被调用char gate1[6] = {0,0,0,0,0x48,0}; // 0041ec00`000813A0
char gate2[6] = {0,0,0,0,0x90,0}; // 00418c00`00081690// 该函数通过 CALL FAR 调用,使用调用门提权,拥有0环权限
// 004113A0
void __declspec(naked) FunctionHas0CPL1()
{__asm{//int 3pushadpushfdmov al,1mov byte ptr ds:[bFunctionHas0CPL1Called],al// 读取了GDT表第二项的低4字节mov eax,0x8003f008mov eax,[eax]mov dwHigh2GValue,eaxcall fword ptr ds:[gate2]popfdpopad     retf    // 注意堆栈平衡,写错蓝屏}
}// 00411690
void __declspec(naked) FunctionHas0CPL2()
{__asm{//int 3pushadpushfdmov al,1mov byte ptr ds:[bFunctionHas0CPL2Called],alpopfdpopadretf}
}int main(int argc, char* argv[])
{   __asm{call fword ptr ds:[gate1] // 长调用,使用调用门提权}printf("%08x\n",dwHigh2GValue);printf("%d %d\n", bFunctionHas0CPL1Called,bFunctionHas0CPL2Called);getchar();return 0;
}

(12)调用门阶段测试相关推荐

  1. Windows保护模式(三)长调用与短调用调用门

    长调用与短调用 短调用 指令格式 CALL 立即数 / 寄存器 / 内存 堆栈变化 发生改变的寄存器 ESP EIP 长调用(跨段不提权) 指令格式 CALL CS:EIP(如果是通过调用门则 EIP ...

  2. TR4—TR6阶段测试项目管理

    TR4-TR6阶段测试项目管理 版权声明:本文为博主原创文章,未经博主允许不得转载. 软件测试概念 使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实 ...

  3. [书]x86汇编语言:从实模式到保护模式 -- 第14章 任务和特权级保护,调用门、LDT、TSS、TCB

    # 加载用户程序 Part 1.TCB, Task Control Block, 任务控制块 分配内存作为该任务的TCB,并插入至TCB链表. Part 2.LDT, Locak Descriptor ...

  4. 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-无特权级转换)...

    在上次的代码基础上,添加一个代码段作为通过调用门转移的目标段.了解一下调用的工作方法,代码分析如下: <<红色标识部分为新增代码>> ; =================== ...

  5. 5. 第五阶段 测试开发技术 - JAVA

    5. 第五阶段 测试开发技术 - JAVA 第一章 初识JAVA java简介 java语言的特性 搭建java环境 第一个java程序 public class Helloworld{public ...

  6. (10)调用门提权(无参数)

    一.实验步骤 本节实验的目标是自己实现调用门提权,在低地址空间中执行代码访问高2G的内存.实验步骤如下: 查看GDT表内容,8003f008是系统代码段,8003f018是用户代码段. 为了使用调用门 ...

  7. Windows保护模式学习笔记(三)—— 长调用/短调用/调用门

    Windows保护模式学习笔记(三)-- 长调用/短调用/调用门 要点回顾 长调用与短调用 一.短调用 二.长调用(跨段不提权) 三.长调用(跨段并提权) 长调用执行时: 执行返回(RETF)时: 总 ...

  8. 调用门、堆栈切换与调用过程返回

    论天下大势,合久必分分久必合.上回书我们说了<CPL,RPL和DPL:这三个级别你搞懂了吗?>,这回书我们讲调用门以及堆栈切换. 门描述符 为了提供对具有不同特权级别的代码段的受控访问,处 ...

  9. 保护模式(四)长调用与短调用 调用门

    Windows保护模式学习笔记(三)-- 长调用/短调用/调用门 前言 要点回顾 长调用与短调用 一.短调用 二.长调用(跨段不提权) 三.长调用(跨段并提权) 长调用执行时: 执行返回(RETF)时 ...

最新文章

  1. 问题一:云服务中那么多的服务器怎么拓扑???
  2. 专家:人工智能开始对现实世界产生重大影响
  3. php之cookie
  4. 2017年深度学习十大趋势预测
  5. bzoj1334[Baltic2008]Elect(背包dp)
  6. 定义工厂(Plant)
  7. 04.Beetl常用内置函数以及安全输出---《Beetl视频课程》
  8. Visual Studio Code五月版本更新
  9. php mysql crud demo_基于php和mysql的简单的dao类实现crud操作功能_PHP教程
  10. oracle的工具cmd,数据库命令行工具DBCLI
  11. iOS 之 获取View所在控制器
  12. Tomcat源码分析(十)--部署器 转载
  13. flutter 输入框限制输入 数字、小数
  14. 计算机xp的解释,2017职称计算机考点:Windowsxp系统注册表的技巧
  15. java整蛊小游戏源码_Java 开发打飞机小游戏(附完整源码)
  16. java extjs combobox_extjs的combobox的用法
  17. 研究员发现 Google Cloud 项目中的 SSRF 漏洞,获1万美元奖金
  18. 服务器无线网络禁用启用无效,无线网络卡一直被禁用,无法启用
  19. [Xilinx FPGA] #8 Xilinx Power Estimator[XPE, 功耗估计器]的使用方法
  20. fatal: unable to connect to gitlab.domian: gitlab.domian : Temporary failure in name resolution

热门文章

  1. 运维人最爱的八本书,送给十一不出门的你
  2. 成功解决Exception “unhandled ModuleNotFoundError“No module named ‘face_recognition.cli‘
  3. Paper之IEEERSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议RSJ智能机器人与系统国际会议机器人技术:科学与系统机器人学报)历年最佳论文简介及其解读
  4. TF之LSTM:利用多层LSTM算法对MNIST手写数字识别数据集进行多分类
  5. DL之Keras:基于Keras框架建立模型实现【预测】功能的简介、设计思路、案例分析、代码实现之详细攻略(经典,建议收藏)
  6. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(计算器简单功能)
  7. php 数组元素快速去重
  8. AS打开速度慢,AS项目导入慢,新建项目导入慢
  9. asp.net 二级域名(路由方式实现)
  10. SharePoint 2007/2010 的SPGridView 控件常见的两个问题