zoukankan      html  css  js  c++  java
  • 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. 构造输入字符串

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

    注入Shellcode并执行

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

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

    实验总结

    1. 实验收获与感想
      这次实验带领我们复习了linux的相关指令,通过使用gdb调试的方法,学习了BOF的相关原理与防御方面的知识,感觉这是一门能让我们扎实学到知识的课程
      2.什么是漏洞?漏洞有什么危害?
      漏洞就是正常功能的硬件、软件或者策略中的缺陷。黑客利用漏洞来破坏计算机安全,达到其他对正常使用者不利的目的。
  • 相关阅读:
    kafka 启动停止
    kafka消息长度限制
    python给回调函数传参数
    Promise封装setTimeout
    Twisted 基础
    kafka-eagle
    go安装
    python asyncio
    ajv参数验证
    sequlizejs学习笔记整理
  • 原文地址:https://www.cnblogs.com/xxy9712/p/8597472.html
Copyright © 2011-2022 走看看