Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kaxperday

#331
Gracias señorr!!

Vale, lo que pretendo es escuchar el tráfico de un puerto como por ejemplo las peticiones HTTP del puerto 80, y no sé como hacerlo, ¿debería usar sockets? Es lo que estoy intentando, estoy programando en C++, este es el code que llevo hasta ahora:

Código (cpp) [Seleccionar]

//Funcion para obtener los paquetes salientes por el puerto 80.
void servidor_HTTP(volatile bool *on_sslstrip)
{
WSADATA wsa;
string contenido;
sockaddr_in dir;
int sock;

WSAStartup(MAKEWORD(2, 0), &wsa);

while (*on_sslstrip){
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
WSACleanup();
continue;
}
else{
dir.sin_family = AF_INET;
dir.sin_addr.s_addr = inet_addr("127.0.0.1");
dir.sin_port = htons(80);
bind(sock, (struct sockaddr*)&dir, sizeof(dir));
printf("abiertoo");
system("pause");

/*if (std::bind(sock, (struct sockaddr *)&dir, sizeof(dir)) == -1)//SOCKET_ERROR){
closesocket(sock);
continue;
}*/

                        //En proceso que debería hacer ahora?
}
}
Sleep(20000);
}


El objetivo final sería desviarlo a otro puerto, escuchar en ese otro puerto y modificar los paquetes, pues no sé si desviando los paquetes http a otro puerto esos paquetes se perderían y no llegarían al destino, por lo que podría recogerlos con sockets y enviarlos a su destino podiendo así modificarlos.

Otra cosa, el bind no me deja igualarlo a -1 entonces ¿como detecto si se ha producido error o no?.

Ayuda pls, gracias y un saludo.
#332
Pues eso, he redirigido los paquetes TCP del puerto 80 al puerto 123 (por ejemplo) y ahora quiero leerlos con un socket o no se con qué por eso creo el hilo. Para poder trabajar con ellos y continuar con mi proyecto de hacking etico.

Saludos.
#333
Hola a todos, tengo que redirigir el tráfico del puerto 80 (HTTP) a otro puerto para poderlo modificar antes de que salga de mi ordenador, así pues cuando cargue una página con el ordenador el navegador la sacará hacia el puerto 80, si yo esa salida la redirijo a puerto 8080 por ejemplo no me cargaría la página no?, entonces podría montar un server con sockets que escuche las peticiones en el puerto 8080 y lanzarlas desde ahí modificando los datos ¿no?.

Por cierto lo único que he encontrado hasta ahorapara redirigir el tráfico de un puerto a otro en windows es con esto:

netsh interface portproxy v4tov4 listenport=80 connectaddress=192.168.0.100 connectport=8080 protocol=tcp

Poniendo nuestra IP, y en caso de estar redireccionando varias ponerlas todas una a una, ¿no hay manera de poner que redirija a todas con un solo comando? Pero esto no es lo importante, la pregunta principal es la de la parrafada, la que me tiene en ascuas.

Gracias y saludos.
#334
Redes / Re: ¿Por qué no funciona este MITM?
16 Septiembre 2015, 13:46 PM
Cita de: andavid en 16 Septiembre 2015, 11:57 AM
Una consulta para quedar claros, la primera imagen hace referencia al wireshark (que debe estar en modo promiscuo o si no no sirve de nada) y la segunda hace referencia al programa en c++ que estas programando?

Hola Andavid gracias por colaborar, en efecto la primera imagen hace referencia al wireshark capturando todos los paquetes que pasan a través de mi, y la segunda no es de mi programa en C++ está en C# y me pregunto si será necesario pasar ese code a C# para que funcione el MITM, pero no creo.

Lo que hace mi programa es simplemente hacer arp spoofing y reedirigir los paquetes entrantes cambiando las MACs, pero no redirige correctamente y solo hago denegación de servicio.

He estado informándome para hacer el MITM, y quizás deba de poner la tarjeta de red de la interfaz que usa conexión a internet (la de la red) en modo promiscuo (algo que hasta hace un momento no sabía si era necesario hacerlo pues pienso/pensaba que con mi método no debería hacer falta):

http://windows7themes.net/en-us/enable-promiscuous-mode-manually-in-windows-7/

Aquí dice como poner en modo promiscuo una interfaz de red en windows con comando, quizás se pueda hacer trabajando con el registro ya investigaré al respecto.

