基于Ubuntu16.04的缓冲区溢出实验进阶版:Return-to-libc实验

这个实验是缓冲区溢出实验的进阶版,目的是攻破不可执行栈机制
经典的缓冲区溢出,存放恶意代码的位置在栈帧中,由于不可执行栈机制即使return到了恶意代码的正确位置,由于栈是不可执行的,恶意代码仍然无法被正确执行
如果将返回地址改成c库的system函数所在位置,就可以通过system函数执行自己想执行的恶意代码
本来这个实验还有execve版本的,由于本人太菜就没做了。。。

一.环境准备

1.关闭防御措施

关闭地址随机化

 sudo sysctl -w kernel.randomize_va_space=0

将/bin/sh改为指向zsh

sudo ln -sf /bin/zsh /bin/sh

2.构建漏洞程序

以下程序有缓冲区溢出漏洞

创建以下程序retlib.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#ifndef BUF_SIZE
#define BUF_SIZE 12
#endif
int bof(char *str)
{
   
char buffer[BUF_SIZE];
unsigned int *framep;//栈帧指针
// 将栈帧指针拷贝到framep指针中
asm("movl %%ebp, %0" : "=r" (framep));
/* print out information for experiment purpose */
printf("Address of
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值