#include <stdio.h>
#include <string.h>
char Lbuffer[] = "01234567890123456789========ABCD";
void foo()
{
  char buff[16];
  strcpy (buff, Lbuffer);
}
int main(int argc, char * argv[])
{
   foo(); return 0;
}

32位Linux系统的C函数如下:

void foo01()

{

char buff[16]; char Lbuffer[] = "01234567890123456789========ABCD";

strcpy (buff, Lbuffer);

}

char Lbuffer[] = "01234567890123456789========ABCD";

void foo02()

{

char buff[16]; strcpy (buff, Lbuffer);

}

用foo01()和foo02()替换buffer_overflow.c中的foo(),通过gdb调试, 分析foo01()和foo02()是否存在缓冲区溢出漏洞。

首先关掉关闭栈底随机化

创建测试实例

编译并运行该C程序

反汇编main和foo

在关键位置设置断点并运行程序

函数入口处的堆栈指针esp 指向的栈(地址为 0xbffff10c)保存了函数foo() 返回到调用函数 (main)的地址(0x080484af),即“函数的返回地址”。

记 录 堆 栈 指 针 esp 的 值 , 在 此 以 A 标 记 :

A=$esp=0xbffff10c

继续执行到下一个断点

由于C 语言默认将参数逆序推入堆栈,因此,src(全局变量Lbuffer的地址)先进栈(高地址),des(foo()中buff的首地址)后进栈(低地址)。

可见,Lbuffer的地址0x804a040保存在地址为0xbffff0d4的栈中,buff的首地址0xbffff0ec保存在地址0xbffff0d0的栈中。

令B=buff的首地址=0xbffff0ec

则buff的首地址与返回地址所在栈的距离 =A-B=0xbffff10c -  0xbffff0ec=0x20=32。

第三个断点出现错误

预计A-B的距离为28位,实际结果32位,且在第三个断点就出现错误,实验无法继续下去,原因未知。

将foo1编译并运行,没有出现问题。

linux缓冲区溢出尝试的更多相关文章

  1. 使用Linux进行缓冲区溢出实验的配置记录

    在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等 ...

  2. Linux下缓冲区溢出攻击的原理及对策(转载)

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...

  3. 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0

    Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...

  4. Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞

    漏洞名称: Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-423 发布时间: 2013-11-29 更新时间: 201 ...

  5. Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞

    漏洞名称: Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-392 发布时间: 2013-11-29 更新 ...

  6. Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞

    漏洞名称: Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-154 发布时间: 2013-11-13 更新时间: 201 ...

  7. Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-067 发布时间: 2013-11-07 ...

  8. Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-068 发布时间: 2 ...

  9. Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-061 发布时间: 2013-11-07 更新时 ...

  10. Linux Kernel ‘oz_cdev_write()’函数本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘oz_cdev_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-060 发布时间: 2013-11-07 更新时间: 201 ...

随机推荐

  1. uni-app配置钉钉小程序步骤

    1.创建项目 2.在项目根目录配置或者新建package.json文件,配置代码 { "uni-app": { "scripts": { "mp-di ...

  2. 小僧の神様・城の崎にて.PDF

    书本详情 小僧の神様·城の崎にて作者:志賀直哉出版社:新潮社时间:1968.07页数:270 ISBN:  

  3. springboot项目基于mybatis-plus创建逆向工程

    pom 依赖 <!--web 依赖--><dependency> <groupId>org.springframework.boot</groupId> ...

  4. flutter Stack 绝对布局的使用

    使用stack 和Positioned 实现绝对布局 进行位置偏移 Container( alignment: Alignment.center, width: double.infinity, ch ...

  5. java心形打印999

    心形打印999 农历七月初七,七夕节也就是中国民间版的所谓情人节,利用java打印心型999个图案可以让程序员更浪漫一些.现在下面由小编简要的说一下如何做到.首先下面是打印心形但却不是999个的代码, ...

  6. uni-app学习笔记之----不同平台,独立设置

    (不断补充中...) 1.导航栏 2.条件编译 不同的条件标记,会被编译到不同的平台 开头:[#ifdef]或[#ifndef] + 平台名称 结尾:[#endif] html中: js中: css中 ...

  7. DDL数据定义--Hive中数据可和表的基本操作(增删改查)

    数据库 创建数据库: CREATE DATABASE [ IF NOT EXISTS ]  database_name *****IF NOT EXISTS进行判断,避免创建的数据库已经存在的错误 创 ...

  8. Java06 面向对象

    一 什么是面向对象 面向对象编程(Object-Oriented Programming,OOP) 面向对象编程的本质就是:以类的方式组织代码,以对象组织(封装)数据. 三大特性: 封装 继承 多态 ...

  9. Enhancement S_ALR_87011964 Asset Balance Report to add custom column

    Enhancement S_ALR_87011964 Asset Balance Report to add custom column - SAP Tutorial Include own fiel ...

  10. 查看Windows操作系统编码方式

    chcp 编码表: 代码页 国家(地区)或语言 437 美国 708 阿拉伯文(ASMO 708)720 阿拉伯文(DOS)850 多语言(拉丁文 I) 852 中欧(DOS) - 斯拉夫语(拉丁文 ...