zoukankan      html  css  js  c++  java
  • 逆向与BOF基础——注入shellcode并执行&Return-to-libc

    逆向与BOF基础——注入shellcode并执行

    准备阶段

    • 下载安装execstack.

    • 本次实验实验的shellcode是心远的文章中生成的代码,即x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80

    • 为减少实验难度,设置堆栈可执行,并关闭地址随机化。

    实验过程

    1.构造注入的payload,格式为nop(即x90)+shellcode+返回地址。

    2.gdb调试该段代码,判断返回地址应在哪里。

    3.跳坑,进去体验一下。

    4.重新开始时,使用了另一种构造注入payload的方法,anything+retaddr+nops+shellcode,只要返回地址在该范围内,最终都会滑行到shellcode上。

    5.成功。

    Return-to-libc

    准备工作

    • 执行安装可用于编译32位程序的东西的命令。
    sudo apt-get update
    sudo apt-get install lib32z1 libc6-dev-i386
    sudo apt-get install lib32readline-gplv2-dev
    
    • 进入32位Linux环境,使用bash。

    攻击漏洞程序并获得root权限

    • 关闭堆和栈初始地址的随机化。

    • 用zsh代替/bin/bash

    • 编写漏洞程序,保存在/tmp目录下

    • 编译该程序,使用“栈不可执行”,设置SET-UID

    • 编写读取环境变量的程序并编译

    • 编写攻击程序,将其放在/tmp下

    • 使用获取环境变量的程序取得BIN_SH 的地址

    • 使用GDB获取system和exit的地址

    • 修改攻击程序,将取得的地址填入相应的位置,重新编译。

    • 运行攻击程序和漏洞程序,获得root权限。

    将/bin/sh 重新指向/bin/bash(或/bin/dash)

    • 指向/bin/bash

    • 指向/bin/dash

    与缓冲区溢出漏洞实验的异同

    • 相同之处:利用漏洞来获得对被攻击者的权限,都需关闭地址随机化。
    • 不同之处:缓冲区溢出需用shellcode的地址来覆盖程序的返回地址,使漏洞程序去执行栈中的shellcode;而return-to-libc是漏洞程序调转已编好的代码实现攻击。
  • 相关阅读:
    安装一些好用的工具
    转:通过快键强制关闭 Ubuntu 上无响应的程序
    同步cm10.1源码时出现的一些错误的解决办法。
    repo sync的介绍翻译
    配置grub解决ubuntu12.04不能保存亮度和调节的问题
    给fcitx加上云拼音库
    自己安装配置ubuntu12.04过程(内容丰富)
    关于repo sync -j*的含义的猜测
    同步cm10.1的时候发生同步错误不能找到github上的文件
    Element-ui tree组件自定义节点使用方法
  • 原文地址:https://www.cnblogs.com/LLLLLLQL/p/6531998.html
Copyright © 2011-2022 走看看