20155211 Exp1 PC平台逆向破解(5)M

20155211 Exp1 PC平台逆向破解(5)M

实践目标

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

实践内容

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

实践

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

  1. 反汇编:命令:objdump -d pwn1
  2. 若将call 8048491 修改为call 804847d ,需要将d7修改为c3
  3. 修改过程:
    • vi打开编辑文件;
    • :%! xxd将二进制文件转换为十六进制编辑模式
    • /找到修改位置
    • i进入编辑模式
    • :%! xxd -r转回二进制模式
    • :wq保存退出
      4.与修改前对比

通过构造输入参数,造成BOF攻击,改变程序执行流

  1. 反汇编以了解程序基本功能
  2. 确认输入字符串哪几个字符会覆盖到返回地址

  1. 将这些字符换成getshell的内存地址,通过perl生成在ASCII界面所无法输入的16进制值,用(cat input; cat) | ./xxx来进入程序

  2. 构造输入字符串

    • 由为我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以先生成包括这样字符串的一个文件。\x0a表示回车,如果没有的话,在程序运行时就需要手工按一下回车键。
    • 使用16进制查看指令xxd查看input文件的内容是否如预期。
    • 然后将input的输入,通过管道符“|”,作为pwn1的输入。

注入Shellcode并执行

  • 疑问:准备环节时当输入++execstack -s pwn1++进行修改设置时,系统报错。

  • 关于解决:在网上查询相关资料后并进行如下尝试后并没有效果。

实验总结

  1. 实验收获与感想
    这次实验带领我们复习了linux的相关指令,通过使用gdb调试的方法,学习了BOF的相关原理与防御方面的知识,感觉这是一门能让我们扎实学到知识的课程
    2.什么是漏洞?漏洞有什么危害?
    漏洞就是正常功能的硬件、软件或者策略中的缺陷。黑客利用漏洞来破坏计算机安全,达到其他对正常使用者不利的目的。

posted on 2018-03-18 21:02  20155211  阅读(162)  评论(0编辑  收藏  举报