缓冲区栈溢出 Stack1

需要材料:

1.https://www.vulnhub.com/entry/exploit-exercises-protostar-v2,32/

镜像文件

2.https://github.com/hellosputnik/exploit-exercises/tree/master/Protostar

源码

背景知识:

1. c/汇编/gdb/python/逆向/linux – 使用及对应知识

开始之前:

1.安装虚拟机

2.使用帐号密码user:user进行登录

3.进入/opt/protostar/bin 程序代码目录中

4.切换执行终端shell为bash 执行/bin/bash

5.查看C代码,这里需要把modified变量的存储值修改为0x61626364,从而获得输出”you have correctly got the variable to the right value”

缓冲区栈溢出 Stack1

开始:

1.源码中要求传递参数,使用strcpy函数把参数复制到buffer数组当中,尝试正常运行程序

缓冲区栈溢出 Stack1

2.

  • 进入gdb
  • 设置显示反汇编类型为英特尔
  • 设置断点
  • 输入参数字符A,运行程序
  • 反汇编main函数
缓冲区栈溢出 Stack1

3.

  • 查看如果没有输入参数,将要被调用打印的字符串
  • 在对比指令cmp eax,0x61626364 (0x080484ab)内存地址处设置断点
  • 查看$esp+0x5c内存地址存储的内容 #即数字0被复制给modified变量
  • 查看$esp后24个内存地址存储的内容,可以看到参数字符A的值(\41),左边0bffff730内存地址行开始
  • 计算$esp+0x5c到0xbffff73c内存地址之间的距离为64,后面在加上4字节即为溢出后的modified变量的内存地址存储内容,最右下角(0xbffff77c)
缓冲区栈溢出 Stack1

4.

  • 重新运行程序64个字符A加上源代码中需要和modified变量对比的值
  • 到达main函数断点处,继续运行程序 # c 短指令
  • 查看下一个将要执行的指令 #即需要和modified变量对比的指令
  • 查看后24字$esp存储地址的内容,可以看到最右下角是我们溢出的字符串存储位置 # 0x61626364
  • 继续运行程序获得成功输出
缓冲区栈溢出 Stack1

5.

  • 在终端进行尝试,这里接触小端存储问题(高位字节存储靠前,低位字节存储靠后),需要反转后4十六进制字节才可以成功
缓冲区栈溢出 Stack1

原创文章,作者:absec,如若转载,请注明出处:http://absec.cn/?p=715

发表评论

登录后才能评论

联系我们

010-61943626

在线咨询:点击这里给我发消息

邮件:marketing@anbai.com

工作时间:电话:周一至周五,10:00-18:30,节假日休息,邮件随时发哦~