从 .txt 文件读取并执行 Shellcode

2023-12-03

从 C 总线测试 Shellcode 错误 10

上面是我之前的问题,涉及当 shell 代码位于源代码内部时,从 c 程序中执行 shellcode。 Carl Norum 解决了这个问题,原因是内存保护。我有一个不同的问题,但很相似。我不想将 shell 代码放在同一个文件中,而是想从 .txt 文件读取 shell 代码并执行它。下面我尝试将一段内存标记为 PROT_EXEC 并将 .txt 文件的内容读入其中并执行。但它不起作用,我遇到了同样的错误,KERN_PROTECTION_FAILURE,我尝试使用 mprotect 和 mmap 将一段内存标记为 PROT_EXEC。

#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>

int (*ret)();

unsigned char* buf;

int main()
{
    FILE* file;
    file = fopen("text.txt", "rb");

    fseek(file, 0, SEEK_END);
    unsigned int len = ftell(file);
    fseek(file, 0, SEEK_SET);

    buf = valloc(len);
    fread(buf, 1, len, file);

    fclose(file);

    mprotect(buf, len, PROT_EXEC);

   // I also tried mmap, but same error.
   /* void *ptr = mmap(0, 1024, PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);

    if (ptr == MAP_FAILED)
    {
        perror("mmap");
        exit(-1);
    }

    memcpy(ptr, buf, 1024);*/

    ret = buf;

    ret();

    return 0;
}

这是我正在读的 text.txt 文件,它与我之前的问题中的 hello world 代码相同:

\x55\x48\x89\xe5\xeb\x33\x48\x31\xff\x66\xbf\x01\x00\x5e\x48\x31\xd2\xb2\x0e\x41\xb0\x02\x49\xc1\xe0\x18\x49\x83\xc8\x04\x4c\x89\xc0\x0f\x05\x31\xff\x41\xb0\x02\x49\xc1\xe0\x18\x49\x83\xc8\x01\x4c\x89\xc0\x0f\x05\x48\x89\xec\x5d\xe8\xc8\xff\xff\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c\x64\x21\x0a

由于我将 txt 文件的内容复制到 PROC_EXEC 内存中,因此我不明白为什么会收到 KERN_PROTECTION_FAILURE。


根据我对您之前问题的回答,这是一个解决方案:

#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
    FILE *file = fopen("text.txt", "r");
    unsigned char *buf;
    int length = 0;
    struct stat st;
    int v;

    // get file size and allocate. We're going to convert to bytes 
    // from text, so this allocation will be safely large enough
    fstat(fileno(file), &st);
    buf = valloc(st.st_size);
    while (fscanf(file, "\\x%02x", &v) == 1)
    {
        buf[length++] = v;
    }

    fclose(file);

    mprotect(buf, length, PROT_EXEC);

    int (*ret)() = (int (*)())buf;
    ret();

    return 0;
}

