• 20145213《网络对抗》逆向及Bof基础


    实践目标

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

    实践要求

    • 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分)
    • 掌握反汇编与十六进制编程器 (1分)
    • 能正确修改机器指令改变程序执行流程(1分)
    • 能正确构造payload进行bof攻击(2分)
    • Optional:进阶,shellcode编程与注入

    实践两种方法

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


    基础知识

    • NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
    • JNE:条件转移指令,如果不相等则跳转。(机器码:75)
    • JE:条件转移指令,如果相等则跳转。(机器码:74)
    • JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)
    • CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

    实验步骤

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

    1.输入指令objdump -d 20145221 | more



    2.输入指令vi 20145221,用vim编辑器查看可执行文件20145221

    3.输入指令:%! xxd,进入vi编辑模式后,发现乱码,键入前述指令查看其16进制表示

    4.输入指令:e8 d7查询,输入r进入编辑
    5.很重要,先输入指令%!xxd -r退出16进制后,再输入指令:wq保存退出


    6.输入指令./20145213运行程序

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

    1.了解函数功能,即输入一串字符输出同样的字符

    缓存区溢出,造成错误

    2.gdb指令调试

    3.构造一串特殊的输入,输出perl -e 'print "12345678123456781234567812345678x7dx84x04x08x0a"' > input

    4.输入指令(cat input; cat) | ./20145213,将input文件作为输入

  • 相关阅读:
    javascript获取xml节点的最大值
    iis 不能浏览aspx页面
    批量替换文件夹里面的文本文件的指定字符
    select update delete
    SQL IAM的理解
    数据库的页构成
    sqltype IsDBNull
    MSSQL优化教程之1.4 其他几种类型的页面
    SqlDataAdapter
    行状态,行版本
  • 原文地址:https://www.cnblogs.com/qiwei/p/6505629.html
Copyright © 2020-2023  润新知