ПредишенСледващото

ИН - истинската тенденция на последен път. Почти навсякъде, тя използва ядрото на Линукс. Въпреки това, статии по авторите на вируси и черупка кодиране за тази платформа е относително малък. Мислиш ли, че, пишете shellcode за Linux - само за елита? Нека да разбера как да се напише вирус за Linux!

Virus за Linux

BASE да напише вирус за LINUX

Какво ви е необходимо?

За съставянето на shellcode, ние се нуждаем от компилатора и свръзката. Ние ще използваме NASM и LD. За да тествате shellcode, ние ще напиша една малка програма, в северната част на съставянето му имаме нужда от ССЗ. Той ще трябва rasm2 (част от рамка radare2) за някои тестове. За писане, ние ще използваме функциите на Python за подпомагане.

Какво е новото в x64?

По-конкретно, всички регистри с общо предназначение 32-битовите се запазват, допълни с разширените версии (Ракс, RBX, RCX, RDX, RSI, РДВР, RBP, RSP) и няколко нови регистри с общо предназначение (R8, R9, R10, R11 , R12, R13, R14, R15).

Налице е нова конвенция призвание (за разлика от архитектурата x86, той е само един). Според него, функцията наричаме всеки регистър се използва за определени цели, а именно:

Syscall. Какво? Как? Защо?

Syscall - това е начинът, по който потребителския режим взаимодейства с в ядрото на Линукс. Той се използва за различни задачи: операция IO, да четат и пишат на файлове, отваряне и затваряне на програми, работна памет, както и мрежа и така нататък. За да се изпълни syscall. трябва да:

• изтеглите подходящата функция номер в регистъра Ракс;
• Заредете входни параметри в други регистри;
• предизвика прекъсване 0x80 под номер (от версия 2.6 на ядрото се извършва, като се обадите syscall).

Стаи за съответните syscall-функции могат да бъдат намерени, например, тук.

Както се вижда, натиснете 0x00 код, съставен от следните байтове 6а 00. Ако се използва този код нашия код черупка няма да проработи. Функция за копиране на всичко, което е на байт със стойност 0x00.

Това изглежда е всичко.

Просто го направи!

Ако сте чели до този момент, вече трябва да имат представа за това как тя ще работи нашата shellcode.

Първата стъпка е да се подготви опции за функцията execve (), а след това правилно ги позиция в стека. Функцията ще бъде, както следва:


Вторият параметър е масив argv []. Първият елемент на масива съдържа пътя до изпълним файл.

Третият параметър е информацията за околната среда, той не се нуждае от нас, така че ще бъде нула.

Първо, ние се получи нула байт. Ние не може да използва структурата на EAX формуляра MOV, 0x00, тъй като това ще доведе до нулев байт код, така че ние ще използваме следното изявление:

Оставете стойността в регистър RDX - тя все още се изисква като символен низ и крайната стойност на третият параметър (която ще бъде нула).

За да се превърне един низ и да го превърнат в шестнадесетичен. Можете да използвате следната функция за Python:


Обадете се на тази функция, за да /bin/sh:>>>rev.rev_str("/bin/sh ")

Свързани статии

Подкрепете проекта - споделете линка, благодаря!