zoukankan      html  css  js  c++  java
  • 20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

    20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc

    shellcode注入实践

    编写shellcode

    编写shellcode已经在之前的实验中搞定啦,这次直接用成品咯~

    准备工作,设置环境

    基础——Bof攻击防御技术
    · 从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。
    · GCC中的编译器有堆栈保护技术(结合CPU的页面管理机制,通过DEP/NX用来将堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。)
    · 此时就需要手动设置环境,如下所示:

    apt-cache search execstack
    apt-get install execstack
    execstack --help
    execstack -s pwn1    //设置堆栈可执行
    execstack -q pwn1    //查询文件的堆栈是否可执行
    

    构造要注入的payload

    · 在Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcodenop+shellcode+retaddr``。因为retaddr在缓冲区的位置是固定的,shellcode可能在它前面或者后面,或者说缓冲区小就把shellcode放后面,缓冲区大就把shellcode放前面。 · 我们还是尝试对于pwn1用nop+shellcode+retaddr`的方法

    payload结构为nop+shellcode+retaddr

    · 编写payload

    需要注意的是:千万不能以x0a作为结束。因为x0a相当于回车,如果回车了下面的操作就gg了。

    · 打开一个新终端(终端2),将payload注入到pwn1中。注意一定不能多敲回车。
    · 在终端中输入(cat input_shellcode;cat) | ./pwn1

    · 保持终端2中程序的运行状态。

    终端1中查询pwn1进程的UID

    gdb调试,进入对应UID端口


    反汇编,设置断点

    ps:continue执行的时候,在终端2敲一下回车,终端1中的continue就会暂停在断点处了~

    往上查询找到shellcode,同时找到要覆盖的地址



    要覆盖的地址(返回地址)是0xffffd32c

    重新构造payload

    成功啦!

    return-to-libc实验

    首先需要配置32位linux环境

    sudo apt-get update
    sudo apt-get install lib32z1 libc6-dev-i386
    sudo apt-get install lib32readline-gplv2-dev
    

    这里简直有毒[smile],我安装的时候总是报错,上网查了一下需要先apt-get update还有apt-get upgrade一下,然后吧我就开始在终端搞了,然后吧我嫌弃网速太慢就开了个热点,当时瞟了一眼看到的是17.1M,觉得没啥嘛反正月底了。然后[smile],我就收到了流量超量提醒,用了6G,手动再见。
    这个故事告诉我们,开热点做实验很容易手滑。

    添加新用户

    · 因为最后的是要通过看“是否取得root权限”来判断成功与否的,所以攻击对象不能是root用户,要创建一个新用户。

    设置实验背景

    · 进入32位环境,关闭地址随机化,设置zsh程序代替/bin/bash

    · 在/tmp文件夹下编写漏洞程序retlib

    · 在root用户下编译,关闭栈保护机制,并设置SET-UID

    在/tmp文件夹下编写getenvaddr和exploit

    · 用来读取环境变量的代码getenvaddr:

    上图手滑了好几处,正确的代码应该是长这样的:

    · 用来攻击的代码:exploit

    · 也是在root用户下编译的

    获取地址并修改exploit

    · 获取BIN_SH地址

    · 进入gdb设置断点,调试运行获取system和exit地址

    · 将上述三个地址修改入exploit.c文件

    最后~攻击,over

    先运行exploit再运行retlib就可以可获得root权限,成功!

    实验感想

    心好累,我的流量一去不复返了。操作中很多细节的地方需要注意,比如多一个少一个回车的问题,就很容易有影响。我第一次做的时候因为直接在pwn1的文件上做了,但是又从头来过,所以就很尴尬的是,pwn1文件已经被修改了,所以我从码云上下载了新的pwn1文件,但是权限有问题,需要先chmod u+x pwn1改一下它的权限之后才可以继续往下做,之前拷贝的老师的虚拟机应该是已经更改过权限的~这个故事告诉我们,做实验的时候还是先拷贝一下比较好,或者来个虚拟机快照之类的也不错~谁知道哪天就崩了呢。

  • 相关阅读:
    linux以下安装dnw
    【Spark】Spark容错机制
    Codeforces Round #273 (Div. 2)
    IOS开发之简单计算器
    Andorid使用WiFi 连接adb进行调试
    i2c_set_clientdata函数【转】
    内核添加dts后,device和device_driver的match匹配的变动:通过compatible属性进行匹配【转】
    devm_kzalloc【转】
    RK3288 make otapackage 出错的问题【转】
    RK3288-OTA编译失败解决办法【转】
  • 原文地址:https://www.cnblogs.com/bestixyh/p/6649378.html
Copyright © 2011-2022 走看看