利用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

相关文章

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi