domingo, 25 de octubre de 2009

[Tutorial]DDOS: ACK Flood

[Tranqui, tranqui, que aún estoy vivo... y el tuto seguirá, a su ritmo , pero seguirá]


[Tutorial]DDOS: ACK Flood
---
Preview on Sui90 ...
TCP Header

---

Continuing...


Este ataque consiste en enviar paquetes erroneos para que cuando la víctima lo reciba, al analizarlo devuelva al atacante paquetes con el flag RST, indicandole que ha habido un error y pide al atacante el reenvio del paquete.
ejm. peticion de servicio a un puerto cerrado, SN erróneo...

Este ataque lo podría realizar después de la 3-way handshake, una vez que la conexión TCP esté establecida ó no.
ó tambien, lo más usual, ya que este ejecuandolo en solitario no hace mucho daño, juntarla con el ataque ACK. Que quedaría tal modo que la víctima además de tener la lista de conexión aprieto de half-opened, esté también contestando a toda esa conexiones helf-opened.




Ejemplo práctico:

Tools (Linux)
-hping3


En esta práctica vamos realizar DOS enviando Flag ACK solo y sin compañía. [como debería ser... Xd]
Envíando Flag ACk's sin tener previamente la conexión establecida, por lo que el server le devolverá errores.
[En esta Ip-spoofing no es válido ,tiene que tener una IP exitente y válido para que el server le responda]

# hping3 192.168.56.10 -A -p 80 --flood

hping3: elegí esta versión porque tiene la opcion de flood
192.168.56.10 : IP del server
-A : asignar el Flag ACK
-p 80: puerto 80
--flood: enviar los paquetes lo más rapido posible.

Con estos, realizandolo en mi pequeña red, conseguí un pequeño delay en las repuestas por parte del servidor web.
De encuenta que el ataque lo realizé con un solo atacante, entonces, si lo realizaramos a gran escala, DDOS, con X máquinas zombis en nuestros manos... ¿qué pasará? [XD]


De testing

Una captura del wireshark.




Saludos, Good Luck!!
Read more »

Lee, piensa, reflexiona, aplica. V

Aunque haya despertado con cierta tristesa, me alegro que haya puesto un punto final a cierto asunto [que no vuelva, que no vuelva...], y me he dado cuenta que nunca he posteado sobre mi frase favorita "be water", allá vamos, a llenar de esto de "basuras". :D.

Be water...
"Empty your mind.
Be formless. Shapeless, like water.
you put water into a cup ,it will becomes the cup,
you put water into a bottle ,it will becomes the bottle ,
you put water into a teaport,it will becomes the teaport,
Now, water can flow, or it can crash.

Be water my friend."


-ser adaptable a cualquier situación.
-ser dominante (del situación y de tí mismo): seguir si lo deseas o sino, terminarla


El agua es tan bueno que puede salvar vidas.
El agua es tan malo que puede hundir islas.

Dependiendo del situación y del deseo ,tú decides.

so, be water, my friend.

