zoukankan      html  css  js  c++  java
  • 20145222黄亚奇 《网络对抗技术》 MAL_逆向与Bof基础

    学习目的

    • 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用:
    • 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行、却本不应该执行的代码部分首地址(这需要我们有一定的权限修改可执行文件)
    • 通过缓冲区溢出:输入数据,使其超出缓冲区大小,并覆盖住返回地址(新的返回地址为另一部分我们希望执行、却本不应该执行的代码部分首地址)

    基础知识

    • objdump -d test :反汇编test
    • more : more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能
    • nop : 空操作指令,执行指令使程序计数器PC加1,占用一个机器周期
    • ebp esp : 寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低址地)
    • bp : 16位 ebp :32位 rbp :64位
    • info r :info registers , 查看寄存器的情况
    • 缓冲区溢出攻击:是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,当覆盖到堆栈中的返回地址时,将会引起程序错误或运行其他程序
    • call : call指令的机器代码表示为4字节(IA32的ATT格式),0x80 ** ** **,后3个字节为跳转到的指令地址到目前下一条指令的地址的偏移量,即 :
      后3个字节的值 + eip(目前所运行的call指令的下一条指令的地址) = 新eip(要跳转到的指令的地址)

    方法一:直接修改机器指令

    • 可执行文件pwnl作用:输入什么字符串就返现相同的字符串.

    • 修改机器指令后,希望能够运行可执行文件里的另一部分代码(getshell)

    具体步骤:

     1. `vi 20145221`,用vim编辑器查看可执行文件20145221;
     2. `%! xxd`,进入vi编辑模式后,发现乱码,键入前述指令查看其16进制表示;
     3. `/e8 d7`,查询需要改动的机器码的位置,锁定后,按i进入文本编辑模式,将其改为e8 c3
     4. `%! xxd -r`,退出16进制模式(注意:此处如果直接以16进制形式保存退出,运行该文件会报错)
     5. `:wq!`,保存并退出。
    
    • 测试可执行代码成功跳转运行getshell

    • 执行指令:./20145222,结果如下:

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

    BOF漏洞

    经试发现,当输入达到28字节产生溢出Segmentation fault。

    • 目的:让程序调用完foo函数后走向getshell函数。

    • GDB调试,确认用什么值来覆盖返回地址

    1. gdb 20145222,进入调试,并输入一串可让其溢出的字符;
    2. info r,查看溢出时寄存器状态如下:

    此时“1234”覆盖了其新的eip,所以我们只需要将getshell的内存地址替换这4个字符,就可以达到程序向getshell函数转移的目的。
    3. 构造一串特殊的输入,由于getShell的内存地址是0x0804847d,而其对应的ASCII没有字符,所以我们通过一个简单的perl脚本语言来构造输入值。
    4. perl -e 'print "12345678123456781234567812345678x7dx84x04x08x0a"' > input
    注意:kali系统采用的是大端法,所以构造内存地址时注意顺序,末尾的a表示回车换行。

    (cat input; cat) | ./20145221,将input文件作为输入,结果如下:

  • 相关阅读:
    生物神经网络和人工神经网络浅谈
    卷积神经网络
    DOM进阶之HTMl属性操作(对象属性)
    01 selenium基本使用补充
    01 selenium基本使用
    day4笔记
    03 获取豆瓣电影top250
    02 爬取视频
    day3笔记
    01 requests基本使用
  • 原文地址:https://www.cnblogs.com/huangyaqi/p/6504665.html
Copyright © 2011-2022 走看看