Mi pregunta es, ¿debo redirigir yo los paquetes o mediante ip fordwarding y poniendo la tarjeta de red en modo promiscuo ya debería de hacer el MITM con solo añadir arp spoofing? ¿No?

Estoy venga a buscar info, y creo que esa puede ser una salida, pero lo que quiero es modificar los paquetes entrantes para hacer ataques de red, de hacking ético hacer simplemente pruebas y testear cosas. No se si así podré tener acceso a los paquetes ya que el propio sistema los estará redirigiendo y no yo, pero bueno lo primero es probar que funcione lo que he dicho.

Entonces ¿modo promiscuo con un comando (o probare esto tbn: https://support.microsoft.com/es-es/kb/264715) + arp spoofing + ip fordwarding = MITM trabajando?

Saludos seguiré con ello, gracias por colaborar.

Edito: No funciona el comando del primer link, me pregunto si los del segundo link funcionará para ponerlo en modo promiscuo ya que la carpeta no existe en el registro de win10, ¿es necesario ponerlo en modo promiscuo para hacer el mitm o no?.

Saludos.

Edito: Por cierto pongo el código que reenvía paquetes de mi programa en C++, si es arp lo reenvía envenenando al origen y destino, si es tcp cambio las mac origen y destino y reenvio, aviso que tiene fallos y no serán pocos, y falta implementar para más paquetes, pero si lo dejé de implementar es porque fallaba, no llega a haber conexión, está tarde lo miraré más afondo, saludos.

Código (cpp) [Seleccionar]
void reenviando_mitm(volatile bool *on_mitm, pcap_t *capturador, u_char *ip_propia, u_char *mac_propia, u_char *ip_gateway, u_char *mac_gateway, lista_usuarios* lista)
{
u_char mac_broadcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };//
struct pcap_pkthdr *header;
const u_char *pkt_data;

while (int res = pcap_next_ex(capturador, &header, &pkt_data) >= 0 && *on_mitm){

if (res == 0)
continue;

if (header->caplen <= MAXIMO_TAMAÑO_ARP){/////////////////
if (pkt_data[12] == '\x08' &&
pkt_data[13] == '\x06'){

u_char *paquete = new u_char[42]();
u_char ip_origen[4];
u_char ip_destino[4];
u_char mac_origen[6];
u_char mac_destino[6];

if (!lista->contiene_ip(ip_destino)){
continue;
}

memcpy(ip_origen, pkt_data + 28, sizeof(u_char)* 4);
memcpy(ip_destino, pkt_data + 38, sizeof(u_char)* 4);
memcpy(mac_origen, pkt_data + 22, sizeof(u_char)* 6);
memcpy(mac_destino, pkt_data + 32, sizeof(u_char)* 6);

//OJO A ESE IP_DESTINO EL PAQUETE VENDRA A NOSOTROS??

if (memcmp(mac_origen, mac_propia, sizeof(u_char)* 6) == 0)
continue;

if (memcmp(mac_origen, mac_gateway, sizeof(u_char)* 6) == 0){//es de gateway
if (memcmp(mac_destino, mac_broadcast, sizeof(u_char)* 6) == 0){//pregunta a broadcast
//WARNING PUEDE LLLEGAR A TI DIFERENCIAR.
paquete = respuesta_arp(true, ip_gateway, mac_propia, ip_destino, NULL);
pcap_sendpacket(capturador, paquete, 42);
paquete = respuesta_arp(false, ip_propia, mac_propia, ip_gateway, mac_gateway);
pcap_sendpacket(capturador, paquete, 42);
}
else{
paquete = respuesta_arp(false, ip_propia, mac_propia, ip_gateway, mac_gateway);
pcap_sendpacket(capturador, paquete, 42);
}
}
else{
if (memcmp(mac_destino, mac_broadcast, sizeof(u_char)* 6) == 0)//pregunta a la broad un host.
{
paquete = respuesta_arp(true, ip_gateway, mac_propia, ip_origen, NULL);
pcap_sendpacket(capturador, paquete, 42);
paquete = respuesta_arp(false, ip_propia, mac_propia, ip_gateway, mac_gateway);
pcap_sendpacket(capturador, paquete, 42);
}
else//me pregunta a mi solo un host.
{
paquete = respuesta_arp(false, ip_gateway, mac_propia, ip_origen, mac_origen);
pcap_sendpacket(capturador, paquete, 42);
}
}
continue;
}
}
/////////////////////////7

//el router me lo dice y yo se lo digo a el
if (pkt_data[12] == '\x08' && pkt_data[13] == '\x00'){
//al reenviar paquetes el router ve que vienen de mi mac y al ser de otra ip cancela.
u_char mac_origen[6];
memcpy(mac_origen, pkt_data + 6, sizeof(u_char)* 6);

if (memcmp(mac_origen, mac_gateway, sizeof(u_char)* 6) == 0){

u_char ip_origen[4];
u_char ip_destino[4];
u_char *mac_destino = new u_char[6]();
bool continua = true;

memcpy(ip_origen, pkt_data + 26, sizeof(u_char)* 4);
memcpy(ip_destino, pkt_data + 30, sizeof(u_char)* 4);
memcpy(mac_destino, pkt_data, sizeof(u_char)* 6);

//control.lock();
mac_destino = lista->obtener_mac(ip_destino);
//control.unlock();

if (mac_destino == NULL)
continua = false;
else{
memcpy(const_cast<u_char*>(pkt_data), mac_destino, sizeof(u_char)* 6);
memcpy(const_cast<u_char*>(pkt_data + 6), mac_propia, sizeof(u_char)* 6);
}

if (!continua)
continue;
}
else{
memcpy(const_cast<u_char*>(pkt_data), mac_gateway, sizeof(u_char)* 6);
memcpy(const_cast<u_char*>(pkt_data + 6), mac_propia, sizeof(u_char)* 6);
}
pcap_sendpacket(capturador, pkt_data, header->caplen);
}
}
*on_mitm = false;
}


