gpt4 book ai didi

c - 字母数字 NOP 实现

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:01 25 4
gpt4 key购买 nike

寻找字母数字形式的 NOP 替代方案,以便通过 IDS 测试缓冲区溢出。 IDS 会将非字母数字值(例如 0x90)编码为 %90 以满足 HTTP RFC 标准,因此有理由尝试使用字母数字迭代。已创建字母数字负载,但漏洞利用代码使用 memset0x90 填充缓冲区。利用代码 here .

页面here提供了一些多字节选项,但我不确定如何用 x0f\x1f\x00 或任何可能为上面引用的代码。有什么建议吗?

最佳答案

这是一个 great site如果您好奇,可以列出各种 ASCII 汇编指令(包括 ASCII nops)。使用这些指令,您可以构建仅包含 ASCII 字符的整个程序。在黑帽工作的背景下,这些说明对于绕过入侵检测系统和文本过滤器非常方便。

例如,序列 ABCDEFGIJKLMNO 是一个 x86 空操作,尽管它基本上看起来像一个字母序列。此外,如果您不关心破坏某些寄存器,您可以创建 ASCII 指令序列,这些指令只会增加或减少这些寄存器。

如果您尝试使用这些多字节 nop 构建 nop-sled,请注意(AFAIK)如果不使用 nop 就不可能制作真正的 nop-sled,可以在任何字节偏移并仍然执行精确的空操作。但是,使用一对指令,如 AI (inc ecx; dec ecx) 比使用多字节 NOP 序列更安全,因为如果输入错误,该序列只会破坏寄存器偏移量(而多字节 NOP 可能会导致非法指令异常或执行意外操作)。

无论如何,一般来说,这是在 C 中跨缓冲区复制任何多字节序列的方法(前提是 sizeof(buffer) 是运算长度的倍数):

/* I find string notation to be more convenient, but it means using `sizeof(op)-1` to get the op length */
static char op[] = "\xaa\xbb\xcc";

char buffer[3072];
int i;

for(i=0; i<sizeof(buffer); i++)
buffer[i] = op[i%(sizeof(op)-1)];

关于c - 字母数字 NOP 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com