linux缓冲区溢出尝试
#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缓冲区溢出尝试的更多相关文章
- 使用Linux进行缓冲区溢出实验的配置记录
在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等 ...
- Linux下缓冲区溢出攻击的原理及对策(转载)
前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...
- 小白日记18:kali渗透测试之缓冲区溢出实例(二)--Linux,穿越火线1.9.0
Linux系统下穿越火线-缓冲区溢出 原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞. 工具: 调试工具:edb: ###python在漏洞溢出方面的渗透测 ...
- Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-423 发布时间: 2013-11-29 更新时间: 201 ...
- Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-392 发布时间: 2013-11-29 更新 ...
- Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-154 发布时间: 2013-11-13 更新时间: 201 ...
- Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞
漏洞名称: Linux Kernel ‘write_tag_3_packet()’函数本地基于堆的缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-067 发布时间: 2013-11-07 ...
- Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞
漏洞名称: Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-068 发布时间: 2 ...
- Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞
漏洞名称: Linux Kernel ‘exitcode_proc_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-061 发布时间: 2013-11-07 更新时 ...
- Linux Kernel ‘oz_cdev_write()’函数本地缓冲区溢出漏洞
漏洞名称: Linux Kernel ‘oz_cdev_write()’函数本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-060 发布时间: 2013-11-07 更新时间: 201 ...
随机推荐
- 10个.NetCore实用的开源框架项目
今天我们一起梳理下10个,比较受到大家欢迎的.NetCore开源框架项目.1.FytSoaCms 前后端分离CMS系统 项目简介 这是一个基于.Net 3构建的简单.跨平台.模块化建站系统.系统业务简 ...
- kumquat
今天准备做个解释型编程语言,名字就叫kumquat(金桔)因为我刚刚喝了口金桔柠檬茶,挺甜的 用python写把
- 7.29关灯游戏,用script实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 51电子-STC89C51开发板:回忆
全部内容,请点击: 51电子-STC89C51开发板:<目录> --------------------------- 正文开始 --------------------------- ...
- 一些sql查询的case
1.单列去重,输出去重后条目数量 select count(distinct(`id`)) from student; 2.根据分数段统计数据条目:利用case when selectcount(ca ...
- 基于注解的AOP
1.引入依赖 <!--spring aop依赖--> <dependency> <groupId>org.springframework</groupId&g ...
- DPU02是一个高度集成的USB转UART的桥接控制器
DPU02是一个高度集成的USB转UART的桥接控制器,该产品提供了一个简单的解决方案,可将RS-232设计更新为USB设计,并简化PCB组件空间.该DPU02包括了一个USB 2.0全速功能控制器. ...
- update_base_x.txt
update g_temp.test_baseset field_date = '20210101'::datewhere field_int = 6
- grep 排除目录 grep -rn CONFIG_VE --exclude-dir={arch,drivers,net} --exclude=cscope*
grep -rn CONFIG_VE --exclude-dir={arch,drivers,net} --exclude=cscope*
- next_permutation / prev_permutation 用法
给定输入的序列 a(整数即可,其他无限制条件),next_permutation(a + 1, a + n + 1) 可以求出 a 的关于值的下一个排列,prev_permutation(a + 1, ...