Вызывать шеллкод без использования указателя на функцию? - PullRequest
0 голосов
/ 24 июня 2019

Есть ли способ получить возвращаемое значение функции, которая находится в шелл-коде, без использования указателя на функцию?

#include <stdio.h>   
unsigned char code[] = "\x55\x48\x89\xe5"
                       "\xb8\x05\x00\x00"
                       "\x00\x5d\xc3";     

int main(void) { 

    int (*p)(void) = (int(*)(void))code;
    printf("%d", p());
    return 0;
}

1 Ответ

1 голос
/ 24 июня 2019

Shellcode (см. статья в Википедии Shellcode , а также эта презентация Введение в разработку Shellcode ) - это машинный код, который вводится в приложение, чтобы захватить приложение и запустить его. собственное приложение в процессе этого приложения.

То, как шелл-код вводится в приложение и запускается, зависит от способа проникновения.

Однако для тестирования подходов к реальному шелл-коду, в отличие от подходов для инъекции шелл-кода в первую очередь, тестирование обычно проводится с помощью простой программы, которая позволяет (1) создать программу шелл-кода, которая должна быть введена как массив байтов и (2) запустить выполнение шеллкода.

Самым простым подходом для этого является опубликованный вами исходный код.

У вас есть массив беззнаковых символов, содержащий машинный код, который нужно выполнить.

У вас есть main(), который создает указатель функции на массив байтов без знака и затем вызывает шелл-код через указатель функции.

Однако в реальных условиях проникновения обычно вы используете метод, при котором вы захватываете приложение, внедряя свой шелл-код в его пространство процесса и затем инициируя выполнение этого шелл-кода. Одним из таких подходов является атака переполнения буфера. См., Например, COEN 152 Атака переполнения буфера при компьютерной экспертизе , а также статья в Википедии Переполнение буфера .

Смотри также

Также обратите внимание, что подходы для атак с использованием шелл-кода будут различаться в зависимости от операционной системы, которая подвергается атаке. Например, см. Эту статью Основы написания шелл-кода Windows , в которой объясняются некоторые тонкости написания шелл-кода для доступа к системным вызовам в Windows. Сравните с этой статьей, в которой описан Как написать шеллкод Linux x86 .

...