码迷,mamicode.com
首页 > 其他好文 > 详细

2017-2018-2 20155315《网络对抗技术》Exp1:PC平台逆向破解

时间:2018-03-09 10:38:42      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:参考   格式   代码片段   图片   elf文件格式   目录   dump   运行程序   tail   

实验目的

  • 本次实践的对象是一个名为pwn1的linux可执行文件。
  • 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
  • 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

实验内容

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

实验要求

  • 熟悉Linux基本操作
  • 理解Bof的原理
  • 会使用gdb,vi

实验步骤

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

  • 知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具
  • 学习目标:理解可执行文件与机器指令
  • 进阶:掌握ELF文件格式,掌握动态技术
思路
  • 一个程序的可执行文件可通过objdump命令对其进行反汇编,通过对汇编语言的学习可以看出程序读取数据的过程。
    技术分享图片
  • 从反汇编的文件来看,main函数中调用foo函数,使用call指令。通过分析发现foo函数与getShell函数的首地址之间
    存在偏移,两者之间相差了14。系统调用foo函数对应机器指令为e8 d7ffffff,则如果想调用getShell函数,就要对e8 d7ffffff进行修改。
  • 已经知道电脑是小端模式,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。因此,如果要修改,就要将"d7"改为"c3"。
  • 具体操作过程:
    • 将pwn1进行备份,修改备份文件
    • 用vi打开备份文件,用:%!xxd将显示模式切换为16进制模式
    • /d7查找要修改的内容,定位后将d7改为c3
    • :%!xxd -r将转换16进制为原格式,保存退出。
  • 再次反汇编之后,确定已经将程序修改为调用getShell函数,接下来就是运行程序了。
  • 运行时发现无法找到目录或文件,按照老师提供的教程进行操作就可以了。
运行截图

技术分享图片

思考

运行成功之后就完成了实验的第一个部分,按照老师的指导一步步操作还算顺利。遇到的问题是,第一次在16进制模式修改完数据后出现操作失误,先保存后转换,在运行的时候导致文件损坏不可用。这是因为一开始保存的时候就改变了文件的格式,使得它不再是一个可执行文件的格式。查找资料后没有找到能将其再次转换的方法,只好重新进行实验。

参考资料

2017-2018-2 20155315《网络对抗技术》Exp1:PC平台逆向破解

标签:参考   格式   代码片段   图片   elf文件格式   目录   dump   运行程序   tail   

原文地址:https://www.cnblogs.com/-zyl/p/8531778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!