Linux下缓冲区溢出攻击及Shellcode
来源:互联网 发布:天威网络测速 编辑:程序博客网 时间:2024/05/05 01:10
4.3.2 Linux32环境下函数的返回地址
编译、链接、执行程序buffer_overflow.c,并关闭Linux的栈保护机制,参见截图:
下面用gdb调试程序:
在foo函数的入口、调用strcpy函数处和foo返回处设置断点:
继续运行,找到函数的返回地址:
buff的起始地址B到保存函数的返回地址A之间的偏移:
A-B=0xbffff29c-0xbffff280=0x1c=16+12=28
因此,如果Lbuffer的长度超过28字节,将会发生缓冲区溢出,Lbuffer中偏移28的4个字节“ABCD”将覆盖地址为0xbffff29c内存单元的值,即foo的返回地址变为“ABCD”(0x44434241)。
由于0x44434241不可访问,因此出现断错误。
4.3.3 Linux32环境下的Shellcode编写
编译、链接、执行shell_asm_fix_opcode.c,可以通过缓冲区溢出获得shell,参见下图:
4.4做实验并写实验报告
没有修改文件前:
为了找出发生溢出的原因,用gdb调试:
由于lvictim没有发生溢出,所以为了调试方便,我把老师的源代码buffer[512]改成了buffer[500],如图:
重新编译运行,发生段错误:
下面开始用gdb调试,找出smash_largebuf函数的返回地址所在的内存单元与缓冲区起始地址的距离。
先反编译smash_largebuf函数:
然后设置三个断点:
下面启动进程,得到函数的返回地址0xbffff35c:
继续执行到下一个断点,buff的开始地址在0xbffff158,存放在0xbfffed30中:
所以:
0xbffff35c-0xbffff158=0x204=516
OFF_SET=516
BUFFER_ADDRESS有一个范围,可以从0xbffff158开始设置
程序中需要改动的地方如下:
下面开始演示攻击lvictim,并获得shell,要注意关闭地址随机化:
可以看到,已经获得了shell,实验成功了。
完
- Linux下缓冲区溢出攻击及Shellcode
- linux 下实现缓冲区溢出漏洞shellcode
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- linux 下缓冲区溢出攻击原理及示例
- Linux下缓冲区溢出攻击的原理及对策
- linux 下缓冲区溢出攻击原理及示例
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- Linux下缓冲区溢出攻击的原理及对策
- 3Sum.h
- LeetCode24之SwapNodesInPairs的Java 题解
- 部署war包
- centos 6.5挂载ntfs分区
- Spring 枚举类前端String传到后端自动转变为枚举
- Linux下缓冲区溢出攻击及Shellcode
- android-support-v7-recyclerview.jar 22.1版本有bug
- Magento通过SKU或者product_id 得到该product对象
- 禁用LDAP 空库查询 disable null base queries
- Android内存泄露分析
- (3667)POJ
- Windows 系统关机、重启、睡眠、休眠及唤醒消息
- 内存池
- Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法