首页 技术 正文
技术 2022年11月23日
0 收藏 696 点赞 4,593 浏览 1166 个字

20145308 《网络对抗》 逆向及BOF基础实践 学习总结

实践目的

  • 通过两种方法,实现程序能够运行原本并不会被运行的代码

    实践原理

  • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数
  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

    知识点学习总结

    汇编、机器指令

  • 汇编指令与机器指令一一对应

    EIP、指令地址

  • %eip存储指向下一条要执行的指令的地址
  • %ebp存储栈底指针,栈基址
  • %esp存储栈顶指针,始终指向栈顶
  • ESP存储栈底地址,是由ESP在函数调用之前传递给EBP的。等到调用结束之后,EBP会把其地址再次传回给ESP。所以ESP再次指向了函数调用结束后,栈顶的指针

    方法一

    反汇编了解程序

  • 首先将可执行文件pwn1复制另存为文件名为学号20145308的文件并执行,可实现回显输入的字符串的功能
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 使用objdump -d 20145308 | more命令查看目标文件20145308的反汇编代码
  • getshell
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • foo
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • main
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 可看到main函数在call 8048491处调用执行foo函数,对应机器码为e8 d7ffffff
  • 想要使main函数在此处改为跳转执行getshell函数,修改d7ffffff(EIP+d7ffffff=foo)c3ffffff(EIP+c3ffffff=getshell)即可

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

  • 使用vi打开20145308,将显示模式切换至16进制模式,并查找到e8 d7
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结
  • d7改为c3,并将模式改回原格式,保存
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 运行修改后的文件,成功执行getshell
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

方法二

反汇编了解函数

  • 复制可执行文件pwn120145308lhy
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 使用objdump -d 20145308lhy | more进行反汇编
  • 目标触发函数getshell
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 正常运行的可执行函数foo
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 读入字符串部分函数
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

确认输入字符串哪几个字符会覆盖到返回地址

  • 输入长度超过缓冲区的字符串
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 通过查看EIP寄存器的值,发现是5覆盖返回地址
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 再次输入另一字符串,精确确定是字符串的哪个位置覆盖返回地址
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 查看EIP寄存器,发现是1234四个数字覆盖返回地址
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

构造输入字符串

  • 构造用getsell地址覆盖返回地址的字符串
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • 使用16进制格式查看input文件
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

  • input通过管道符|作为20145308lhy的输入,缓冲区溢出,覆盖返回地址,返回到getshell,截获getshell后输入命令ls成功执行
    20145308 《网络对抗》 逆向及BOF基础实践 学习总结

其他

  • 本次实践使用两种方法实现了使程序执行了getshell,第一种方法为利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数;第二种方法为手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。通过这次实践复习加深了对上学期学习的Linux命令的理解,也对本次实践所要学习的知识有所掌握
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,884
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,411
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,230
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,043
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,673
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,709