No entiendo, el tomahawk es un proyecto de github y puede hacer el mitm sin problemas, ¿pone la tarjeta en modo promiscuo? creo que no!.

Aver que me lio, estoy usando winpcap, YA ESTOY TRABAJANDO EN MODO PROMISCUO!!

Citarpcap_open(id.c_str(), 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, NULL)

DELICATESSE EDITION FROM KAXPERDAY <3 <3: Solucionado el MITM era mucho más sencillo de lo que pensaba, claro está es difícil si nunca lo has implementado y no encuentras apenas cosas de gente que lo ha implementado, simplemente OMFG hay que hacer arp spoofing y establecer ip fordwarding, y ya tienen conexión y tienes acceso a sus paquetes OMFG mirad que función hice para nada!!! OMFG!! <3 <3 <3 <3 <3 <3 3< <3[/b][/glow], ahora probaré a editar los lindos paquetes, fdo: kaxperday

My best regards!
Ahora el problema estará que reenvia todos los paquetes, y si queremos modificarlos para cuando lo vayamos a hacer ya lo habrá reenviado mm.
#335
Hola, pues eso, necesito pasar a una función un dominio en forma de cadena, y que me devuelva un "existe", "no sabemos si existe porque algo ha fallado como la red", "no existe".

La idea era hacerlo con gethostbyname():

WSAStartup(MAKEWORD(2, 0), &wsa);
hostent *h = gethostbyname(dominio.c_str());
if(h==NULL)WSAGetLastError();...


Y si existe la funcion devuelve distinto de NULL, pero si no puede conectar con el dominio devuelve NULL, entonces debo recojer el tipo de error producido con WSAGetLastError(), y aqui quiero diferenciar si es un error de red (que no haya internet por ejemplo) o que realmente la haya hecho y el server no responda, pero el problema es que WSAGetLastError() devuelve lo mismo si el host no existe que si tengo el wifi apagado.

Dicho esto, cree esta funcion:

Código (cpp) [Seleccionar]
estado_dominio existe_dominio(string dominio)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
if (gethostbyname(dominio.c_str()) == NULL){
if (gethostbyname("google.com") == NULL){
WSACleanup();
return SIN_CONEXION;
}
else{
WSACleanup();
return NO_EXISTE;
}
}
WSACleanup();
return SI_EXISTE;
}


Pero no es eficiente ya que por cada peticion hace otra a google.com, de esta manera si google responde es que tenemos conexion.

¿Como lo puedo optimizar?.

De paso os dejo este code que fue el primero que hice pero no tenia sentido ya que  WSAGetLastError() devolvia siempre lo mismo.

