zoukankan      html  css  js  c++  java
  • 20145228《网络对抗》逆向及Bof基础

    实践目标

    本次实践的对象是一个名为pwn1的linux可执行文件。

    该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

    该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

    我们将学习两种方法:

    •利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

    •手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

    基础知识

    •objdump命令反汇编目标文件;

    vi内

    将显示模式切换为16进制模式

    :%!xxd

    查找要修改的内容

    /内容

    转换16进制为原格式

    :%!xxd -r

    存盘退出vi

    :wq

    实验步骤

    实验1、直接修改程序机器指令,改变程序执行流程

    ·首先进入Vi模式,然后输入:%!xxd,将显示模式切换为16进制模式

    ·查找要修改的内容/e8d7
    ·找到后前后的内容和反汇编的对比下,确认是地方是正确的

    ·修改d7为c3

    ·转换16进制为原格式:%!xxd -r
    ·存盘退出vi:wq

    ·运行下改后的代码,会得到shell提示符#

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

    objdump -d pwn1 | more语句来实现反汇编,管道的作用是将前半段的输出作为后半段的输入,从而输出出来。

    在输出的反汇编语句中找到getshell函数段

    ·使用gdb进行测试

    从得到的eip值查ASCII码可得结果为1234

    •使用perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input指令将perl生成的字符串存储到文件input中。

    •使用输出重定向“>”将perl生成的字符串存储到文件input中。


    •可以使用16进制查看指令xxd查看input文件的内容是否如预期。

    •用(cat input; cat) | ./20145228将input文件作为输入

  • 相关阅读:
    Mysql 重置密码
    windows下如何安装和启动MySQL
    连接到 PostgreSQL 数据源(SQL Server 导入和导出向导)
    通过apt-get安装JDK8
    Windows 更快捷方便的安装软件,命令提示符上安装 Chocolatey
    Windows 的命令行安装Scoop程序管理工具
    CentOS 7更改yum源与更新系统
    Mysql 获取表设计查询语句
    坐标3度带与6度带的知识(转载)
    jQuery学习---第三天
  • 原文地址:https://www.cnblogs.com/J000/p/6486699.html
Copyright © 2011-2022 走看看