需要材料:
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相等,然后获得成功输出

开始:
1.
- 正常运行程序
- 查看环境变量,可以看到并不存在GREENIE环境变量
- 设置变量内容为字符A,并重新查看已经被设置成功

2.
- 进入gdb,设置反汇编显示类型为英特尔类型
- 运行程序
- 查看反汇编代码

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

4.
- 设置环境变量并查看
- 进入gdb,设置反汇编类型为英特尔

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

6.
- 查看变量
- 执行程序并获得成功输出
- 使用unset GREENIE命令清除设置的变量

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