b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

缓冲区溢出拿服务器_缓冲区溢出本质原因_缓冲区溢出攻击

电脑杂谈  发布时间:2017-02-06 06:41:07  来源:网络整理

缓冲区溢出攻击_缓冲区溢出拿服务器_缓冲区溢出本质原因

缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。

本次实验在32为Linux下进行,如果操作系统为64位,需要按照如下方法设置。实验使用的shell脚本为zsh。

sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev
ln -s /bin/zsh /bin/sh

Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键。为了实验可以有效进行,我们需要关闭地址空间随机化。

sudo sysctl -w kernel.randomize_va_space=0

Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。漏洞利用中最关键的是Shellcode的编写。由于漏洞发现者在漏洞发现之初并不会给出完整Shellcode,因此掌握Shellcode编写技术就显得尤为重要。

下面是一个带有缓冲区溢出漏洞的程序。程序的功能是,从文件中一个长度为517的字符数组,调用带有漏洞的函数,将长度为517的字符串存储在长度为12的数组中,这一操作将导致缓冲区溢出,致使存储函数返回地址的栈空间被写入str中的值,函数不能正常返回。缓冲区溢出攻击

//stack.c
/* This program has a buffer overflow vulnerability. */
/* Our task is to exploit this vulnerability */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int bof(char *str)
{
    char buffer[12];
    /* The following statement has a buffer overflow problem */
    strcpy(buffer, str);
    return 1;
}

int main(int argc, char **argv)
{
    char str[517];
    FILE *badfile;
    badfile = fopen("badfile", "r");
    fread(str, sizeof(char), 517, badfile);
    bof(str);
    printf("Returned Properly\n");
    return 1;
}

缓冲区溢出本质原因_缓冲区溢出拿服务器_缓冲区溢出攻击

使用su用户编译程序,关闭堆栈保护,允许执行栈。设置Set-UID权限。

gcc -m32 -g -z execstack -fno-stack-protector -o stack stack.c
chmod u+s stack

我们希望可以通过缓冲区溢出得到一个带有root权限的shell。首先编写C程序如下。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30831-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...