[I'm not water yet..] ¬_¬ .


Saludos, Good Luck !!
Read more »

sábado, 24 de octubre de 2009

the last word

"Vale... nunca más"
never mind....
Read more »

martes, 20 de octubre de 2009

Hoy, otra vez, como algunas de las veces, me siendo como el tio más tonto del mundo, me enfado conmigo mismo de lo tonto que soy. La imposiblidad de realizar algo bien tan sencillo que los otros lo realizan con un respiro me tiene loco.
Aunque digan que no hay nada que se debe arrependir en la vida, me arrepiendo, arrepiendo de no haber estudiado,empollado en su tiempo.

Por cierto, este es MI blog, si a alguien no le gusta sus contenidos, que se joda (no estan obligado a el), no tengo que estar publicando algo que os guste, sino lo que a mí me gusta y lo que yo quiero.
Read more »

viernes, 16 de octubre de 2009

Release!! serpiente.c (Snake)

Hace tiempo "publiqué" un juengo de serpiente con ncurses y hoy quiero revelar su código fuente !!!
El motivo es simple: Apoyo al OpenSource. (No al sofware privado) [Y yo con Windows,XD]

El código fuente viene comentado pero no muy detallado, XD. [Ahora lo leo de nuevo y ciertamente me mareo, me sorprendo a mí mismo, si ahora me mandara hacerlo de nuevo, tendría que dejarme una cuantas hora para idearmelo todo de nuevo,XD, es muy difícil de leerlo].

Aqui os dejo un copy+paste del codigo. (Espero que no haya incompatiblidad y que blogger no me coma ningún caracter...)

Aclaración: La función kbhit es copiado de otra persona
y las librerias de los includes estan separado con espacio, porque sino blogger lo omite.
===== Serpiente.c =====

/*********************************************************
*Fichero: serpiente.c
*Fecha: 15-05-2009
*Autor: Sui Zhao
*Contacto: sui1990(at)gmail(dot)com
*
*Descripcion:
* El tipico juego de serpiente
*
*gcc -lncurses -o serpiente serpiente.c
*
*Ultima actuacion:
************************************************************/

#include - stdio.h>
#include - ncurses.h>
#include - stdlib.h>

//* libreria y funcion para kbhit
#include - termios.h>
#include - unistd.h>
#include - sys/types.h>
#include - sys/time.h>
void changemode(int);
int kbhit(void);

//-------------------

//Funciones


void inicio();

/* ordenes() -> tiene como fin de anhadir
*los movimiento en que debe mover
*/
void ordenes(int y, int x, int longitud, int direccion);

// mover() -> todos los movimieto
void mover();

// Funcion dentro de mover
void ordena_posi_ejecutar(int aux);

//al dar una tecla
void dar_tecla();

//Funcion para aparecer la comida
void comida();

// game over
void fin_juego();

void bienvenida();
//Variables Globales
int y,x;
int longitud;
int el_ultimo;
int comida_y;
int comida_x;
int cantidad_comida=0;


struct POSICION
{
struct EJECUTA
{
int y;
int x;
int direccion;
}ejecuta[50];
}posicion[50];


//----prueba---



//------------

/*
* Direcciones:
* arriba = 1 = w = 119
* abajo = 2 = s = 115
* izq. = 3 = a = 97
* derch. = 4 = d = 100
*
*
* y, x = Posicion de la cabeza del serpiente
*/

main()
{
initscr();
bienvenida();

inicio();

mover();

getch();
endwin();
}


void inicio()
{
y=10;
x=25;
longitud=5;


posicion[1].ejecuta[1].y = 10;
posicion[1].ejecuta[1].x = 25;
posicion[1].ejecuta[1].direccion = 2;

posicion[2].ejecuta[1].y = 9;
posicion[2].ejecuta[1].x = 25;
posicion[2].ejecuta[1].direccion = 2;

posicion[3].ejecuta[1].y = 8;
posicion[3].ejecuta[1].x = 25;
posicion[3].ejecuta[1].direccion = 2;

posicion[4].ejecuta[1].y = 7;
posicion[4].ejecuta[1].x = 25;
posicion[4].ejecuta[1].direccion = 2;

posicion[5].ejecuta[1].y = 6;
posicion[5].ejecuta[1].x = 25;
posicion[5].ejecuta[1].direccion = 2;

comida();

}


void ordenes(int y, int x, int longitud, int direccion)
{
int aux;

for (aux=1;aux<=longitud;aux++)
{
el_ultimo=1;
while (posicion[aux].ejecuta[el_ultimo].direccion != 0)
{
el_ultimo++;
}
posicion[aux].ejecuta[el_ultimo].y = y;
posicion[aux].ejecuta[el_ultimo].x = x;
posicion[aux].ejecuta[el_ultimo].direccion = direccion;

}
}


void mover()
{
int aux;
int tiempo=1;
int aux_comida_y;
int aux_comida_x;
while (tiempo<=60000)
{
erase();

// iniciar la comida
move(comida_y,comida_x);
printw("*");
refresh();
// una vez que sea comido, generar mas comida
if (posicion[1].ejecuta[1].y == comida_y && posicion[1].ejecuta[1].x == comida_x)
{
aux_comida_y = comida_y;
aux_comida_x = comida_x;
comida();
++cantidad_comida;
}

// si toca algun tecla
if (kbhit())
{
dar_tecla();
}

for(aux=1; aux<=longitud;aux++)
{
ordena_posi_ejecutar(aux);
}


//dibujar los movimientos
for(aux=1; aux<=longitud;aux++)
{
switch(posicion[aux].ejecuta[1].direccion)
{//case 1,2,3,4
case 1:

posicion[aux].ejecuta[1].y = posicion[aux].ejecuta[1].y - 1;
move(posicion[aux].ejecuta[1].y,posicion[aux].ejecuta[1].x);
printw("o");
refresh();
break;

case 2:
posicion[aux].ejecuta[1].y = posicion[aux].ejecuta[1].y + 1;
move(posicion[aux].ejecuta[1].y,posicion[aux].ejecuta[1].x);
printw("o");
refresh();
break;

case 3:
posicion[aux].ejecuta[1].x = posicion[aux].ejecuta[1].x - 1;
move(posicion[aux].ejecuta[1].y,posicion[aux].ejecuta[1].x);
printw("o");
refresh();
break;

case 4:
posicion[aux].ejecuta[1].x = posicion[aux].ejecuta[1].x + 1;
move(posicion[aux].ejecuta[1].y,posicion[aux].ejecuta[1].x);
printw("o");
refresh();
break;
}
}

if (posicion[longitud].ejecuta[1].y == aux_comida_y &&
posicion[longitud].ejecuta[1].x == aux_comida_x)
{
++longitud;

//pasar todas las ordenes que tenga al ultimo
int aux_el_ultimo;
for(aux_el_ultimo=1;aux_el_ultimo<=el_ultimo;aux_el_ultimo++)
{
posicion[longitud].ejecuta[aux_el_ultimo].direccion =
posicion[longitud - 1].ejecuta[aux_el_ultimo].direccion;
posicion[longitud].ejecuta[aux_el_ultimo].y =
posicion[longitud - 1].ejecuta[aux_el_ultimo].y;
posicion[longitud].ejecuta[aux_el_ultimo].x =
posicion[longitud - 1].ejecuta[aux_el_ultimo].x;
}


switch(posicion[longitud - 1].ejecuta[1].direccion)
{
//case 1,2,3,4
case 1:
//posicion[longitud].ejecuta[1].y = posicion[longitud - 1].ejecuta[1].y + 1;
posicion[longitud].ejecuta[1].y = posicion[longitud - 1].ejecuta[1].y + 1;
posicion[longitud].ejecuta[1].x = posicion[longitud - 1].ejecuta[1].x;

break;

case 2:
posicion[longitud].ejecuta[1].y = posicion[longitud - 1].ejecuta[1].y - 1;
posicion[longitud].ejecuta[1].x = posicion[longitud - 1].ejecuta[1].x;
break;

case 3:
posicion[longitud].ejecuta[1].y = posicion[longitud - 1].ejecuta[1].y;
posicion[longitud].ejecuta[1].x = posicion[longitud - 1].ejecuta[1].x + 1;
break;

case 4:
posicion[longitud].ejecuta[1].y = posicion[longitud - 1].ejecuta[1].y;
posicion[longitud].ejecuta[1].x = posicion[longitud - 1].ejecuta[1].x - 1;
break;
}

aux_comida_y = comida_y;
aux_comida_x = comida_x;


}




// linea de separacion
int aux_linea;
for(aux_linea=0;aux_linea<=23;aux_linea++)
{
move(aux_linea,51);
printw("|");
}

move(2,53);
printw("Comistes: %i",cantidad_comida);



refresh();
usleep(250000);
tiempo++;

//-- si esta fura de rango
if (posicion[1].ejecuta[1].y <> 23 ||
posicion[1].ejecuta[1].x <> 50)
{
fin_juego();
}

//si toca propio cuerpo
for(aux=3;aux<=longitud;aux++)
{
if (posicion[1].ejecuta[1].y == posicion[aux].ejecuta[1].y &&
posicion[1].ejecuta[1].x == posicion[aux].ejecuta[1].x)
{
fin_juego();
}
}

}


}


void ordena_posi_ejecutar(int aux)
{
// posicion[aux].ejecutar[0] -> tmp, swap
int n_cambio;
int ejecutable = 0;
int aux_ejecutable =1;
// ver ordenes ya que ya dispone detro de cada

while(posicion[aux].ejecuta[aux_ejecutable].direccion != 0)
{
++ejecutable;
++aux_ejecutable;
}


//cuando solo tiene una orden, recta
if (ejecutable ==1)
{
//no hace nada
}else
{



if(posicion[aux].ejecuta[1].y == posicion[aux].ejecuta[2].y &&
posicion[aux].ejecuta[1].x == posicion[aux].ejecuta[2].x)
{


for (n_cambio=1;n_cambio<=ejecutable;n_cambio++)
{
posicion[aux].ejecuta[n_cambio - 1].direccion =
posicion[aux].ejecuta[n_cambio].direccion;
posicion[aux].ejecuta[n_cambio - 1].y = posicion[aux].ejecuta[n_cambio].y;
posicion[aux].ejecuta[n_cambio - 1].x = posicion[aux].ejecuta[n_cambio].x;
}
posicion[aux].ejecuta[ejecutable].direccion = 0;


}
}


}



void dar_tecla()
{
int tecla;
tecla = getchar();
/*--------
move(10,52);
printw("%i",tecla);
refresh();
getch();
//--------- */
switch(tecla)
{
//arriba
case 119:
if(posicion[1].ejecuta[1].direccion != 2)
ordenes(posicion[1].ejecuta[1].y , posicion[1].ejecuta[1].x, longitud, 1);
break;

// abajo
case 115:
if(posicion[1].ejecuta[1].direccion != 1)
ordenes(posicion[1].ejecuta[1].y , posicion[1].ejecuta[1].x, longitud, 2);
break;

//izquierda
case 97:
if(posicion[1].ejecuta[1].direccion != 4)
ordenes(posicion[1].ejecuta[1].y, posicion[1].ejecuta[1].x, longitud, 3);
break;

//derecha
case 100:
if(posicion[1].ejecuta[1].direccion != 3)
ordenes(posicion[1].ejecuta[1].y, posicion[1].ejecuta[1].x, longitud, 4);
break;
}



}


void comida()
{

// MAX = 24 * 80 , pero usar 24 * 50
// comida y , x son aleatorio
do{
srand(time(NULL));
comida_y = rand()% 25;

srand(time(NULL));
comida_x = rand() % 51;
}while (comida_y == 0 && comida_x ==0);
move(comida_y, comida_x);
printw("*");
refresh();

}


void fin_juego()
{
move(9,52);
printw("============================");
move(10,52);
printw(" G A M E O V E R ");
move(11,52);
printw("============================");
move(13,52);
printw("Pulse una tecla para salir");
refresh();
getch();
endwin();
exit(0);
}


void bienvenida()
{

move(1,0);
printw("················································");
move(2,0);
printw("··············································");
move(3,0);
printw("············@@@@@@@@@@@·················");
move(4,0);
printw("··········@@@@@@@@@@@@@@@···············");
move(5,0);
printw("·········@@@········@@@@@@····················");
move(6,0);
printw("·······@@@@············@@@@···················");
move(7,0);
printw("······@@@@··············@@@@··················");
move(8,0);
printw("······@@@@··············@@@@··················");
move(9,0);
printw("·····@@@@·······@@······@@@@··················");
move(10,0);
printw("·····@@@@······@@@·····@@@@···················");
move(11,0);
printw("·····@@@@·······@@@@@@@@@@····················");
move(12,0);
printw("·····@@@@·········@@@@@@·························");
move(13,0);
printw("······@@@@····································");
move(14,0);
printw("······@@@@··················//················");
move(15,0);
printw("·······@@@@················//··········{}····");
move(16,0);
printw("·········@@@···············\\\\·················");
move(17,0);
printw("··········@@@···············\\\\··||··||··||····");
move(18,0);
printw("·············@@·············//··||··||··||····");
move(19,0);
printw("···············@@@·········//····\\\\//···||····");
move(20,0);
printw("········································");
refresh();

int aux_linea;
for(aux_linea=0;aux_linea<=23;aux_linea++)
{
move(aux_linea,51);
printw("|");
}
refresh();


move(4,52);
printw("Game: SNAKE");
move(6,52);
printw("Autor: Sui Zhao");
move(7,52);
printw("Fecha: 24-05-09");

move(9,52);
printw("============================");
move(10,52);
printw(" S T A R T T H E G A M E ");
move(11,52);
printw("============================");
move(13,52);
printw(" Pulse una tecla");
move(14,52);
printw(" para empezar...");
refresh();
getch();
}


/***************** kbhit ********************/
void changemode(int dir)
{
static struct termios oldt, newt;

if ( dir == 1 )
{
tcgetattr( STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt);
}
else
tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
}

int kbhit (void)
{
struct timeval tv;
fd_set rdfs;

tv.tv_sec = 0;
tv.tv_usec = 0;

FD_ZERO(&rdfs);
FD_SET (STDIN_FILENO, &rdfs);

select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
return FD_ISSET(STDIN_FILENO, &rdfs);

}
/*********************************************/

=== EOF ====

Saludos, Good Luck!!
Read more »

martes, 13 de octubre de 2009

Perfección

Somos imperfecto. Nada y nadie es perfecto.

Pues me temo que se equivoca, Xd, hay perfección, y lo han demostrado,el numero 6 (numero perfecto), xD.
Read more »

lunes, 12 de octubre de 2009

Because you

Hoy estoy super contento y nadie me lo va a fastidiar, XD.

You are so kawai~~
Read more »

domingo, 11 de octubre de 2009

RELAX I

Si tu chica y Guillermo Puerta caen al río al mismo tiempo, ¿Qué haces?
*¿Quién es Guillermo Puerta? pon google traductor.

1) Salvar a tu chica
2) Salvar a Guillermito Puerta
3) Buscar piedra ¿?
-3.1) Tirar un pedraso a Guillermo Puerta y salvar a tu chica.
-3.2) Partir la piedra en 2, un pedraso para cada uno.


