利用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使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@