缓冲区溢出有效负载通过文本文件

时间:2016-05-23 00:09:00

标签: c buffer-overflow

我有一个易受攻击的C程序,它将文本文件从一个文件夹复制到另一个文件夹。 如果我们将文本增加到超过2048个字符,我们会得到一个缓冲区溢出。

现在,我想通过包含NOP+shell+RET ADD

的文本文件插入我的有效负载

但是,当它读取文件时,它认为文本是ASCII格式并将单个字符存储在内存中。

如何通过此文本插入有效负载?

int copy_file(const char* src_name, const char* dst_name){
    char buf[2048], *p1, *p2;
    FILE *src_file, *dst_file;
    int c;
    if (link(src_name, dst_name) == 0) {
            unlink(src_name);
            return 0;
    } else {
            src_file = fopen(src_name, "r");
            if (src_file == NULL) {
                    fprintf(stderr, "Failed to open source file: %s\n",
                            src_name);
                    return 1;
            }
            p1 = buf;
            while ((c = fgetc(src_file)) != EOF) {
                   *p1 = c;
                    p1++;
            }

            fclose(src_file);

            dst_file = fopen(dst_name, "w");
            if (dst_file == NULL) {
                    fprintf(stderr, "Failed to open destination file: %s\n",
                            dst_name);
                    return 1;
            }
            p2 = buf;
            while (p2 != p1) {
                    fputc(*p2, dst_file);
                    p2++;
            }

            fclose(dst_file);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果您想将非ascii字节放入您的文件,请尝试使用fprint(*p, "\x90..."),或者使用SET @columnPeriod = 'SELECT Period FROM Courses WHERE year = ' + CONVERT(VARCHAR(12),@test) + ' Limit 1';

之类的内容