----
Qué emoción salgo en la primera página de google al poner "TCP header", *_*. :D
Read more »

[Tutorial] DDOS: SYN Flood

[Tutorial]DDOS: SYN Flood
---
Preview on Sui90 ...
TCP Header
---

Continuing...

[Se puede decir que es DOS, porque basta con 1 atacante]

How and why?

Para establecer una conexion entre 2 hosts deben, por parte de ambos, de haber enviado SYN y haber recibido ACK del otro, pasando por lo que se llama 3-way handshake:
1-Petición de conexión por parte del cliente.
2-Repuesta de conexión por parte del servidor.
3-Comienzo de envio de datos por parte del cliente.



Guille: SYN=1, ACKnowledgment Number=NULL
/*- ?Puedo conectar?*/

Server: SYN=1, ACKnowledgment Number=A2
/* Si, conéctate (abre una conexion en espera para que este se conecte)(half-opened) */

Guille: SYN=0, ACKnowledgment Number=B2
/*- Datos, datos, datos.... */

Los servidores siempre están en escucha y no saben quienes se van a conectar, y cuando un cliente se quiere conectar le envia una SYN, el server le responde con un SYN+ACK y le reserva una conexión esperando que éste le responda para establecer la conexión, pero si el cliente no responde éste espera vuelve a intentarlo pasado unos segundos, y si a varios intentos sigue sin éxito éste lo elimina de su lista conexión.
Las peticiones del cliente no tiene límite (porque utiliza junto con la técnica de IP Spoofing, falsificando una IP falsa o inexistente, y así no le llega ninguna repuesta del servidor), en cambio en el servidor tendrá que reservar para cada peticion una conexion y en éste tiene sus limitacioness.