程序中唯一需要改变的就是将 ASCII 文本转换为二进制数据的循环。我用了fscanf为了方便起见,但这非常脆弱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .txt 文件读取并执行 Shellcode 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 在提交到 Mac App Store 的应用程序中调用 openssl 是否可以接受?

    我有点不清楚调用提交到 App Store 的应用程序之外的进程的规则是什么 我读到 如果您想使用 Cocoa 和 OSX 库之外的其他库 框架 您必须将其包含在您的应用程序中 例如 如果使用 QT Python 或 Ruby 编写应用程序
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • .NET Compact 框架 - 使滚动条更宽

    有什么方法可以使 net 紧凑框架的 winforms 中的滚动条更宽吗 我希望应用程序对手指友好 但对于手指不小的人来说 滚动条非常窄 EDIT 问题出在 ListView DataGrid 等组件中的内置滚动条 Windows Mobi
  • 如何在 XAMPP 中将 MariaDB 更改为 MySQL?

    A 首先要做的事情 Google 先生没有帮助我找到任何对我的问题的答复 多于 是的 我在这里阅读了相反问题的解决方案如何在 Windows 上 5 分钟内将 XAMPP 中的 MySQL 升级到 MariaDB 这对我没有帮助 MySQL
  • 从远程服务器运行 jupyter 笔记本的脚本

    我有一台运行 jupyter 笔记本的服务器 Ubuntu 服务器 16 04 以及一台本地计算机 Mac 我在其中使用 google chrome 来可视化这些笔记本 为此 我必须 在服务器中运行 jupyter Notebook jup
  • RegEx 字符串查找两个字符串并删除文件中其余文本

    我需要用记事本 查找并删除文本文件中的其余部分 我希望你使用 RegeX 来查找 thban 的变体 该变量后面始终最多有 5 个字符 参见点 使用我的搜索字符串 它击中了最后一行 但击中了整行 我只想保留这个词 当这有效时 我也想保留包含
  • 无法使用 Facebook Marketing API 获取暂停的广告见解

    我编写了这个脚本 该脚本返回广告列表及其统计信息 但显然我只获得了活动广告的见解 而不是暂停的广告 对于暂停的广告 我只是获得了广告活动名称及其 id 我尝试使用如下所示的过滤 但它不起作用 first https graph facebo
  • 如何使用 Spring Data JPA 规范创建自定义查询? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在我的 Spring Boot 应用程序中 我使用 JPA 规范创建了自定义过滤 如上所述使用 JPA 规范搜索和过滤 Spring Boot 但是 我需要连接多个表并构建一个W
  • 如何修复此 SQL 插入语句中的语法错误?

    第一次在这里发布海报 我正在 VBA Access 数据库 中创建 SQL 插入语句 但当我最终准备好通过我创建的表单进行插入时 我不断收到语法错误 似乎无法弄清楚我在这个声明中出了什么问题 因为过去同样的格式对我有用 我在论坛上寻找已经回
  • MUI 依赖错误 npm install @mui/icons-material

    npm install mui icons material npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree npm ERR npm ERR
  • Typescript 无法推断函数对象的正确参数类型

    我写了一个更新函数 它接受一个对象 T 以及一个 更新程序 对象 它采用与以下相同的键 或子集 T并提供更新原对象对应值的函数 type UpdaterObj
  • 在空手道中使用 cURL 实现 API 自动化

    我是空手道新手 我正在自动化 API 测试 需要上传 gt 50MB 的大文件 当我用空手道这样做时 我收到错误 Broken Pipe 根据这个问题测试时管道损坏 写入失败 gt 允许的最大内容长度我可以使用 cURL 来执行此请求 它工
  • R中按虚部对复向量进行排序

    roots lt polyroot c 5 4 3 2 1 我想按虚部的升序对根进行排序 默认情况下sort函数按实部的升序对其进行排序 我已经阅读了文档 但我仍然不知道如何调整参数或编写命令 有人可以帮忙吗 Use Im函数提取虚部并对其
  • HTML5时间标签的使用

    我可以使用如下 HTML 时间标签吗
  • iPhone/iPad 上的自动对焦表单元素

    我正在尝试创建一个 Web 应用程序 在页面加载时自动将文本输入框聚焦 但是 我知道移动 Safari 不支持 自动对焦 属性 我需要它自动对焦的原因是因为我正在开发一个 Web 应用程序 可以这么说 它基本上要求用户使用蓝牙扫描仪将输入发
  • 如何将shellcode解码为ascii

    我有一些 shellcode 当我转换为 ascii 时 它不会输出文本 它只是乱码 x24 x11 xff xff x24 x04 x27 x0f x24 x02 x10 x46 x01 x01 x01 x0c x1e x20 xff x
  • 仅使用 Jackson 将超类字段序列化为 JSON

    我正在用 Jackson 序列化一个类的实例 仅序列化此实例的超类的字段的最佳方法是什么 目前我必须向子类中的每个方法添加 JSONIgnore 注释 有更好的方法吗 假设您可以直接通过以下方式控制序列化过程ObjectMapper 您可以
  • Delphi原型模式

    我想知道 Delphi 的 RTTI 中是否有任何东西可以像 C 中的 MemberwiseClone 一样简单地实现原型模式 我看到了这种模式的一些 Delphi 实现 其中正在创建一个新对象 TMyObject Create 并且它的属
  • 在 Metroapp 中显示存储在存储文件中的图片

    我想通过绑定显示存储在 StorageFile 中的图片内容 但无论我尝试做什么 它似乎都不起作用 这是我已经测试过的两个解决方案 string img await CompetencesFolder GetFileAsync Format
  • 使用 virtualenvwrapper-win 传递不同 python 版本时出错

    我安装了 python 3 4 和 2 7 它们的路径是 C python34 和 C python27 在尝试使用 python 2 7 创建 virtualenv 时 出现以下错误 C Development gt mkvirtuale
  • 在 iOS 应用程序中从 Firebase 获取发送推送通知的历史记录

    我有一个与 Firebase Cloud Messaging 集成的 iOS 应用程序 用于发送推送通知 我知道 Firebase 会保存所有发送通知的历史记录 有没有办法让运行应用程序的每个特定设备获取自己的已发送通知历史记录 我需要在客
  • 从 .txt 文件读取并执行 Shellcode

    从 C 总线测试 Shellcode 错误 10 上面是我之前的问题 涉及当 shell 代码位于源代码内部时 从 c 程序中执行 shellcode Carl Norum 解决了这个问题 原因是内存保护 我有一个不同的问题 但很相似 我不