zoukankan      html  css  js  c++  java
  • 20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    基础知识

    • Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址。
    • Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode ,nop+shellcode+retaddr ,缓冲区小就就把shellcode放后边,不然就放前边。

    实验步骤

    1.准备一段shellcode代码

    2.设置环境

    Bof攻击防御技术

    • 首先需要安装execstack

      

    • 手动设置环境使注入的shellcode到堆栈上可执行

      

    • 关闭地址随机化,more /proc/sys/kernel/randomizevaspace 用来查询地址随机化是开启状态还是关闭状态,2表示开启,0表示关闭

      

    3.构造要注入的payload

    • 采用nop+shellcode+retaddr 方式(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

      

    • 打开一个新的终端,注入攻击buf

      

    • 再打开另外一个终端,用gdb来调试20145216pwn这个进程,找到20145216pwn的进程号(由于第一次没有出现./20145216pwn1这个进程,重新做实验时,将文件名改为20145216pwn,因此以下的进程名为./20145216pwn)

      

      该进程的进程号为:2059

    • 启动gdb调试进程,追踪进程2059,设置断点,查看注入buf的内存地址 发现0x080484ae ret 就跳到我们覆盖的retaddr那个地方了

      

      

      

    • 设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd31c,shellcode就紧挨着这个地址,加四字节为0xffffd320

      

    • 退出gdb,按照anything+retaddr+nops+shellcode 修改input_shellcode

      

    实验中遇到的问题

    问题1:

    第一次安装execstack 没有成功,问了其他同学后得知是因为虚拟机没有连网,所以安装失败,需要关闭虚拟机,选择网络适配器将网桥改为net,再次打开虚拟机输入命令安装成功。

    问题2:

    用gdb调试20145216pwn1这个进程的时候,输入命令终端中没有出现 ./20145216pwn1这个进程,查看其他同学的博客后发现是因为在另一个注入buf的进程中按了回车,于是我又重新做了一遍实验,将原始文件重新拷贝并命名为20145216pwn,最后才成功。

  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/sjy519/p/6537423.html
Copyright © 2011-2022 走看看