*Ejm1. denegar a
todo el mundo el servicio de Telnet (23)

Lui(192.168.1.20): ¿Puedo conectar?, tengo IP 192.168.1.10
Servidor: Sí, (abro una conexión para 192.168.1.10)
Lui(192.168.1.20): ¿Puedo conectar?, tengo IP 192.168.1.10
Servidor: Sí, (abro una conexión para 192.168.1.10)
(...) infinidad de veces.
Guille: ¿Puedo conectar?, tengo IP 192.168.1.30
Servidor:... No puedo responder...

[Algo similar, xD]


Tools (Linux)
-hping

Sintaxis básica para este ataque (*Ejm1):
hping -i u2 -S -p 23 -a 192.168.1.33 192.168.1.1

-i u2: intervalo de tiempo a esperar para enviar siguiente paquete, en microsegundo
-S: enviar SYN
-p 23: puerto 23
-a 192.168.1.33: spoofear esta IP
192.168.1.33: IP de la víctima



Podemos ver los estados de las conexiones con netstat
Sintaxis básica:

netstat -n -p tcp
De testing

En la imagen probé denegar sevicio web(80) del IP 192.168.1.34

[Tengo hecho un video haciendo DOS a mi server, XD, una caca, :D ]



Saludos, Good Luck!!
Read more »

