zoukankan      html  css  js  c++  java
  • 20145217《信网络对抗》逆向与BOF基础实践

    20145217《信网络对抗》逆向与BOF基础实践

    内容:

    一、简单机器指令,汇编语言

    • 1.'objdump -d xxx|more'反汇编命令查看机器代码,'cat'显示文件内容,'xxd'16进制显示,'cp'复制文件,'mkdir'新建文件夹等等

    • 2.栈用于实现函数或过程调用,相关寄存器'BP、FP、SP',相关操作'PUSH'压栈、'POP'弹栈

    • 3.函数调用过程的三个步骤:'prologue'保存当前的栈基址(ebp);'call': 调用参数和返回地址('eip')压栈,跳转到函数入口;'return': 恢复调用者原有栈

    • 4.部分指令机器码

      ①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指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

    二、缓冲区溢出攻击

    • 当调用函数时,'Call'指令会将返回地址('Call'指令下一条指令地址)压入栈,'Ret'指令会把压栈的返回地址弹给EIP

    栈溢出攻击的原理

    • 通过缓冲区溢出修改栈中的返回地址,当函数调用返回,EIP获得被修改后的返回地址,并执行'Shellcode'

    三、两个实验

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

    • (1)反汇编查看'pwn1'的机器代码

    • (2)'main'函数,注意'call'指令行

    • (3)'getshell'函数的地址

    • (4)计算偏移量

    • (5)'vim'编辑器打开

    • (6)转成16进制

    • (7)查找命令段

    • (8)修改,insert可以切换输入模式

    • (9)改好了以后编码模式再还原回去

    • (10)运行下结果如下图

    2.'Linux'栈溢出/'Shellcode'

    • (1)gdb调试pwn2,测试溢出长度


    • (2)用脚本语言建立一个文件,用'cat'显示文件内容,效果如下

  • 相关阅读:
    通过字符串调用函数
    First,FirstOrDefault和Single,SingleOrDefault 的区别
    asp循环例子
    将il文件和资源文件生成dll工具
    C# 修改资源文件工具ResourceNet4
    北京ip
    实验1、Mininet 源码安装和可视化拓扑工具
    实验2:Mininet 实验——拓扑的命令脚本生成
    ajax post data 获取不到数据,注意 contenttype的设置 、post/get
    调试提示:当前不会命中断点
  • 原文地址:https://www.cnblogs.com/jokebright/p/6480910.html
Copyright © 2011-2022 走看看