栈溢出

缓冲区溢出

缓冲区溢出简介

​ 计算机程序的运行依赖于函数调用栈。栈溢出是指在栈内写入超出长度限制的数据,从而破坏程序运行甚至获得系统控制权的攻击手段。

​ 实现缓冲区溢出,要满足两个条件:

  1. 第一,程序要有向栈内写入数据的行为,并且写入长度要大于目标存储长度;
  2. 第二,程序并不限制写入数据的长度

​ 历史上第一例被广泛注意的**“莫里斯蠕虫”病毒**就是利用C语言标准库的 gets() 函数并未限制输入数据长度的漏洞,从而实现了栈溢出。

​ 缓冲区溢出两种类型:

  1. 基于栈的缓冲区溢出——目标存储在栈中
  2. 基础堆的缓冲区溢出——目标存储在堆中

​ 缓冲区溢出导致任意代码执行——通过返回地址覆盖技术。任意代码执行导致,在目标主机上进行一些非法获权操作——生成一个root shell,打开一个新端口或者创建一个新用户。

栈溢出

​ 实现栈溢出,要满足两个条件。第一,程序要有向栈内写入数据的行为;第二,程序并不限制写入数据的长度。历史上第一例被广泛注意的“莫里斯蠕虫”病毒就是利用C语言标准库的 gets() 函数并未限制输入数据长度的漏洞,从而实现了栈溢出。

背景知识

函数调用栈
  1. 定义:程序运行时内存一段连续的区域
  2. 作用:用来保存函数运行时的状态信息
  3. 包括:函数参数与局部变量
  4. 称之为“栈”是因为:发生函数调用时,调用函数(caller)的状态被保存在栈内,被调用函数(callee)的状态被压入调用栈的栈顶;在函数调用结束时,栈顶的函数(callee)状态被弹出,栈顶恢复到调用函数(caller)的状态。函数调用栈在内存中从高地址向低地址生长,所以栈顶对应的内存地址在压栈时变小,退栈时变大。
寄存器

在这里插入图片描述

分为通用寄存器特殊寄存器

  1. 通用寄存器:
    1. 一般寄存器e*x(a, b, c, d)
    2. 引索寄存器e*i(s, d)
  2. 特殊寄存器:可以使用MRSMSR特殊寄存器访问指令来访问特殊寄存器
    1. MRS:读特殊寄存器
    2. MSR:写特殊寄存器

工具准备

1. 第一步pwntools的安装

检查kali版本

查看linux机器是32位还是64位的方法:

 file /sbin/init 或者 file /bin/ls
 /sbin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

如果显示 64-bit 则为64位;

 file /sbin/init
 /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped

如果显示为32 bit 则为32bit;

查看了一下,发现我的kali是64位的

file /bin/ls

在这里插入图片描述
不同版本的ubuntu可以应对不同的glibc调试

开始安装pwntools

安装的命令很简单

pip install pwntools

在这里插入图片描述

关于什么是pwntools ,官方文档中是这样说的: pwntools是一个CTF框架和漏洞利用开发库。它以Python编写,专为快速原型设计和开发而设计,旨在使漏洞利用编写尽可能简单。

当然也可以这样:
在中端输入下面的内容

git clone https://github.com/Gallopsled/pwntools
cd pwntools
python setup.py install

打开一个python的小窗口导入一下pwn试试看

python
from pwn import *
asm("xor eax,eax")

如果输出结果如下就说明安装成功:

'1\xc0'

在这里插入图片描述

2.安装Capstone

当然也是差不多的样子

git clone https://github.com/aquynh/capstone
cd capstone
make
make install
1234

在这里插入图片描述

3.安装peda

gdb-peda:gdb方便调试的工具,类似的工具有gef,gdbinit。
安装也很简单

 git clone https://github.com/longld/peda.git ~/peda
 echo "source ~/peda/peda.py" >> ~/.gdbinit

装完就可以方便的调试了:
在这里插入图片描述

常用命令

file 文件名

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值