利用API内存地址参数执行shellcode

2024-04-24 19:04

本文主要是介绍利用API内存地址参数执行shellcode,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对恶意文档(maldocs)进行大量分析,在目前使用的流行变种中,利用本机 Windows 函数调用来将执行跳转到的shellcode,收集存在在类似的利用方式。

示例通过使用 EnumResourceTypesA 来说明如何通过相关函数执行 shellcode。

EnumResourceTypesA(__in_opt HMODULE hModule,__in     ENUMRESTYPEPROCA lpEnumFunc,__in     LONG_PTR lParam);

EnumResourceTypesA function (winbase.h)

枚举二进制模块中的资源类型。从 Windows Vista 开始,这通常是一个与语言无关的可移植可执行文件(LN 文件),枚举还包括来自包含可本地化语言资源的相应特定于语言的资源文件(.mui 文件)之一(如果存在)的资源。也可以使用 hModule 指定 .mui 文件,在这种情况下,仅搜索该文件的资源类型。

或者,应用程序可以调用 EnumResourceTypesEx,这样可以更精确地控制要枚举的资源文件。

lpEnumFunc 指向要为每个枚举的资源类型调用的回调函数的指针。如果我将 shellcode 的内存地址提供给 lpEnumFunc,它会将每个枚举资源传递给该函数,但是,由于它是 shellcode,会执行提供的内存地址处的任何内容 - 注:内存页面需要允许代码可执行。

在恶意文档的上下文中,VBA 为您提供了直接调用 Windows 函数的能力,但是,在 VBA 之外,如果您知道目标应用程序已经导入了函数,那么这些函数也可以在典型的利用攻击中被利用。可以节省通常用于执行类似功能的某些小工具的 ROP 链空间,具体取决于功能和所需的参数。此外,从一般的 offsec 角度来看,如果继续对恶意文档使用相同的函数调用,会留下非常清晰的动态和静态特征。

列举所有可能的函数,查看 Windows 7 x86 SDK 中的 C 头文件。

$ cat *.h |tr '\r\n' ' ' |tr ';' '\n' |sed -e 's/--//g' -e 's/    / /g' |grep -iE "__in.+(Func|Proc|CallBack| lpfn| lpproc)," |grep -oE " [a-zA-Z]+\([a-zA-Z0-9*_, ]+\)" |grep "__in" |cut -d"(" -f1 |sort -u |sed -e 's/^ //g'

它的核心是 ‘(Func|Proc|CallBack| lpfn| lpproc)’ 的 grep,其余的主要是尝试标准化头文件函数结构以便于解析

在获得可选函数列表后,测试每个函数以尝试找出最有可能在恶意文档中使用的函数。阅读 MSDN 文章以了解该功能的用途,然后快速阅读几行 VBA 以查看是否可以使其正常工作。虽然其中大部分很可能会被用于在您指定的地址执行代码,但将多个功能链接在一起并使用大量“简单”功能来执行此操作并没有太多回报。例如,DestroyCluster 函数具有类似的回调参数,但您还必须首先调用 CreateCluster 和 OpenCluster 来设置环境,这对于用例来说有点多。

下表列出了已识别的函数,这些函数似乎能够接受内存地址以执行代码,并且可能会被利用。

123
AddClusterNodeBluetoothRegisterForAuthe

这篇关于利用API内存地址参数执行shellcode的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932582

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.