elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como leer paquetes salientes de un puerto C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como leer paquetes salientes de un puerto C++  (Leído 3,337 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Como leer paquetes salientes de un puerto C++
« en: 17 Septiembre 2015, 23:43 pm »

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.


En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #1 en: 18 Septiembre 2015, 12:20 pm »

Puedes crear un servidor que escuche por el puerto 80 y establezca la conexión con los clientes, leyendo todo lo que le envían. Si describes mejor tus intenciones, podríamos ayudarte más.
Saludos


En línea

- Pásate por mi web -
https://codeisc.com
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #2 en: 18 Septiembre 2015, 13:44 pm »

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
  1. //Funcion para obtener los paquetes salientes por el puerto 80.
  2. void servidor_HTTP(volatile bool *on_sslstrip)
  3. {
  4. WSADATA wsa;
  5. string contenido;
  6. sockaddr_in dir;
  7. int sock;
  8.  
  9. WSAStartup(MAKEWORD(2, 0), &wsa);
  10.  
  11. while (*on_sslstrip){
  12. if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
  13. WSACleanup();
  14. continue;
  15. }
  16. else{
  17. dir.sin_family = AF_INET;
  18. dir.sin_addr.s_addr = inet_addr("127.0.0.1");
  19. dir.sin_port = htons(80);
  20. bind(sock, (struct sockaddr*)&dir, sizeof(dir));
  21. printf("abiertoo");
  22. system("pause");
  23.  
  24. /*if (std::bind(sock, (struct sockaddr *)&dir, sizeof(dir)) == -1)//SOCKET_ERROR){
  25. closesocket(sock);
  26. continue;
  27. }*/
  28.  
  29.                         //En proceso que debería hacer ahora?
  30. }
  31. }
  32. Sleep(20000);
  33. }

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.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #3 en: 18 Septiembre 2015, 20:22 pm »

Código
  1. std::bind
Eso es una función de C++11, que no tiene que ver con los sockets de Windows.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #4 en: 18 Septiembre 2015, 20:54 pm »

Código
  1. std::bind
Eso es una función de C++11, que no tiene que ver con los sockets de Windows.

Sii ese es el problema que tengo con bind, que no devuelve un puntero ni "bind", ni "std:bind", no hay manera de llamar a ese bind que tiene que ver con los sockets de windows, ¿alguna idea de como llamar a la de los sockets?.

Saludos y gracias.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #5 en: 18 Septiembre 2015, 20:57 pm »

Estás llamando a bind antes de printf.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #6 en: 18 Septiembre 2015, 21:00 pm »

ojj acabo de remover de la cabecera el using namespace std; y ya funciona, vamos que hay 2 funciones "bind()", dpm windows XD. ¿como puedo hacerlo con el namespace std? ¿se puede o no?

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #7 en: 18 Septiembre 2015, 21:08 pm »

Código
  1. ::bind();
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Como leer paquetes salientes de un puerto C++
« Respuesta #8 en: 18 Septiembre 2015, 21:22 pm »

Código
  1. ::bind();

Gracias grande!, esto es lo que tengo hasta ahora:

