缓冲区栈溢出 Stack2

需要材料:

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语言源码,这里没有gets函数接收输入,同时也不接收任何参数值,variable变量从环境变量GREENIE处获得赋值,由strcpy函数复制给buffer[64]数组,最后判断modified变量是否和0x0d0a0d0a相等,然后获得成功输出

缓冲区栈溢出 Stack2

开始:

1.

  • 正常运行程序
  • 查看环境变量,可以看到并不存在GREENIE环境变量
  • 设置变量内容为字符A,并重新查看已经被设置成功
缓冲区栈溢出 Stack2

2.

  • 进入gdb,设置反汇编显示类型为英特尔类型
  • 运行程序
  • 查看反汇编代码
缓冲区栈溢出 Stack2

3.

  • 在cmp eax,0xd0a0d0a内存地址处设置断点(0x080484e8)
  • 继续运行程序,查看下一个将要运行的指令 # x/i $eip
  • 查看栈后面的24字存储地址内容,可以看到环境变量的值已经被strcpy函数复制到buffer当中(0x41414141)
  • 查看modified变量内存地址存储内容为0x00000000
  • 查看之间的字节距离为64,后面跟随的4字节即为需要溢出的modified变量的地址
缓冲区栈溢出 Stack2

4.

  • 设置环境变量并查看
  • 进入gdb,设置反汇编类型为英特尔
缓冲区栈溢出 Stack2

5.

  • 反汇编main函数
  • 在对比数值的地址处设置断点(0x080484e8)
  • 查看esp寄存器的后24个地址存储内容,可以看到modified变量处的地址(0xbffff748)内容已经被修改为(0x0d0a0d0a)
  • 继续运行程序,获得成功输出
缓冲区栈溢出 Stack2

6.

  • 查看变量
  • 执行程序并获得成功输出
  • 使用unset GREENIE命令清除设置的变量
缓冲区栈溢出 Stack2

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

发表评论

登录后才能评论

联系我们

010-61943626

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

邮件:marketing@anbai.com

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