Я изучаю эксплойты переполнения буфера. Как обычно для начинающих, я работаю от очень простой программы на языке C, которая использует небезопасную, не проверяющую функцию, такую как gets (), для заполнения объявленного буфера фиксированной длины строковым аргументом командной строки, хранящимся в argv [ ]. Для контекста, программа выглядит следующим образом:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char buffer[512];
if (argc < 2)
{
printf("Please feed the buffer :D");
exit(0);
}
strcpy(buffer, argv[1]);
printf("delicious input: %s, buffer);
return 0;
}
Как видите, ввод аргумента, который переполняет этот буфер, вручную создает неудобства, поэтому я хочу автоматизировать процесс, используя встроенные функции командной строки. В частности, я хочу создать строку, состоящую из символа ASCII, повторенного 'n' раз, и передать ее в качестве аргумента программе. К сожалению, я довольно неграмотен с командной строкой Linux (я работаю над этим). Я читал об этом решении:
user@virtualenv:~$ printf 'somestring%.0s' {1..520}
Однако результирующая строка не сохраняется в argv [1] (printf is). В Python это будет так просто:
'somestring'*2
Возможно ли, используя встроенную функциональность терминала Linux, выдавать команды, создающие строку? Как это можно сделать, чтобы эти команды не передавались в качестве аргументов командной строки - в argv [] сохраняется только полученный строковый продукт?