首页 > 试题广场 >

阅读如下代码,其中main函数参数可以被攻击者控制,那么ma

[问答题]

阅读如下代码,其中main函数参数可以被攻击者控制,那么main函数中存在哪些漏洞,指出漏洞具体位置及问题,并说明这些代码中漏洞的修复方法

//读取指定的文件中的内容并返回该文件base64编码后的内容,函数失败则返回NULL,在非NULL情况下需要调用该函数后手动释放内存,该函数中不存在安全性问题

char *readBase64File(char *fileName);

int main(int argc, char* argv[])

{

    char filePath[260];

    char fileCmd[512];

    char *fileName;

    int dirIdx;

    char *fileContent;

    char *dirPaths[4];

dirPaths[0] = /home/data1/;

dirPaths[1] = /home/data2/;

dirPaths[2] = /home/data3/;

dirPaths[3] = /home/data4/;

    fileName = argv[1];

    dirIdx = atoi(argv[2]);

    if (dirIdx > 3)

{

    printf(file index error!\n);

        return -1;

    }

    strcpy(filePath, dirPaths[dirIdx]);

    if (strlen(filePath) + strlen(fileName) < 260)

        strcat(filePath, fileName);

    else

        return -1;

    fileContent = readBase64File(filePath);

    if (fileContent == NULL)

    {

        printf(read filecontent error!\n);

    }

    else

    {

        printf(file content is: %s\n, fileContent);

        free(fileContents);

    }

    strcpy(fileCmd, rm );

    strcat(fileCmd, fileName);

    printf(fileCmd);

    system(fileCmd);

    return 0;

}

格式化字符串缓冲区溢出
发表于 2021-05-15 19:46:06 回复(0)
1. 参数1使用../可穿越目录,进而读取、删除任意文件。设置basedir,禁止访问上层目录。
2. system函数未进行过滤,参数1使用||,&&可执行任意命令。如文件较少,对文件名进行白名单限制,仅允许输入文件中存在文件名。如文件多,还是只有用黑名单过滤掉命令执行所用到的截断符号,和敏感的关键字。
发表于 2021-03-08 17:17:17 回复(0)
1.命令行第二个参数 写负数,直接导致越界
2.命令行第一个参数 写../ 可读取任意目录
3.命令行第一个参数 写&& || ; 导致任意命令执行
4.printf函数参数被用户完全掌握,可导致任意内存写入/读取,getshell
发表于 2020-08-20 01:49:30 回复(4)
system(fileCmd);处存在命令执行漏洞及任意文件删除问题,需要进行命令执行过滤
发表于 2020-10-12 15:16:57 回复(0)