Как внедрить свой код в пространство процесса?
Это довольно утверждение/вопрос. Для этого требуется «эксплуатируемая» область кода в указанном пространстве процесса. Например, Windows в настоящее время переписывает большинство функций strcpy() в strncpy(), если это вообще возможно. Я говорю если возможно
потому что не все области кода, использующие strcpy, можно успешно заменить на strncpy. Почему? ПОТОМУ ЧТО ~@ этой сути в различии, показанном ниже;
strcpy($buffer, $copied);
or
strncpy($buffer, $copied, sizeof($copied));
Именно поэтому strncpy
так сложно реализовать в реальных сценариях. Для большинства операций strncpy
необходимо установить «магическое число» (оператор sizeof() создает это «магическое число»)
Как программистов, нас учат использовать жестко закодированные значения, такие как строгое соблюдение char buffer[1024];
- действительно плохая практика кодирования.
НО ~ для сравнения - использование buffer[]="";
или buffer[1024]="";
является сердцевиной эксплойта. ОДНАКО, если, например, мы изменим этот код на последний, мы получим еще один эксплойт, введенный в систему...
char * buffer;
char * copied;
strcpy(buffer, copied);//overflow this right here...
ИЛИ ЭТО:
int size = 1024;
char buffer[size];
char copied[size];
strncpy(buffer,copied, size);
Это предотвратит переполнение, но создаст доступную для использования область в ОЗУ из-за предсказуемого размера и структурирования в 1024 блока кода/данных.
Следовательно, оригинальный постер, ищущий, например, strcpy в адресном пространстве программы, сделает программу пригодной для эксплуатации, если strcpy присутствует.
Есть много причин, по которым программисты предпочитают strcpy strncpy
. Магические числа, переменный размер входных/выходных данных...стили программирования...и т.д...
КАК Я НАЙДУ СЕБЯ В МОЕМ КОДЕ (МОЕ МЕСТОПОЛОЖЕНИЕ)
Посмотрите различные хакерские книги, чтобы найти примеры этого ~
НО, попробуйте;
label:
pop eax
pop eax
call pointer
jmp label
pointer:
mov esp, eax
jmp $
Это пример, который не работает из-за того, что я НЕ хочу нести ответственность за написание следующего червя Морриса! Но любой порядочный программист поймет суть этого кода и сразу поймет, о чем я говорю.
Я надеюсь, что твои методы переполнения будут работать в будущем, сын мой!