竞态漏洞实验
实验简介
竞态条件是指多个线程同时访问或者操作同一块数据,运行的结果依赖于不同线程访问数据的顺序。如果一个拥有root权限的程序存在竞态条件漏洞的话,攻击者可以通过运行一个平行线程与漏洞程序竞争,以此改变该程序的行为。
在本实验中学生将利用竞态条件漏洞获得root权限。除了攻击之外,学生还将学习如何制定保护方案抵御该类攻击。
实验准备
由于本实验环境开启了针对竞态条件攻击的保护,所以需要先关掉保护。
$ sudo su
$ echo 0 > /proc/sys/fs/protected_symlinks
$ exit
新建我们的工作目录:
$ cd ~
$ mkdir seed
实验过程
实验一: 利用竞态条件漏洞
新建vulp.c并输入一下代码
/* vulp.c */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define DELAY 10000
int main()
{
char * fn = "/tmp/XYZ";
char buffer[60];
FILE *fp;
long int i;
/* get user input */
scanf("%50s", buffer );
if(!access(fn, W_OK)){
for(i=0; i < DELAY; i++){
int a = i^2;