systemadmin.es > Redes > Ofuscación de puertos mediante overflow de shorts

Ofuscación de puertos mediante overflow de shorts

En una configuración de memcached en PHP aprecié que el puerto estaba configurado al 11211211, lo cual no es posible porque los puertos TCP son de 16 bits, por lo resultaba extraño que funcionase.

Los puertos TCP al ser de 16 bits van del 0 al 65535, pero aún así funcionaba correctamente. El servicio estaba levantado en el puerto 4555, si lo pasamos a binario lo podemos apreciar:

101010110001000111001011: 11211211
           1000111001011: 4555

Aunque el valor haga overflow en los 16 bits del puerto, mientras el servicio este levantado no hay problema. Es una forma curiosa de ofuscar el código, que permite varios valores para el mismo resultado, por ejemplo:

101010110011000111001011: 11219403
101010110101000111001011: 11227595
(...)

Serían también válidos para el puerto 4555. Para calcular los valores válidos lo podemos hacer mediante un cast a un unsigned short:

#include <stdio.h>

int main(void)
{
        int a=11211211;

        printf("int: %d, short %d\n",
                                     (int)a,
                                     (unsigned short)a);

        return 0;
}

El resultado de su ejecución sería:

int: 11211211, short 4555

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>