Tema destacado: Grupo de acebook de elhacker.net
Autor
|
Tema: Shell Remota en C (Leído 1,524 veces)
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Buenas, estoi intentando hacer una Shell Remota en C ya que nunca hice una en este lenguaje y me pica la curiosidad  el caso es que no me sale... El código que tengo es este: #include <windows.h> #include <stdlib.h> #include <stdio.h> int main() { PHANDLE leer; PHANDLE escribir; SECURITY_ATTRIBUTES sa; STARTUPINFO si; PROCESS_INFORMATION pi; DWORD bytes; CreatePipe(leer,escribir,&sa,0); si.cb = 68; si.dwFlags = 257; si.hStdError = escribir; si.hStdOutput = escribir; CreateProcessA(0,"cmd.exe /c ping 127.0.0.1", &sa, &sa, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi); Sleep(100); CloseHandle(escribir); char buffer[1024]; char total[1024]; int ret = ReadFile(leer,buffer,250,&bytes,0); lstrcat(total,buffer); while(ret != 0) { ret = ReadFile(leer,buffer,250,&bytes,0); lstrcat(total,buffer); } MessageBoxA(0,total,0,0); system("PAUSE"); return 0; } Alguien sabe que hago mal? salu2!
|
|
|
|
|
En línea
|
|
|
|
|
Karcrack
|
Esta es la buen forma de hacerlo: http://goodfellas.shellcode.com.ar/docz/asm/WritingSmallShellcode.pdf 
|
|
|
|
|
En línea
|
|
|
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Muchas gracias Karcrack sin duda lo leeré pero tambien me gustaria saber que ago mal en el código que postee.
salu2!
|
|
|
|
|
En línea
|
|
|
|
|
[Zero]
|
¿No tendrías que crear el pipe luego de iniciar la shell? Estas llamando a CreatePipe con dos handles nulos (o ni eso, que no están inicializados a 0), al igual que tampoco inicializaste a 0 los miembros de PROCESS_INFORMATION y STARTUPINFO (salvo cb, que sí lo pusiste bien).
Saludos
|
|
|
|
« Última modificación: 27 Marzo 2011, 17:19 por [Zero] »
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.” Nietzsche
|
|
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Muchas gracias a los dos, ya lo consegui hacer... el caso es que me quedo así: #include <windows.h> #include <stdlib.h> #include <stdio.h> int main() { SECURITY_ATTRIBUTES sa; STARTUPINFO si; PROCESS_INFORMATION pi; void * leer; void * escribir; ZeroMemory(&sa,sizeof(&sa)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; CreatePipe(&leer,&escribir,&sa,0); GetStartupInfoA(&si); si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; si.hStdOutput = escribir; si.hStdError = escribir; si.hStdInput = leer; CreateProcessA(0,"c:\\windows\\system32\\cmd.exe /c dir",0,0,TRUE,0,0,0,&si,&pi); Sleep(200); CloseHandle(escribir); char buffer[1024]; DWORD bleidos; ReadFile(leer,buffer,1024,&bleidos,0); MessageBoxA(0,buffer,0,0); system("PAUSE"); return 0; } No es una "MegaShell" pero su "apaño" hace  salu2!
|
|
|
|
|
En línea
|
|
|
|
|
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Te refieres a esperar a que se cree el proceso usando WaitForSingleObject, no?
salu2!
|
|
|
|
|
En línea
|
|
|
|
|
Karcrack
|
Hasta que el proceso no se crea no continua la ejecución de tu programa 
|
|
|
|
|
En línea
|
|
|
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Hasta que el proceso no se crea no continua la ejecución de tu programa  No se me ocurre como hacerlo... de una forma rápida, alguna pista? salu2!
|
|
|
|
|
En línea
|
|
|
|
|
Karcrack
|
No hay que hacer nada  Con hacer CreateProces() sobra... hasta que el proceso no se ha creado no vuelve la ejecución a tu programa...
|
|
|
|
|
En línea
|
|
|
|
mDrinky
Desconectado
Mensajes: 277
Miauuuuuuuuuuuuu dice el gato XD
|
Ah, vale...  thanks...
|
|
|
|
|
En línea
|
|
|
|
|
|