Shellcode (см. статья в Википедии Shellcode , а также эта презентация Введение в разработку Shellcode ) - это машинный код, который вводится в приложение, чтобы захватить приложение и запустить его. собственное приложение в процессе этого приложения.
То, как шелл-код вводится в приложение и запускается, зависит от способа проникновения.
Однако для тестирования подходов к реальному шелл-коду, в отличие от подходов для инъекции шелл-кода в первую очередь, тестирование обычно проводится с помощью простой программы, которая позволяет (1) создать программу шелл-кода, которая должна быть введена как массив байтов и (2) запустить выполнение шеллкода.
Самым простым подходом для этого является опубликованный вами исходный код.
У вас есть массив беззнаковых символов, содержащий машинный код, который нужно выполнить.
У вас есть main()
, который создает указатель функции на массив байтов без знака и затем вызывает шелл-код через указатель функции.
Однако в реальных условиях проникновения обычно вы используете метод, при котором вы захватываете приложение, внедряя свой шелл-код в его пространство процесса и затем инициируя выполнение этого шелл-кода. Одним из таких подходов является атака переполнения буфера. См., Например, COEN 152 Атака переполнения буфера при компьютерной экспертизе , а также статья в Википедии Переполнение буфера .
Смотри также
Также обратите внимание, что подходы для атак с использованием шелл-кода будут различаться в зависимости от операционной системы, которая подвергается атаке. Например, см. Эту статью Основы написания шелл-кода Windows , в которой объясняются некоторые тонкости написания шелл-кода для доступа к системным вызовам в Windows. Сравните с этой статьей, в которой описан Как написать шеллкод Linux x86 .