Code:

Código (cpp) [Seleccionar]
int existe_dominio(string dominio)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
if (gethostbyname(dominio.c_str()) == NULL){
int error = WSAGetLastError();
if (error == WSAHOST_NOT_FOUND){ //No existe host.
WSACleanup();
return 0;
}
else if (error == WSANO_DATA){ //Existe pero no envió datos.
WSACleanup();
return 1;
}
else if (error == WSANOTINITIALISED || //Reintentaremos puede existir host.
error == WSAENETDOWN ||
error == WSATRY_AGAIN ||
error == WSANO_RECOVERY ||
error == WSAEINPROGRESS ||
error == WSAEFAULT ||
error == WSAEINTR){
WSACleanup();
return 2;
}
else{ //No sabemos que ocurrió.
WSACleanup();
return 2;
}
}
WSACleanup();
return 1; //Encontrado y existe.
}


¿Alguna funcion o metodo para comprobar si existe un dominio y que si falla diferencie entre fallo de red o falta de respuesta del servidor (no existe)?

Saludos, gracias.

Edito: Iba a probar con connect(), pero tenía que rellenar un struct in_addr y necesitaba la ip del server, para saberla primero tengo que resolverlo y si soy capaz de ello es que existe, luego no es metodo, ¿alguien sabe si se puede hacer con datagramas? ¿como sería? o un ping? ¿Cual sería el mejor método más rapido y eficiente?.

Saludos.
#336
Buenas socios, gracias por las respuestas.

También se me ocurrió lo del router, pero no lo vi muy viable porque habría que configurar el login para cada modelo de router, busqueda de la ip publica en el html etc sería mucho más complejo que obteniendolo de una web.

Vistas las opciones.. usaré un server http propio y lo obtendré de allí, o entre hosts, pues la idea es crear una p2p descentralizada, al conectarse al tracker este lo añade en una lista con su ip, y puerto para conexion con los demás nodos (que le pasa como variable), y luego el tracker le da la lista de todas las ips menos la suya, y este comienza la conexion, estos al ver que cumple los requisitos de conexion (pass etc) añadiran su ip a la lista sin necesidad de comunicarse con el tracker...

Bueno, en definitiva solo una web nos da nuestra ip publica o el router, no es algo accesible desde un dispositivo de la red.

Saludos.
#337
Pues eso, hasta el momento se me ocurre haciendo un post a una pagina que muestre mi ip publica. Pero si esa página no responde ¿que hago entonces? ¿alguna idea?

Saludos y gracias!.
#338
Hola gente, necesito saber cuales son los subdominios que usa, ya que son gratuitos y cualquier persona puede crearlos. Ejemplo .hostoi.com, .netai.com .comuv.com etc

¿Son siempre los mismos o no? ¿como podría obtener toda la lista?

Saludos y gracias.

Edito: Y aprovecho para preguntar, ¿alguna web que permita crear tu propio dominio como 000webhost? Es que solo conozco esa que funcione.

Ups, solucionado:

http://www.000webhost.com/forum/content-managament-systems/29088-list-subdomains.html
#339
Cita de: ivancea96 en 10 Septiembre 2015, 19:00 PM
Pregunta cuando no encuentres nada :/

La mitad de tus posts acaban con un "EDITO: Ya lo resolví" :/

Bueno, pregunto cuando no encuentro una respuesta a pesar de buscarla, a veces me enredo varias horas y cuando ya no hay manera creo un hilo en el foro, otras veces es casi instantáneo, además me ayuda a focalizar las dudas y así verlo yo mismo más claro, y a la vez me abro a respuestas y soluciones de miembros del foro. Es verdad que muchos de mis hilos sobran, porque los puedo resolver yo solo, pero estaría bien ver más puntos de vista, otras soluciones, ¿que harían ellos?, es un poco también para parlotear puntos de vista, preguntas y respuestas de la materia, más allá muchas veces de las dudas.

Saludos  :xD ;D
#340
Cita de: ivancea96 en 10 Septiembre 2015, 17:19 PM
Efectivamente. Tal vez lo mejor es que inviertas el orden de los sucesos ·_·

XD el resultado sería el mismo, es BUSCO -> PREGUNTO -> BUSCO. Inviértelo como quieras jaja.

Saludos.