buffer-overflow相关内容
可以在此处找到文章。 我正在阅读粉碎堆栈的信息,发现自己陷入了example3.c的麻烦。 0x80004a3 0x80004a8
..
对于我的学习,我尝试创建一个有效负载,以使其溢出缓冲区并调用一个名为“目标”的“秘密”函数 这是我使用的代码用于在i686上进行测试 #include“ stdio.h” #include“ string.h” void target(){ printf(“ target\n”); } 无效漏洞(字符*输入){ 字符缓冲区[16]; strcpy(缓冲区,输入);
..
经过一番研究,我没有发现任何描述此方法的论文(甚至没有不可靠的论文)。似乎SSP(堆栈粉碎保护)/ Propolice 解决方案 Canary的安全性非常好,可以防止缓冲区溢出。多年以来,各种Canary实施都被打破,然后变得更加安全。重要的是,即使在Vista,Windows 7和Fedora 11上仍在利用高级内存保护缓冲区溢出…… 要提到的一个非常重要的事情是金丝雀只保护该函数
..
我想出于教育目的而利用基于堆栈的缓冲区溢出。 有一个典型的函数,调用时带有main参数,该函数作为编程保存参数的本地缓冲区。给定这样的输入,即 nops + shellcode + address_shellcode ,我将利用它。 用gdb调试后,我发现了shell代码的地址,因为它将作为参数传递,并且在 strcpy 我检查了堆栈,返回地址 $ ebp + 8 已成功被shell代
..
我按顺序将控件子类化,以便可以添加一些我需要的字段,但是现在当我在运行时创建控件时,会出现访问冲突。不幸的是,这种访问冲突不会在我创建控件的地方发生,甚至在我启用了所有调试选项的情况下(包括“使用调试DCU进行构建”),堆栈跟踪也无济于事。全部! 在尝试重现该错误时,我尝试创建一个控制台应用程序,但很明显,此错误仅在Forms应用程序中显示,并且仅当我的控件实际显示在窗体上时! 以下是
..
如何进行堆溢出攻击? 如果发生堆栈溢出攻击,攻击者将函数返回地址替换为其地址。 在堆溢出攻击中如何做到这一点?另外,是否可以从堆运行代码? 解决方案 请注意,这因平台而异,我的示例过于简化。基本上,归结为堆管理器具有可能会被溢出的链表,并且您可以使用链表指针来覆盖进程内存的随机部分。 想象一下我有一个朴素的堆实现,其控制块是这样的: struct HeapBloc
..
我可以使用 strncpy()和更大的源字符串(然后是目的地)进行测试: int main(){ char * ptr = malloc(12); strcpy(ptr,“ hello world!”); 返回0; } 使用标志 -fstack-protector进行编译并使用 -S 选项得到: .file“ malloc.c” .text .
..
我有一个C代码应用程序。我使用MS-VS2005构建的。我有一个输出数据缓冲区,该缓冲区是使用malloc动态分配的。 对于某些测试用例,正在被malloc分配的内存大小小于实际大小生成的输出大小(以字节为单位)。较大的输出写入较小的缓冲区,从而导致缓冲区溢出。结果,测试运行崩溃,MSVS-2005出现一个窗口“堆损坏...”。 我知道这与某些问题有关动态内存分配,但是我花了很长时间才
..
我正在尝试学习在Backtrack Linux上利用简单的bufferover流技术。 这是我的C程序 #include #include int main(int argc,char ** argv) { char buffer [500]; if(argc == 2) { strcpy(buffer,argv
..
我刚刚写了下面的C代码: #include #include void func(char * str) { char buffer [24]; int * ret; strcpy(buffer,str); } int main(int argc,char ** argv) { int x; x = 0;
..
因此,在这里,我认为我在查看其他人的代码时发现了一个小的缓冲区溢出问题。它立即使我感到不正确,并且有潜在危险,但我承认我无法解释这种“错误”的实际后果,如果有的话。 我写了一个测试应用程序以演示该错误,但令我感到沮丧的是,无论溢出情况如何,它似乎都能正常运行。我想相信这只是偶然,但我希望得到一些反馈,以确定我的想法是否错误,或者这里是否确实存在问题,而这并没有在我的测试应用程序中显示出来。
..
我试图在需要密码的简单程序上进行缓冲区溢出(我正在使用Linux)。程序代码如下: #include #include #include int check_authentication(char *密码){ int auth_flag = 0; char password_buffer [16];
..
如何使用缓冲区溢出来利用计算机? 如何仅通过引起 stack 或堆溢出? 我了解程序内存的部分不应被覆盖,但是我看不到这如何导致人们执行自己的代码。另外,是否必须使用目标处理器的汇编语言编写第三者的恶意代码? 解决方案 这是关于该主题的最广为人知的文档:为乐趣和利润而粉碎堆栈 但是,“堆栈溢出”与缓冲区溢出无关。堆栈溢出通常只是错误代码中的一个错误情况,在崩溃(DoS)之
..
根据Wikipedia(http://en.wikipedia.org/wiki/Buffer_overflow) 通常与缓冲区关联的编程语言溢出包括C和C ++,它们没有提供针对访问或覆盖内存任何部分中的数据的内置保护,并且不会自动检查写入数组(内置缓冲区类型)的数据是否在该数组的边界内。边界检查可以防止缓冲区溢出。 那么,为什么在某些语言(例如C和C ++)中未实现“边界检查”?
..
我有一个缓冲区,我正在做很多strncat。我要确保我不会溢出缓冲区大小。 char buff [64]; strcpy(buff,“字符串1”); strncat(buff,“ String 2”,sizeof(buff)); strncat(buff,“ String 3”,sizeof(buff)); 我想说的是buff-xxx,而不是siz
..
我正在阅读《剥削的艺术》(Art of Exploitation),这是一本不错的书,我从exploit_notesearch.c文件中浏览了该示例。 简而言之,作者试图溢出程序来自notesearch.c int main(int argc,char * argv []){ int userid,printing = 1,fd; char searchstring [100]
..
我已经编写了一段C代码,并对其进行了反汇编,还阅读了寄存器以了解程序在汇编中的工作方式。 int test(char * this){ char sum_buf [6]; strncpy(sum_buf,this,32); 返回0; } 我正在检查的代码片段是测试函数。当我反汇编我的测试函数的输出时,我得到... 0x00000000004005c0
..
我必须执行if语句,否则,如果设置了一些无效的输入(例如“ 17d”),它将陷入无限循环。为什么呢我认为有缓冲区但scanf会从stdin读取而不是从流中读取吗? int age; while(age!= 0){ printf(“您几岁?”); if(scanf(“%d”,& age)> 0){ printf(“您%d岁!\n”岁); }否则{ 休息; } }
..
我应该提出一个利用“返回libc缓冲区溢出"的程序.这是在执行时干净地退出并显示SHELL提示.该程序在bash终端中执行.下面是我的C代码: #include int main(int argc, char*argv[]){ char buffer[7]; char buf[42]; int i = 0; while(i
..
我正在尝试测试QNX 6.6.0和6.5.0之间的向后兼容性(以较早的 未知符号:__stack_chk_guard ldd:FATAL:无法解析所有符号 是什么原因造成的?.. (我已经找到了解决方案,但是它无法立即起作用.当我开始编写此问题时,我意识到我所犯的错误.为将来参考,我将在此处以Q& A本人提供解决方案). 解决方案 由于QNX使用的是gcc(qcc):
..