Código
  1. void servidor_HTTP(volatile bool *on_sslstrip)
  2. {
  3. WSADATA wsa;
  4. string contenido;
  5. sockaddr_in dir_servidor;
  6. int s_servidor;
  7.  
  8. WSAStartup(MAKEWORD(2, 0), &wsa);
  9.  
  10. while (*on_sslstrip){
  11. if ((s_servidor = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
  12. WSACleanup();
  13. Sleep(20000);
  14. continue;
  15. }
  16. else{
  17. dir_servidor.sin_family = AF_INET;
  18. dir_servidor.sin_addr.s_addr = inet_addr("127.0.0.1");
  19. dir_servidor.sin_port = htons(80);
  20.  
  21. if (::bind(s_servidor, (struct sockaddr *)&dir_servidor, sizeof(dir_servidor)) == SOCKET_ERROR){
  22. closesocket(s_servidor);
  23. WSACleanup();
  24. Sleep(20000);
  25. continue;
  26. }
  27.  
  28. sockaddr_in dir_cliente;
  29.  
  30. while (*on_sslstrip){
  31. int tam = sizeof(dir_cliente);
  32. int s_client = accept(s_servidor, (struct sockaddr *)&dir_cliente, &tam);
  33. if (s_client == INVALID_SOCKET){//SOCKET_ERROR
  34. printf("accept() failed: %d\n", WSAGetLastError());
  35. printf("error");
  36. break;
  37. }
  38. printf("Accepted client: %s:%d\n",
  39. inet_ntoa(dir_cliente.sin_addr), ntohs(dir_cliente.sin_port));
  40.  
  41. }
  42. }
  43. }
  44. }

Pero me da error, y me sale a la primera iteracion del segundo bucle, la idea recuerdo que es escuchar peticiones de salida en puerto 80 y recojer paquetes como por ejemplo un paquete HTTP, lo primero es acceder a esos paquetes, luego los redirigiría de puerto y haría lo mismo en el otro puerto, entonces tengo la esperanza de que el sistema no pueda hacer conexiones http ni por el puerto 80 puesto que redirigi el puerto, y entonces accedería a los paquetes y los mandaría a los servidores modificandolos y los regresaría a los clientes correspondientes de los paquetes.

Pero ahora estamos por la parte de recoger esos paquetes http o no que usen puerto 80.

Saludos y gracias.

Citar
WSAEINVAL
10022
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

Buenas, lo que creaba antes era un servidor en el puerto 80 no era lo correcto, he probado con un cliente que trata de conectar a un puerto de nuestro ordenador para sacar los paquetes aquí el code:

Código
  1. string cliente_HTTP()
  2. {
  3. WSADATA wsa;
  4. string contenido;
  5. sockaddr_in dir;
  6. int sock;
  7.  
  8. WSAStartup(MAKEWORD(2, 0), &wsa);
  9.  
  10. if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
  11. WSACleanup();
  12. return "";
  13. }
  14. else{
  15. dir.sin_family = AF_INET;
  16. dir.sin_port = htons(80);
  17. dir.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  18.  
  19. if (connect(sock, (struct sockaddr*)&dir, sizeof(dir)) == SOCKET_ERROR){
  20. closesocket(sock);
  21. WSACleanup();
  22. cout << "bad";
  23. return "";
  24. }
  25. else{
  26. cout << "Connected to " << inet_ntoa(dir.sin_addr) << "!" << endl;
  27. cout << "hi";
  28. char *respuesta = new char[1000]();
  29. recv(sock, respuesta, 1000, 0);
  30. closesocket(sock);
  31. WSACleanup();
  32. return string(respuesta);
  33. }
  34. }
  35. }

Problema, que da conection refused al hacer el connect(), tiene sentido, pues no podemos conectar a un puerto 80, pues lo tenemos cerrado no se puede conectar, si lo hace si ponemos la ip de google. ¿como entonces accedemos a los paquetes salientes de nuestro ordenador??

Supongo que habrá que buscar esto para windows:

Código:
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>
« Última modificación: 19 Septiembre 2015, 11:52 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer Puerto Usb « 1 2 »
PHP
Vampersy 13 13,692 Último mensaje 26 Julio 2012, 15:52 pm
por ferley3gsm
como leer el puerto com1 y mostrar en pantalla
Programación Visual Basic
tobu 0 2,750 Último mensaje 8 Junio 2009, 13:46 pm
por tobu
Duda/Ayuda - Interceptar paquetes entrantes-salientes (Modificacion)
Hacking
Paniic 0 2,207 Último mensaje 31 Marzo 2012, 16:03 pm
por Paniic
LSSR en paquetes salientes con iptables
GNU/Linux
desikoder 5 2,822 Último mensaje 18 Julio 2014, 23:15 pm
por xv0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines