竞态条件漏洞实验

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

预备知识

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
账户密码:seed/dees

实验步骤一

一个看起来很正常的程序但是却存在竞态条件漏洞的程序,源码如下:

/*  vulp.c  */
#include <stdio.h>
#include <unistd.h>
int main()
{
    char * fn = "/tmp/XYZ";
    char buffer[60];
    FI
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值