[SEEDLab]竞争条件漏洞(Race Condition Vulnerability)
Introduction
我们首先考虑这样的一个情景,我们有一个名为test的文件,它具有这样的权限:
-rwsr-xr-x 1 root seed 40 Jun 9 22:45 test
作为seed用户,我们无法对于此文件进行写入:
但是,假设我们的系统中存在一个程序setuid_modifi.c
:
#include<stdio.h>
#include<unistd.h>
int main(){
char * fn = "test";
char buffer[60];
FILE *fp;
scanf("%50s", buffer );
if(fp = fopen(fn, "a+") == NULL){
printf("Error!");
}
else{
fwrite("\n", sizeof(char), 1, fp);
fwrite(buffer, sizeof(char), strlen(buffer), fp);
fclose(fp);
}
}
由它编译生成的可执行文件,然后执行sudo chown root setuid_modifi
和sudo chmod 4755 setuid_modifi
,此时得到的程序可以被seed用户执行,并且修改test
文件之中的内容。为了避免这种情况,我们可以使用位于标准库unistd.h
中的函数access()
int access(const char* pathname, int mode)
//判断路径为pathname的文件能否以mode的权限打开
//成功返回1,否则返回0
我们可以这样改写我们的程序:
//...
if(!access