预备知识
1.竞态条件(race condition),从多进程间通信的角度来讲,是指两个或多个进程对共享的数据进行读或写的操作时,最终的结果取决于这些进程的执行顺序。
2.在ubuntu的11.04或者12.04版本默认配置已经开启了对竞态条件漏洞的保护策略。这个保护策略严格限制了在什么情况下可以去跟踪操作一个符号链接指向的文件。帮助文档中对这个策略是这么描述的:“在所有人都可写的目录(比如说/tmp目录)中存在的符号链接,被链接的文件与目录与符号链接的创建者不同时,被链接的文件不可以被操作”。简单举例来帮助大家理解一下:在/tmp目录下有一个软连接/tmp/abc指向/etc/shadow,而这个软连接是test用户(uid为1000)的用户创建。那么,任何情况下都无法通过这个软连接来修改/etc/shadow文件。
如果实验在ubuntu12.04版本进行,则需要关掉这个防护功能。以下两种方法都可以关闭此配置。
1)$ sudo sysctl -w kernel.yama.protected_sticky_symlinks=0
2)$ sudo echo 0 > /proc/sys/fs/protected_symlinks
本次实验在ubuntu 16.04环境下进行,命令为:
$ sudo sysctl -w fs.protected_symlinks=0
实验目的
通过此次实验,可以熟悉竞态条件漏洞的产生原理、利用方式。除了攻击之外,还会学习到如何制定保护方案抵御竞态条件攻击。
实验环境
实验环境拓扑:

实验机:ubuntu 16.04
固定IP:10.1.1.182

本文通过实验详细介绍了竞态条件漏洞的概念、产生原因及利用方式,旨在帮助读者熟悉这种漏洞的原理。实验在ubuntu 16.04环境下进行,通过一个存在竞态条件的set-uid程序,展示了如何利用漏洞向属主为root的文件追加内容。最后,讨论了三种防御竞态条件漏洞的方法:重复检查权限、最小权限原则和Ubuntu内置的保护方案。
最低0.47元/天 解锁文章
909

被折叠的 条评论
为什么被折叠?



