• 上学期实验楼上做过这个实验

  • 直接修改程序机器指令,改变程序执行流程

    • 首先进行反汇编
    •  
    • 我们所要修改的是,程序从foo返回,本来要返回到80484ba,而我们要把80484ba修改为getshell的首地址,所以通过vim直接查看可执行文件,并找到程序从foo返回的二进制代码,并将其替换,使之跳转到函数getshell。

    • 这样程序就跳转到了getshell

  • 缓冲区溢出攻击

    • 在调用foo函数时,输入的字符会存储在foo函数的栈内,程序会提前申明缓存区的大小,如果数据过大,超过缓冲区的大小,显然会溢出,然而我们知道,数据是从低地址向高地址存储,堆栈所存储的返回地址也在高地址,如果我们的数据恰好覆盖了返回地址,那么程序的执行就会发生改变,如果将返回地址修改为getshell的首地址,那么调用完fool之后,就会调用getshell,而不会返回main函数了
    • 通过尝试,当输入28个字符时就会发生溢出
  • 感想

    • 上学期做过缓冲区溢出的实验,是在实验楼上面进行的。相比较实验楼上的实验,本次实验在操作上面没有实验楼的难,但有了一些新的收获。我觉得直接修改可执行文件这个方法有点强,哈哈,简单直接。构造参数这个方法和实验楼的原理大致相同。通过这几次实验,发现缓冲区溢出攻击的原理简单,但具体操作的方法却不简单,而且多种多样,可见对不同的程序要用不同的方式去攻击。

最新文章

  1. easyui如何动态改变列的编辑属性
  2. cookie设置保存用户名,填入中文名之后出现的错误500问题
  3. Symantec Backup Exec 2012 Agent For Linux安装
  4. Spring中的通知(Advice)和顾问(Advisor)
  5. RabbitMQ安装配置
  6. PHP基础封装简单的MysqliHelper类
  7. iOS10 UI教程管理层次结构
  8. HDU 4588 Count The Carries (数学,计数)
  9. 【Maven实战】仓库介绍和Nexus的安装
  10. 纠错记录(Could not open the editor: Android XML Editor cannot process this input.)
  11. [6278009]使用Visual Stuido Code 编写Markdown
  12. JAVA中Socket的用法模拟服务端和客户端
  13. 简单的sql调优(批处理)
  14. Redis 分布式锁的实现
  15. Docker基本命令与使用 —— Docker容器的网络连接(四)
  16. RPC通信原理
  17. Calling Synchronous Methods Asynchronously
  18. HTML的报告
  19. python管道pipe
  20. Python面试题目之深浅拷贝浅析

热门文章

  1. 如何下载ubuntu桌面,并使用
  2. call to unavailable function system not available on ios 解决方案
  3. manacher算法处理最长的回文子串(二)
  4. centos 6.5 安装图形界面【转】
  5. 《ASP.NET1200例》C#在网页上编写动态时钟
  6. zoj3662(dp)
  7. Leetcode-Construct Binary Tree from inorder and postorder travesal
  8. Leetcode-Convert Sorted Array to BST
  9. HDU 5157 Harry and magic string(回文树)
  10. c# ,socket编程的一些常用方法