lunes, 5 de octubre de 2009

Lee, piensa, reflexiona, aplica. IV

¿Temes por sufrir?
-Pues ya sufres por temer.
Read more »

viernes, 2 de octubre de 2009

NADAR - easy

¿cómo? ¿El qué? ¿Pero cómo es posible? ¿No sabes nadar?, ¿¡NO SABES NADAR!?
-BASTA!!!

Voy a ser como Sheldon, voy a aprender a nadar con internet y por supuesto, no morir en el intento,XD.

Con este tuto, es difícil salir de aquí sin saber nadar... [:D]
Estilo de rana:







Teoricamente...
1- Cuando abres los brazos, sacas la cabeza y te tomas un respiro.
2- Al juntar las manos ya debes estar aguantando la respiración.
3- Con las dos manos juntas, estira para delante y espira
Y esto es un bucle sin fin hasta que te canses.

Y cuando te pares... bueno, a ver cómo flotas... en realidad no pasa nada, te hundes, te ahogas, te muer... digo te salvan. Sobre todo no piensen en Titanic... ;)

RECOMENDACIÓN: Hacer práctica en el suelo antes de votarte al agua [¬_¬]
AVISO: No me hago responsable si alguien te llama loco [XD]


Saludos, Good Luck!!
Read more »

 
Powered by Blogger