EnzoFerber
(usa FreeBSD)
Enviado em 14/07/2006 - 10:50h
Cara... Tipo assim, o comando vai executar o '/bin/sh' e o windows não tem esse arquivo, segundo: o programa chama a interrupção 0xb (11 - execve) e chama o kernel pela interrupção 0x80 ( o windows não tem essa interrupção)
Explicação do codigo:
xor %edx, %edx
push %edx
push $0x68732f6e
push $0x69622f2f
mov %esp, %ebx
push %edx
push %ebx
mov %esp, %ecx
mov $0x0, %edx
mov $0xb, %eax
int $0x80
-xor %edx, %edx = limpa o registrador edx
-push %edx = colocar NULO na pilha (o valor de edx agora é nulo já que foi 'resetado' com xor
-push $0x68732f6e
-push $0x69622f2f
Os dois acima poem /bin//sh na pilha
-mov %esp, %ebx
coloca o endereço da pilha(que contem '/bin/sh') em ebx
-push %edx
-push %ebx
Isso coloca na pilha (/bin/sh)
-mov %esp, %ecx
Coloca o que tem na pilha em ecx
-mov $0x0, %edx
Coloca 0x0 em edx (ultimo parametro de execve())
-mov $0xb, %eax
Coloca o numero da interrupção em eax
-int $0x80
'chama' o kernel para executar 0xb(execve)
Para mais informações sobre execve() digite:
$ man execve
Espero ter ajudado,
Slackware_10