dyroj
Messages postés123Date d'inscriptionvendredi 14 novembre 2008StatutMembreDernière intervention18 juin 2012
-
25 mars 2009 à 15:50
dyroj
Messages postés123Date d'inscriptionvendredi 14 novembre 2008StatutMembreDernière intervention18 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;
}
dyroj
Messages postés123Date d'inscriptionvendredi 14 novembre 2008StatutMembreDernière intervention18 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'
++
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.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 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.