Авторские статьи Пишем быстро простой бэкдор на основе idHTTPServer

Discussion in 'Статьи' started by begin_end, 2 Apr 2007.

  1. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    636
    Reputations:
    476
    Целью данной статьи было ещё раз показать возможности idHTPPServer на практике, а также привести пример небольшой утилиты для удалённого администрирования с наиболее основными, характерными для такого рода программ, функциями. Всё предлагается с готовым примером приложения и прокомментированными исходными кодами. Скачать можно здесь.

    Статья рассчитана на читателей, уже умеющих создавать на Дельфи приложения средней сложности, и освоивших работу с компонентами INDY, а особенно idHTTPServer в Дельфи, и прочитавших предыдущую статью «Простой веб-сервер на Дельфи».

    ПО «RMUtilite» должно обладать следующими возможностями: работа без особого клиента – через http, авторизованный вход, возможность просмотра снимка экрана, возможность закрытия процессов, возможность создать бат-файл или выполнить команду, возможность создавать произвольно текстовые файлы (напр. для правки реестра, запуская их через бат), возможность скачки любого файла, перезагрузка компьютера, завершение своей работы.

    Определимся с путём выполнения работы. Можно создать заданное приложение без участия формы, а следовательно с куда меньшим размером файла. Но это приведёт к увеличению исходного кода приложения, что естественно позволяет нам судить о немалом времени создания приложения. Т.к. мы будем создавать его «на лету», то примем идею с формой. Итак, начнём тогда с этого – с формы. Положим на неё, уже нам известный idHTTPServer. Укажем в нём следующее: Active -> true; AutoStartSessions -> true; DefaultPort -> 7890. От него нам понадобится событие IdHTTPServer1CommandGet. Ещё положим Timer1 с Interval -> 777. От таймера нужно будет событие OnTimer. У формы укажем: все BorderIcons -> false; Caption – как понравиться; Top,Left -> 5555 к примеру. На этом оформление приложения фактически завершено.

    Теперь рассмотрим, что необходимо нам для обеспечения вышеописанных возможностей.

    Работа через http. Обеспечиваем работой с событием IdHTTPServer1CommandGet. По нему предоставляется html-код на разные страницы управления с оформленными полями, кнопками и прочим по необходимости. Подробнее описано в статье «Простой веб-сервер на Дельфи».

    Авторизованный вход. Осуществляется средствами idHTTPServer (procedure AuthFailed), также см. статью про веб-сервер.

    Возможность просмотра снимка экрана. Это осуществимо (см. исходный код) посредством функции function CSR(): TBitmap – получающей снимок экрана, далее function JPEG_C(input:TBitmap):TJPEGImage – перевод с компрессией в jpg и затем if (ARequestInfo.Document='/jpg.jpg') then отдача этого изображения.

    Возможность закрытия процессов. Смотрим функции function ListProcesses():string; (возвращает список процессов) и function KillTask(ExeFileName: string): integer; (завершает выбранный процесс).

    Возможность создать bat-файл или выполнить комманду. Создаём простой текстовик во временной директории с именем файла от function batfilename:string. Но главное – этот файл не просто запустить, а получить при этом результат его работы. Это поможет сделать функция его запуска: function Dos2Win(CmdLine:String):string. А для корректного вывода в html понадобится функция DisableHtmlTags(htmltagsstr:string):string.

    Возможность создавать произвольно текстовые файлы. Просто создаём текстовый файл с указанным текстом в указанном месте.

    Возможность скачки любого файла. Прямо по событию Id HTTPServer1 CommandGet отправляем заданный файл в потоке AResponseInfo . ContentStream := TFileStream . Create (…).

    Перезагрузка компьютера. Вынесено в отдельный модуль, вызов осуществляется как unit2.ForceRebootNT.

    Завершение своей работы. Реализация, как и в статье про веб-браузер – через Application.Terminate при проверке переменной по таймеру.

    Итог. Или что мы получили в этом приложении (веб-структура):

    [​IMG]

    Таким образом, на создание ПО потребовалось чуть более часа, с учётом того, что не было предварительной подготовки к этому, кроме как изучения создания веб-сервера на основе idHTTPServer, т.е. все нужные функции искались или создавались в процессе разработки. Уменьшить размер программы можно с помощью упаковщика UPX. Исправить пароль по умолчанию, равный apassword для пользователя admin можно изменив ресторатором в скомпилированной программе ресурс String №4072, строку 65147 на своё значение. При самостоятельной компиляции приложения – описано в исходных кодах.

    Завершение.
    При работе над ПО «RMUtilite» использовалась среда разработки Дельфи 7.0. Для придания «RMUtilite» завершённого вида использовался редактор ресурсов Restorator 3.51, упаковщик исполняемых файлов UPX 1.95. Весь код данного ПО, кроме автокода модулей Дельфи и некоторых функций был написан автором. Функции, код которых был взят из сторонних источников следующие: function Dos2Win(CmdLine:String):string; function ListProcesses():string; function KillTask(ExeFileName: string): integer.

    Данная статья и ПО были созданы в учебных целях, специально для forum.antichat.ru. ПО, несмотря на ограниченность его применения ввиду особенностей выполнения, вполне может быть применено практически. Но автор за любое применение данного ПО ответственности не несёт. Статью и исходные коды можно использовать абсолютно свободно, не забывая лишь про автора, ссылаясь на первоисточник. Критика желательна и ожидаема.
     
    _________________________
    9 people like this.
  2. darckmilord

    darckmilord Elder - Старейшина

    Joined:
    8 Feb 2007
    Messages:
    50
    Likes Received:
    14
    Reputations:
    0
    Подчерпнул для себя немного нового, спасиб за статью, такое в реале редкость, все проще чем во всей глобалке юзать банчить подобное!!!
    Заодно свой улучшу)))

    ----------------------------------------------------------------------
    не все то золото что блестит, золото то что не блестит а просветляет мысли
     
    1 person likes this.
  3. ilya.899

    ilya.899 New Member

    Joined:
    9 Sep 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Отличная статья!!! Очень помогла! А как возможно реализовать на этой основе бэкдор для работы в интернете если нет статического ip где установлен бэкдор?
     
  4. Ildar

    Ildar New Member

    Joined:
    15 Apr 2010
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Присоединяюсь ко всему вышесказанному, действительно очень актуальная на мой взгляд статья..
    А вот на счет этого я бы сам не прочь поподробней узнать
     
  5. Kuteke

    Kuteke Banned

    Joined:
    26 Jun 2010
    Messages:
    179
    Likes Received:
    26
    Reputations:
    6
    >А вот на счет этого я бы сам не прочь поподробней узнать
    Так в нете манов много:
    Code:
    Узнать IP
    uses
      WinSock;
    
    function GetLocalIP: String;
    const WSVer = $101;
    var
      wsaData: TWSAData;
      P: PHostEnt;
      Buf: array [0..127] of Char;
    begin
      Result := '';
      if WSAStartup(WSVer, wsaData) = 0 then begin
        if GetHostName(@Buf, 128) = 0 then begin
          P := GetHostByName(@Buf);
          if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
        end;
        WSACleanup;
      end;
    end;
    
    Code:
    Отправить e-mail
    uses Outlook_TLB;
     var outlook : _application;
     Procedure Init;begin outlook := Coapplication_.Create;
     end;
     procedure SendEmail;begin with Outlook.CreateItem(olMailItem) as mailitem do 
     begin 
     To_ := '[email protected]'; 
     cc:='[email protected]'; 
     Subject := 'This is subject line'; Attachments.Add('FileName',1,1,'This is attachment'); 
     Body :='This is email body'; 
     Send; 
     end;
     end;
    
    Code:
    Есть код по удобней(только Indy нужен)
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    
    idsmtp1.Host := 'smtp.mail.ru';
    idsmtp1.Port :=  25;
    idsmtp1.Username := 'username';
    idsmtp1.Password := '123456';
    idmessage1.Body.Text := 'Tut telo';
    idmessage1.From.Text := '[email protected]';
    idmessage1.Recipients.EMailAddresses := '[email protected]';
    idmessage1.Subject:= 'Tut zagolovok';
    
    idsmtp1.Connect;
    if idsmtp1.Connected = true then
    
    idsmtp1.Send(idmessage1);
    idsmtp1.Disconnect;
    
    end;
    
    Вообщем гугли..


    P.S. Старую тему они подняли, я и ответил. Сорри.
     
  6. PIN

    PIN Member

    Joined:
    25 Jul 2010
    Messages:
    2
    Likes Received:
    7
    Reputations:
    1
    нет вариантов под С++ ? дайте пруф пожалуйста.
     
  7. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    сделать вебадминку написать скрипт на пхп для управлениz бекдорами не?
     
    #7 justonline, 17 Sep 2011
    Last edited: 17 Sep 2011
  8. Флудик

    Флудик New Member

    Joined:
    15 Oct 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Отличный пример, статейка +5 только вот вопросик почему в интернет сети не работает пример
     
  9. tght

    tght Member

    Joined:
    24 Jun 2010
    Messages:
    134
    Likes Received:
    10
    Reputations:
    0
    Можно исходник перезалить, а то ссылка не работает.
     
  10. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    537
    Likes Received:
    200
    Reputations:
    293
    begin_end, было бы проще создавать бат файл с любой командой и потом его выполнять, так можно выполнить как одну команду, так и целый сценарий, ограничений бы не осталось в принципе, так как можно через бат использовать все возможности cmd...
    На vb 6 (да я его еще помню) это бы выглядело в две строки:
    shell параметры (путь к батнику) с выводом в файл, затем, парс этого файла...
    А клиент-сервер реализуется на инет контроле или винсоке просто со свистом...
    P.S. Вот я некромант :))))