我有一个易受攻击的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;
}
答案 0 :(得分:0)
如果您想将非ascii字节放入您的文件,请尝试使用fprint(*p, "\x90...")
,或者使用SET @columnPeriod = 'SELECT Period FROM Courses WHERE year = ' + CONVERT(VARCHAR(12),@test) + ' Limit 1';