Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出) Note:本文大部分来自于看雪hackyzh的中文翻译,加入了一些自己的理解 典型的基于堆栈的缓冲区溢出 虚拟机安装:Ubuntu 12.04(x86) 这个帖子是最简单的漏洞开发教程系列,在互联网上你可以找到很多关于它的文章.尽管它丰富和熟悉,我更喜欢自己写博客文章,因为它将作为我未来许多职位的先决条件! 什么是缓冲区溢出? 将源缓冲区复制到目标缓冲区可能导致溢出 1.源字符串长度大于目标字符串长度. 2.…
(1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { /* [1] */ char buf[256]; /* [2] */ strcpy(buf,argv[1]); /* [3] */ printf("Input:%s\n",buf); return 0; } 编译 sudo sh -c "echo 0 > /proc/…
Off-By-One 漏洞 (基于栈) 原文地址:https://bbs.pediy.com/thread-216954.htm 什么是off by one? 将源字符串复制到目标缓冲区可能会导致off by one 1.源字符串长度等于目标缓冲区长度. 当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上方.这里由于目标缓冲区位于堆栈中,所以单个NULL字节可以覆盖存储在堆栈中的调用者的EBP的最低有效位(LSB),这可能导致任意的代码执行. 一如既往的充分的定义,让我们…
一般这个问题是数组越界. 我产生这个异常的代码是这句:memcpy(tmp_cert.byKey, m_row[2], 255); 255的长度超过了char数组tmp_cert.byKey的长度.…
漏洞名称: Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-067 发布时间: 2013-11-07 更新时间: 2013-11-07 危害等级:    漏洞类型: 缓冲区溢出 威胁类型: 本地 CVE编号:   漏洞来源: x90c Linux kernel是美国Linux基金会发布的一款操作系统Linux所使用的内核.         Linux kernel中存在本地基于堆的缓冲区溢出漏洞,该…
漏洞名称: Nagios Core/Icinga 基于栈的缓冲区溢出漏洞 CNNVD编号: CNNVD-201402-484 发布时间: 2014-03-03 更新时间: 2014-03-03 危害等级: 中危   漏洞类型: 缓冲区溢出 威胁类型: 远程 CVE编号: CVE-2014-1878 Nagios是美国程序员Ethan Galstad所研发的一套开源的系统运行状态和网络信息监控程序,该程序提供网络服务监控.主机资源监控.短信报警等功能.Icinga是Icinga项目的一套企业级开源…
绕过ASLR - 第一部分 什么是 ASLR? 地址空间布局随机化(ASLR)是随机化的利用缓解技术: 堆栈地址 堆地址 共享库地址 一旦上述地址被随机化,特别是当共享库地址被随机化时,我们采取的绕过NX bit的方法不会生效,因为攻击者需要知道libc基地址.但这种缓解技术并不完全是万无一失的,因此在这篇文章中我们可以看到如何绕过共享库地址随机化! 原文地址:https://bbs.pediy.com/thread-217107.htm 也许已经有人发现了,这个系列没有系列五……其实是五太麻烦…
原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲的很清楚,有些坑我在之前的说明中也已经说过了.这次说一个坑,我调了很久,不一定每个人都会遇到. TypeError: execv() arg 2 must contain only strings的问题 这个是问题真的很坑啊,就是地址计算会产生一个call不识别的字符(看起来是这样,具体没有细究)…
整数溢出 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出.整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代码执行.在这篇文章中,我将仅谈论整数溢出导致堆栈溢出,整数溢出导致堆溢出将在后面的单独的帖子中讨论. 后边的内容复制粘贴好烦,还是说关键点吧! 原文见:https://bbs.pediy.com/thread-216869.htm 这个文章解释的比上一个清楚多了,相信能看懂,唯一不懂的,和上一篇估计…
使用return-to-libc绕过NX bit 原文地址:https://bbs.pediy.com/thread-216956.htm 这篇讲解的比较好,主要的问题是获得system地址和exit函数地址,这两个地址除了作者说的可以使用libc的基地址计算外,还可以在gdb中查看 (gdb) b main (gdb) r `python print' "A"*268 '` (gdb) p system (gdb) p exit 大概的命令流程如上所示…