|
51
|
Programación / Programación C/C++ / Problema listando archivos de un directorio C++
|
en: 8 Diciembre 2015, 01:00 am
|
Buenas os dejo el código: vector<string> listar_archivos(string _directorio) { WIN32_FIND_DATAA ffd; HANDLE hFind; vector<string> retorno; hFind = FindFirstFileA(_directorio.c_str(), &ffd); if (hFind == INVALID_HANDLE_VALUE) return retorno; do{ printf("%x\n", ffd.dwFileAttributes); if (ffd.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN)) retorno.push_back(ffd.cFileName); } while (FindNextFileA(hFind, &ffd) != 0); for each(string s in retorno)cout << s; return retorno; }
El problema está en que en ese directorio tengo 6 archivos con los atributos FILE_ATTRIBUTE_ARCHIVE y FILE_ATTRIBUTE_HIDDEN que puse con SetAtributtes pero sin embargo no aparecen al listarlos al final, también elimine la condición del if en el bucle y la salida era la misma no aparecen, también probé a listar archivos del desktop por ejemplo y no salía nada. Lo que obtengo al mostrar la variable "retorno" elemento a elemento es un solo elemento que es el nombre del directorio del que quiero ver sus archivos, no sus archivos. ¿que falla?, saludos y gracias. Vuelve edicion delicatesse:[/glow][/shadow] Acabo de solucionarlo había que añadir a el directorio "\\*" como pone aqui: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx Un saludo.
|
|
|
52
|
Seguridad Informática / Bugs y Exploits / Ejecutar payload con sockets ¿es posible?
|
en: 4 Diciembre 2015, 10:49 am
|
Actualmente para ejecutar ordenes en un terminal desde otro ordenador lo que utilizo es system("comando>temp.txt"); y que el ordenador que lo ejecuta me devuelva lo que contiene temp.txt, pero ¿esto no es posible hacerlo con exploits?.
Me refiero mandarle una cadena con el payload y que de alguna manera lo ejecute y tenga acceso a su terminal... no sé como iría ya por eso abro el tema.
Yo le mandaria el paquete con el payload y el lo ejecutaría, y obtendríamos una remote shell, ¿es posible? ¿necesito simular un cliente de metasploit?, ¿ideas?.
O mejor dicho ¿como crear una remote shell de A hacia B, sin usar comandos system("")?.
Saludos.
|
|
|
53
|
Programación / Desarrollo Web / Ayuda con HTTP POST en C#
|
en: 3 Diciembre 2015, 20:28 pm
|
Hola, estoy muy frustrado porque al cargar una página (que prefiero no decir en el tema) con el navegador sin cookies ni navegación en ella, al cargar su index y ver su código fuente me salen distintas cosas de las que obtengo con esto: HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://***.com/"); req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; req.CookieContainer = cc; req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"; req.Host = "***.com"; req.Method = "POST"; req.Proxy = null; HttpWebResponse response = (HttpWebResponse)req.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (StreamReader sr = new StreamReader(responseStream)) { string sub = "name=\"_token\" value=\""; string responseData = sr.ReadToEnd(); byte[] bytes = new byte[responseData.Length * sizeof(char)]; System.Buffer.BlockCopy(responseData.ToCharArray(), 0, bytes, 0, bytes.Length); File.WriteAllBytes("C:\\Users\\Usuario\\Desktop\\tast.txt", bytes); int indice = responseData.IndexOf(sub); if (indice == -1) { return false; } indice += sub.Length; while(responseData[indice] != '"') { token += responseData[indice]; indice++; } MessageBox.Show(token); } } }
Guardo la respuesta en un archivo en el escritorio, y trato de buscar un token necesario para iniciar la sesión en la web, ese token no aparece al hacer este post, ¿puede tener algo que ver con algún javascript que ignoraría?. Básicamente con navegador me aparece esto al cargar el index: Y cuando hago el https post no me sale, recibo distinta respuesta, ¿porque?. Dejando de lado el idioma etc, no creo que tenga que ver. Dice que no la encuentra esa substring, y es que es verdad no está en el html que descarga la app en C#, pero al cargar la pag con el navegador si sale, ¿porque?.Saludos. Edito: Más pistas, en la página al clicar un boton salta un pop up donde metes los datos de login: https://***.com/#show=login Según he leido este operador (#) se usa para incluir código de otras urls más o menos, estaría bien una aclaración, seguiré leyendo.
|
|
|
55
|
Comunicaciones / Redes / Duda sobre conectar ordenadores con sockets a través de internet
|
en: 30 Noviembre 2015, 16:44 pm
|
Hola, quiero hacer una red P2P donde todos los ordenadores actuarían de servidores y clientes a la vez, cada ordenador descargaría una tabla a través de un servidor web que actuaría de tracker y luego con la lista de ips de los ordenadores conectados que facilita la tabla establecerían conexión.
Pero ¿no necesito abrir los puertos de cada router si me quiero conectar a un ordenador específico?. Cuando levnto un servidor en un ordenador salta alerta del firewall y entoces permitimos permisos (también se puede añadir la excepción de manera automatizada), pero con eso no es suficiente para que alguien se pueda conectar a nuestro servidor solo con nuestra ip verdad?.
¿Habría que hacer NAT o no? ¿alternativas?.
Ejemplo: Juan de murcia con IP XX.XX.XX.XX trata de hacer connect() a Jaime de Lisboa con IP YY.YY.YY.YY, al hacer connect indica la IP de Jaime y su puerto donde Jaime tiene escuchando su servidor.
¿Se llegaría a producir esa conexión así solo vía sockets de punto a punto?, ¿o habria falta algo más, qué?.
Un saludo y gracias.
|
|
|
56
|
Programación / Programación C/C++ / Enviando Email C++ 2.0
|
en: 25 Noviembre 2015, 22:53 pm
|
Parte 1.0: https://foro.elhacker.net/programacion_cc/fallo_al_enviar_email_a_servidor-t444524.0.htmlParte 2.0: Buenas, sigo intentando crear una función para enviar correos electronicos en C++. Por lo visto voy a necesitar una cuenta de correo ya conocida, y el servidor smtp al que pertenece esa cuenta. Comence conectando al puerto 25 de smtp.live.com (servidor smtp de hotmail), pero tras el "HELO" saltaba a "STARTTLS", es decir el servidor rechazaba que introdujera más datos (como usuario de corre y contraseña) ya que requería usar "STARTTLS" para pasar a una conexión cifrada TLS/SSL. Ahí es donde nació el problema por lo que abro el hilo. Pues informandome de los puertos que usa hotmail, gmail etc, traté de conectarme ("connect") a ellos con SSL y no respondía las peticiones, algo por lo que desconozco la causa actualmente: CRYPTO_malloc_init(); SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method()); SSL* ssl; BIO* bio = BIO_new_ssl_connect(ctx); if (bio == NULL) { SSL_CTX_free(ctx); return false; } BIO_get_ssl(bio, &ssl); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); BIO_set_conn_hostname(bio, (host + ":465").c_str()); if (BIO_do_connect(bio) <= 0) { BIO_free_all(bio); SSL_CTX_free(ctx); return false; }
En yahoo pude comprobar que permite acceder al servidor con las credenciales en texto plano, por lo que desde un correo de yahoo podría mandar fácilmente a otro, pero iría en texto plano, y además no tengo correo yahoo vaya. https://www.fastmail.com/help/technical/ssltlsstarttls.html¿Por qué no no responde mis petición SSL a su puerto 465 donde se supone que usa SMTP bajo SSL?. Creo que tengo que comenzar en texto plano con HELO, y luego usar el comando STARTTLS, pero no se si es un comando y apenas encuenro documentación sobre como funciona, solo programas hechos que ya lo implementan, otras soluciones dicen que basta con conectarse directamente al puerto SSL del servidor SMTP, pero como ya dije ignora mis peticiones. Saludos. Edito: Ojo me trato de conectar con un cliente SSL, no con uno TLS, pero no creo que sea eso no tiene mucho sentido. STARTTLS
220 2.0.0 SMTP server ready il.com Hello Después de esto ¿qué?, no me acepta conexiones SSL.. en ningun puerto.. Edito: Muy buenas chicos, he probado con gmail y funciona el SSL, ya que al parecer, el hotmail soporta solo TLS no SSL, por eso no respondía pero gmail si y ya me pide autentificacion, perfecto , aunque una pena no poder hacerlo para hotmail. De todas formas ¿no podría tener un servidor SMTP propio de el proovedor de internet??? Vendría de perlas, porque sino las credenciales deberían de ir dentro de la app para mandar el correo, un saludo. Edito: Tras mucho sufrimiento me consigo loguear en gmail y me dice que vaya a la web. " Please log in via your web browser and 534-5.7.14 then try again."
|
|
|
58
|
Programación / Programación C/C++ / Problemas compilando ZLIB en VS13
|
en: 24 Noviembre 2015, 15:02 pm
|
Hola, me descargue y descomprimí "zlib-1.2.8" en el escritorio, luego accedí a "\contrib\vstudio\vc11" y abrí el ".sln", cambié todas las versiones para que se compilaran en VS13, ya que estaban para VS12 y daba error, luego también cambie todos los proyectos para que se compilaran sin "SAFETRESH", cambie que compilase a librería estática ".lib" en vez de ".dll", al compilar tenía 9 errores de externos sin resolver, todos por culpa de zlibwapi.lib, ejemplo: Error 8 error LNK2019: símbolo externo _inflate_fast sin resolver al que se hace referencia en la función _inflate@8 C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(inflate.obj) miniunz
Error 3 error LNK2019: símbolo externo _inflate_fast sin resolver al que se hace referencia en la función _inflate@8 C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(inflate.obj) testzlibdll
Error 6 error LNK2019: símbolo externo _longest_match sin resolver al que se hace referencia en la función _fill_window C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(deflate.obj) minizip
Error 5 error LNK2019: símbolo externo _match_init sin resolver al que se hace referencia en la función _lm_init C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(deflate.obj) minizip
Error 2 error LNK2019: símbolo externo _longest_match sin resolver al que se hace referencia en la función _fill_window C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(deflate.obj) testzlibdll
Error 1 error LNK2019: símbolo externo _match_init sin resolver al que se hace referencia en la función _lm_init C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\zlibwapi.lib(deflate.obj) testzlibdll
Error 4 error LNK1120: 3 externos sin resolver C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\x86\TestZlibDllDebug\testzlibdll.exe 1 1 testzlibdll
Error 7 error LNK1120: 2 externos sin resolver C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\x86\MiniZipDebug\minizip.exe 1 1 minizip
Error 9 error LNK1120: 1 externos sin resolver C:\Users\Usuario\Desktop\zlib-1.2.8\contrib\vstudio\vc11\x86\MiniUnzipDebug\miniunz.exe 1 1 miniunz
Al final mejor pongo todos, he comprobado que en todos los proyectos estuviera la librería "zlibwapi.lib", y si que lo estaba en el directorio donde se compila no en el que sale el error "x86\ZlibDllDebug", en ese directorio está "zlibwapi.lib", y es donde apuntan todos los proyectos que dicen que no la tienen. ???? He probado a mover mover la libreria a los directorios donde sale el error que no la encuentra, pero seguia saliendo el error. Es por eso que no entiendo porque me sale error de "simbolo externo" para una librería que si tiene incluida.A ver si me podeis ayudar, un saludo y gracias. Más cosas, me pregunto si necesito incluir algo más como directorios de cabeceras etc (como se hace siempre que se añade una librería... voy a probar pero creo que no es necesario y que no corregirá el error). .. Lo hice y sigue dando fallos, en librerías de inclusión adicionales no tenía nada, pero tampoco lo veía necesario ya que a la hora de incluirla ponía el directorio completo, y aún poniendolo da error, sigo probando.. No hay manera, he probado a compilar un solo proyecto de los que daba error, y le he metido directorios de inclusión adicionales (las cabeceras), le he metido en directorio de librerías x86\ZlibDllDebug, y en librerías he puesto en el linker de entrada zlibwapi.lib, pero da los errores de siempre al generar, en este proyecto son 3 externos sin resolver el error que da a pesar de hacer todo eso, esos externos ya los puse anteriormente y guardan relacion con el proyecto "testzlibdll", cambiando todo eso, y el proyecto sigue dando los errores. Ayuda pls. Bueno bueno, quizás sea un bug: Parece que hay que remover ZLIB_WINAPI (algo que al removerlo de primeras daba más errores), pero hay que manipular unos arhcivos.. vamos a probar.. http://www.tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall/He modificado lo del fallo al leer la versión, como ponía, pero al corregir una directiva de preprocesador como pone me da error, y luego hay que eliminar las ZLIB_WINAPI, pero ¿porque este error?: #if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API))) #if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY_DESKTOP_APP, WINAPI_PARTITION_APP) //#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #define IOWIN32_USING_WINRT_API 1 #endif #endif
Elimino la linea que esta como comentario, y pongo la que dicen que hay que poner en el tuto, y me sale: 27 IntelliSense: no se permite una llamada a función en una expresión constante c:\Users\Usuario\Desktop\zlib-1.2.8\contrib\minizip\iowin32.c 30 5 zlibvc ¿Como puedo solucionarlo?, de todas maneras creo que esos "bugs" no tienen que ver con que no se compile el proyecto..., el problema está en que no linkea correctamente zlibwapi.lib, pero no entiendo si he comprobado mil veces que está bien linkeada PFF. Va chicos one hand
|
|
|
59
|
Programación / Programación C/C++ / Fallo al enviar email a servidor
|
en: 19 Noviembre 2015, 11:22 am
|
Buenas, encontré un código sobre como mandar emails entre varios, y este parecía el mejor, a pesar de que daba bastantes fallos al compilar conseguí arreglarlo y ya compila, le tengo que meter el servidor smtp (de hotmail, gmail etc) que lo tengo bien, luego la cuenta de ese servidor a la que vas a enviar el archivo (en caso de hotmail, micuenta@hotmail.com), y luego la cuenta que manda el archivo que ahí es donde tengo el problema, os dejo el código a ver si me podéis ayudar, porque me dice que lo ha mandado correctamente, pero nada llega al correo, el problema está en el correo que manda el mensaje no se que poner, he probado con mi isp pero tampoco. #include <iostream> #include <string> #include <fstream> #include <winsock2.h> #define CRLF "\r\n" #pragma comment(lib, "ws2_32.lib") using namespace std; void ShowUsage(void); void Check(int iStatus, char *szFunction); void ShowUsage(void) { cout << "Usage: SENDMAIL mailserv to_addr from_addr messagefile" << endl << "Example: SENDMAIL smtp.myisp.com rcvr@elsewhere.com my_id@mydomain.com message.txt" << endl; exit(1); } // Basic error checking for send() and recv() functions void Check(int iStatus, char *szFunction) { if ((iStatus != SOCKET_ERROR) && (iStatus)) return; cerr << "Error during call to " << szFunction << ": " << iStatus << " - " << GetLastError() << endl; } int main() { int iProtocolPort = 0; char szSmtpServerName[64] = ""; char szToAddr[64] = ""; char szFromAddr[64] = ""; char szBuffer[4096] = ""; char szLine[255] = ""; char szMsgLine[255] = ""; SOCKET hServer; WSADATA WSData; LPHOSTENT lpHostEntry; LPSERVENT lpServEntry; SOCKADDR_IN SockAddr; // Check for four command-line args //ShowUsage(); // Load command-line args strcpy(szSmtpServerName, "smtp.live.com");//smtp de hotmail strcpy(szToAddr, "mirealemail@hotmail.com");//mi email real de hotmail strcpy(szFromAddr, "micasa@noseque.com");//mi direcion ip?dominio?isp? que poner aqui // Create input stream for reading email message file //ifstream MsgFile(argv[4]); // Attempt to intialize WinSock (1.1 or later) if (WSAStartup(MAKEWORD(1, 1), &WSData)) { cout << "Cannot find Winsock v" << 1 << "." << 1 << " or later!" << endl; return 1; } // Lookup email server's IP address. lpHostEntry = (hostent*)gethostbyname(szSmtpServerName); if (!lpHostEntry) { cout << "Cannot find SMTP mail server " << szSmtpServerName << endl; return 1; } // Create a TCP/IP socket, no specific protocol hServer = socket(PF_INET, SOCK_STREAM, 0); if (hServer == INVALID_SOCKET) { cout << "Cannot open mail server socket" << endl; return 1; } // Get the mail service port lpServEntry = (servent*)getservbyname("mail", 0); // Use the SMTP default port if no other port is specified if (!lpServEntry) iProtocolPort = htons(IPPORT_SMTP); else iProtocolPort = lpServEntry->s_port; // Setup a Socket Address structure SockAddr.sin_family = AF_INET; SockAddr.sin_port = iProtocolPort; SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // Connect the Socket if (connect(hServer, (PSOCKADDR)&SockAddr, sizeof(SockAddr))) { cout << "Error connecting to Server socket" << endl; return 1; } // Receive initial response from SMTP server Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() Reply"); // Send HELO server.com sprintf(szMsgLine, "HELO %s%s", szSmtpServerName, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() HELO"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() HELO"); // Send MAIL FROM: <sender@mydomain.com> sprintf(szMsgLine, "MAIL FROM:<%s>%s", szFromAddr, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() MAIL FROM"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() MAIL FROM"); // Send RCPT TO: <receiver@domain.com> sprintf(szMsgLine, "RCPT TO:<%s>%s", szToAddr, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() RCPT TO"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() RCPT TO"); // Send DATA sprintf(szMsgLine, "DATA%s", CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() DATA"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() DATA"); sprintf(szMsgLine, "%s%s", "HOLA PROBANDO A ENVIAR UN EMAIL", CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() message-line"); // Send blank line and a period sprintf(szMsgLine, "%s.%s", CRLF, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() end-message"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() end-message"); // Send QUIT sprintf(szMsgLine, "QUIT%s", CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() QUIT"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() QUIT"); // Report message has been sent cout << "Sent " << "ARCHIVO" << " as email message to " << szToAddr << endl; // Close server socket and prepare to exit. closesocket(hServer); WSACleanup(); return 0; }
Saludos y gracias. Edito: Bueno bueno, tras mucho leer. Parece que todo indica a que tengamos que loguearnos en una cuenta conocida que tengamos en un servidor smtp, y desde allí mandar un email a la cuenta que queramos dentro o fuera del dominio. Esto sabía que se podía hacer, pero es lo último a lo que quería llegar, porque imaginaros una app que manda emails con notificaciones, necesitaría contener la cuenta que va a mandar el mensaje en su interior y la podrían extraer con ingeniería inversa y acceder al usuario y contraseña del correo que usa la app para mandar los emails. Yo estoy intentando buscar otra forma de mandarlo, a través de nuestra ip y nuestro servidor de isp o algo así, o levantar nuestro propio servidor smtp y mandar mensajes con nuestra isp como dominio y nuestra ip como usuario, no sé, desconozco el tema, estoy buscando ideas. ¿Alguna alternativa a que tenga que loguearme en un server smtp(gmail, hotmail...), y mandarlo desde el tras loguearme?, estaría bien por muchos motivos. Saludos. Edito: De hecho entonces no entiendo este código que parecía funcionar cuando lo busqué, pues aquí no introduce la contraseña, no se loguea en la cuenta para mandar el email, aunque tampoco debería hacerlo si le estamos diciendo mande a un destinatario, y si nosotros estamos usando nuestro dominio como origen del mensaje. Creo que el protocolo también falla, de el ejemplo, ¿no?. ¿Pero entonces necesito estrictamente autentificarme en otro correo ya conodico y enviarlo desde ahí o no?.
|
|
|
60
|
Comunicaciones / Redes / Seguridad red P2P y servidores SSL
|
en: 16 Noviembre 2015, 12:38 pm
|
Buenos dias, estoy tratando de montar una red P2P anónima y segura en C++. Que se conecte a un tracker y de ahí cargue un listado de clientes que estén usando la red y trate de conectarse a ellos mandandoles un mensaje hello...
El tracker les pasaría entre 10 y 15 nodos a cada uno que haga una petición buscando nodos, en función de la cercanía de estos.
Luego, tenemos que levantar un servidor en cada cliente nodo, que escuche peticiones ssl seguras. Una pregunta es ¿Para levantar un servidor hace falta hacer NAT con el router no?. Es decir, si yo tengo 2 nodos, uno tiene levantado un servidor y trato de conectarme usando su ip y su puerto de escucha, no funcionaría si no configuro previamente el router no?. ¿Qué alternativa se puede hacer?.
Más, yo como dueño de la red debería tener una llave maestra para acceder a ella y que nadie más pueda hacerlo, aquí entra la seguridad de la red, muy importante. A ver.. una vez tengo el tracker tenemos los nodos, usamos un protocolo para que se conecten los nodos entre si, y luego habrá que usar otro protocolo que si lo identifican los nodos saben que es el del administrador y entonces ofrecen más servicios como instalacion etc, lo que sea vaya.
Esa sería un poco la idea, también estaría bien que cada nodo se conecte a otro nodo a través de 3 o 4 nodos intermediarios cono en TOR, estaría bien escuchar más ideas, sobre todo de seguridad para esta red.
Un saludo.
PD: que alguien lo mueva a seguridad que se me olvido, y si alguien se anima me puede mandar MP y podemos crear un git donde subir el code etc.
Saludos.
|
|
|
|
|
|
|