Во-первых, вам нужна программа, которая будет запускать другие программы. Программа, которая выполняет ОС exec
в той или иной форме. Это сильно зависит от ОС и языка.
Во-вторых, ваша программа, которая запускает другие программы, должна читать из какого-либо внешнего источника в буфер.
В-третьих, вы должны затем проверить запущенную программу - как она была размещена компилятором в памяти - чтобы увидеть, как существует входной буфер и другие переменные, используемые для шага 1 (запуск других программ).
В-четвертых, вы должны создать вход, который фактически переполнит буфер и установить другие переменные.
Итак. Часть 1 и 2 - это программа, которая выглядит примерно так в C.
#include <someOSstuff>
char buffer[16];
char *program_to_run= "something.exe";
void main( char *args[] ) {
gets( buffer );
exec( program_to_run );
}
Часть 3 требует некоторого анализа того, как выглядят buffer
и program_to_run
, но вы обнаружите, что это, вероятно, просто
\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 s o m e t h i n g . e x e \x00
Часть 4, ваш ввод должен быть
1234567890123456notepad.exe\x00
Таким образом, он заполнит buffer
и запишет program_to_run
.