博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)
阅读量:4639 次
发布时间:2019-06-09

本文共 1298 字,大约阅读时间需要 4 分钟。

Off-By-One 漏洞 (基于栈)

原文地址:

什么是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文件

1 #exp.py 2 #!/usr/bin/env python 3 import struct 4 from subprocess import call 5  6 #Spawn a shell.  7 #execve(/bin/sh) Size- 28 bytes. 8 scode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\$ 9 10 ret_addr = 0xbffff42611 12 #endianess conversion13 def conv(num):14  return struct.pack("

 

Off-By-One 漏洞 (基于栈)

虚拟机安装:Ubuntu 12.04(x86)

什么是off by one?

将源字符串复制到目标缓冲区可能会导致off by one

1、源字符串长度等于目标缓冲区长度。

当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上方。这里由于目标缓冲区位于堆栈中,所以单个NULL字节可以覆盖存储在堆栈中的调用者的EBP的最低有效位(LSB),这可能导致任意的代码执行。

一如既往的充分的定义,让我们来看看off by one的漏洞代码!

漏洞代码:

转载于:https://www.cnblogs.com/jourluohua/p/8994209.html

你可能感兴趣的文章
shell脚本练习01
查看>>
WPF图标拾取器
查看>>
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>
mechanize (1)
查看>>
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>