Jump to content
¯\_( ツ)_/¯
  • Sponsored Ad
  • TAD GROUP are currently hiring penetration testers. Please read the topic in Career Central subforum.

Recommended Posts

Това е тема в която ще пишем за това как се прави ... нещо конкретно.

Например "Kак да направим многопоточен ping" или "Как да направим собствен снифър".

Защо е нужно това?

Много често в практиката ни се налага да решаваме казуси, които изглеждат елементарни. Истината е, че често това е подвеждащо. Много често не може да намерим отговор в Google или в специализираните ресурси.

Това е тема за практиката, но практика, която ползва солидни теоретични познания.

Тук ще търсим отговори на въпроси, които не се задават в институтите и не се изучават в училищата. Тук ще се налага да обясняваме всичко, което пишем и най-вече да прилагаме примери, които да са работещи.

Всичко, което ще пишем в тази тема ще бъде подлагано на проверка.

Какво е добре да знаете от самото начало?

Преди всичко, колкото и да не се харесва на мнозина ще се наложи да се работи с Windows, като операционна система. Това важи дори (най-вече) в случаите, когато ще се налага да пишем изпълним код за Linux (за справка MSDN).

Какво налага това?

Преди всичко в момента има две развити системи за създаване на крайни приложения (не за писане на скриптове, а именно за крайни приложения), както следва:

- Visual Studio (Microsoft) - Език за програмиране C#, VB; Операционни системи: Windows, Android, iOS. 

- RAD Studio (Embarcadero) - Език за програмиране Delphi, C++, Assembler; Операционни системи: Windows, Android, iOS, Linux.

И в двата случая може да създавате крайни приложения, които да продавате в Windows Store, Google Play, cNet, Softpedia или в други масово достъпни ресурси.

И в двата случая може да създавате цялостни проекти, да генерирате dll, ActiveX или визуални компоненти, както и да добавяте скриптове на Java Script, VB Script, PHP, Python и др.. Също така можете да създавате и HTML документи и CSS.

В RAD Студио обаче мoже да ползвате FireDac и ЕМС и да работите със СУБД. Това включва генериране на конекции (conection), таблици, отчети, тригери и т.н.. Тук може да работите със всички структурирани бази данни в т.ч. Oracle, DB2, IB, SubBase, My SQL, Firebird, MS SQL и др.. Такава възможност липсва във Visual Studio. Друго предимство на RAD Studio е възможността за работа с неструктурирани бази данни и автоматичното генериране на базови REST сървъри. 

Друго предимство на RAD студио е интеграцията с Visual PHP и FireMonkey. Най-голямата сила на RAD студио си остава възможността да разработвате не само собствени контроли, но и собствени компоненти и не само.

Сега за езиците за програмиране ...

Кoгато ползвате Delphi ще може да работите с WideString, Ansi Sring, pChar, pAnsiChar, pWideChar, LongString и много други разновидности на символните низове. Това в C# и C++ не винаги е възможно да се направи. В Delphi можете да пишете директно на assembler. В C# и C++ това няма как да се случи. В Delphi  можете да работите с множества (това е много важно, когато говорим за сигурност в промишлените системи). В C# и C++ това може да правите само ако сами си напишете нужните библиотеки.  

Много често, когато се визира internet разглежданията се свеждат до потоци и пакетна обработка. Това не винаги отговаря на истината.

Никога не бива да забравяме, че internet е обвързана с модулация, което ни връща към ... модемите. А модемите това са телефоните.

Лично аз ще се придържам към следната схема в своите изложения:

- internet - Синхронни и асинхронни канали за връзка;

- мрежови комуникации - СКС и безпроводни (ефирни);

- операционна система краен потребител - Windows, Android.

- сървърна операционна система - Windows, Linux;

- средна на разработка - RAD Studio 10.2 (Tokio), Windows 10 Profesional;

- език за програмиране - Delphi, Assembler, C++ (в тази последователност);

- скриптови езици - Java Script, PHP;

- web-документи - HTML (HTML5), CSS (CSS3).

Всички примери (в т.ч. изходните кодове) ще бъдат достъпни.

Това, което обаче е нужно да знаете, че всеки един ще бъде надлежно регистриран в eCO ( https://www.copyright.gov/ )  към библиотеката на Конгреса на САЩ. 

Това означава, че кодовете ще са безплатни, но ... юридически са под защитата на EULA. 

Изпълнимите кодове са безплатни (това важи само за примерите тук).

Тук ще се пишат дълги постове (това го казвам от сега). материята е тежка (най-вече темата за POP3, SMTP, FTP, HTTP и др.)  и изисква сериозни обяснения.

Пак повтарям, че тук ще се пише неща, които няма да научите в нито един от скъпо платените курсове по програмиране и в нито един университет.

Mного от нещата няма да намерите в GitHub и в Google.

 

 

 

  • Like 2

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

ДА КАK ПОЛУЧА IP АДРЕСА, АКО ЗНАМ ИМЕТО НА САЙТА?

Това е много често задаван въпрос. Рядко ще намерите решение, което да работи абсолютно коректно.

Как изглежда задачата?

Да кажем имам сайт с адрес: mysite.com. Искам да видя, IP адреса на сървъра, където сайта е разположен.

Важно е да отбележим, че тук ние не се интересуваме дали се ползва http или https протокол, защото работим на чисто TCP/IP.

И така, как се прави това?

 

uses 

     WinSock,

.... 

 

{------------------------------------------------------------------------------}
{                                                                                                                                             }
{                                                 GET DOMAIN INFORMATION                                         }
{                                                                                                                                             }
{------------------------------------------------------------------------------}

// 1. GET IP ADDRESS
function GetIP (Host: String): String;

type
  AddressesTable = Array [0..10] of pInAddr;
  AddressParams = ^AddressesTable;

var
  HostEntry: pHostEnt;
  AddressInfo: AddressParams;
  Buffer: Array [0..63] of Char;
  I: Integer;
  InitData : TWSADATA;

begin

    WSAStartup($101, InitData);
    Result:= '0.0.0.0';
    ZeroMemory (@Buffer, SizeOf(Buffer));
    StrpCopy (Buffer, Host);

    HostEntry:= GetHostByName( pAnsiChar (AnsiString(Host) ) );

    if HostEntry = nil then
      begin
        WSACleanup;
        Exit;  
      end;

    try


      AddressInfo:= AddressParams(HostEntry^.h_addr_list);
      I:= 0;

      while AddressInfo^ <> nil do
        begin
          Result:= StrPas(inet_ntoa(AddressInfo^^));
          Inc(I);
        end;

    finally
      WSACleanup;
    end;

end;
 

Това е правилния подход за получаване на IPv4 адреса. Обърнете внимание на  WinSock  и  pAnsiChar (AnsiString(Host) ) 

Детайлното описание на тази функция ще проведем утре.

 

Забележка: Когато говорим за хакинг и компютърна сигурност, това е една от т.н. "базови функции", при анализ на мрежови комуникации ползващи TCP/IP протокол. 

 

  • Thanks 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

КАКВО Е pHostEnt ?

Нека започнем с най-важното. Когато работите с някаква операционна система вие трябва много добре да я познавате.

Много често съм се сблъсквал с напълно необосновани твърдения относно Windos. Най-често те се дават от лица, които не познават операционната система или я познават на ниво потребител. Това, което е важно да се знае за Windows е, че това е операционна система, която е създадена от инженери за инженерни нужди.

Повечето "пробиви" в Windows (обективно погледнато са в пъти по-малко отколкото в други ОС, но това е тема за други разглеждания) се дължат най-вече на неправилно администриране и свободата, с която се ползва крайния потребител. 

Това, което обаче трябва да се признае като безспорно предимство е, че Windows е наличието на перфектна документация и изключителна поддръжка.

Ако сте разработчик, вие ползвате почти всичко напълно безплатно. Това означава и включване в редица програми и подкрепа за всеки един, ако е решил да работи честно.

След тези кратки разяснения се връщаме на въпроса: КАКВО Е pHostEnt?

ВАЖНО:

Всяка една програма, която пишем на практика осъществява комуникация с апаратната част и операционната система, която ползваме.

Това взаимодействие се реализира на език, който е разбираем за процесора, системните контролери, интерфейсите BIOS, DOS и ОС.

Програмата е общуване с машините (или комуникационните средства) на език, който те разбират.

За да може това общуване да е пълноценно ние трябва да научим добре този език. Както всеки друг език и този се учи с практика.

Tрябва да знаете, че това, което ще обсъдим днес има повече теоретична отколкото чисто практическа стойност.
Проблемът е, че ако материята не бъде усвоена ние няма да можем да направим нищо.

Все още не сме обсъждали какво е winsock и как се ползва. Нямаме представа защо е толкова важно да можем да работим със сокети и т.н..
Но се налага да започнем от някъде.

Както се вижда от горния пост, нашата задача е да получим IP адреса на хоста по зададено име.

КОГАТО АДРЕСЪТ Е СТАТИЧЕН, ТОВА НЕ Е ОТ КОЙ ЗНАЕ КАКВО ЗНАЧЕНИЕ. 
ЗА СЪЖАЛЕНИЕ МНОГО ОТ СЪРВЪРИТЕ ПОЛЗВАТ ДИНАМИЧНИ АДРЕСИ (НАЙ-ДОБРЕ ТОВА МОЖЕ ДА СЕ ВИДИ ПРИ АНАЛИЗ НА GOOGLE). 
В ТОЗИ СЛУЧАЙ Е ДОБРЕ ДА СЕ ИЗПОЛЗВАТ Winsock API ФУНКЦИИ ЗА ТЯХНОТО ПРАВИЛНО ОПРЕДЕЛЯНЕ.

В Winsock API съществуват две функции:

gethostbyname (в Delphi може да я изпишете и като GetHostByName) - връща IP адрес;

Може да се ползва ето така:

C++

struct hostent FAR *gethostbyname(const char FAR *name );


gethostbyaddr (в Delphi може да я изпишете и като GetHostByAddr) - връща ни името на машината (на хоста).

Може да се ползва ето така:

C++

DWORD ip_address = inet_addr ("192.168.1.1");
   host_name = gethostbyaddr ((char* )&ip_address, 4, AF_INET);

 

Както виждате отново се сблъскваме с pHostEnt.

pHostEnt е структура на Windows, която има следният вид:

C++

typedef struct hostent {
  char FAR      *h_name;
  char FAR FAR **h_aliases;
  short          h_addrtype;
  short          h_length;
  char FAR FAR **h_addr_list;
} HOSTENT, *PHOSTENT, FAR *LPHOSTENT;

Искам да подчертая нещо важно. Прието е голяма част от документацията за Windows да е илюстрирана с кодове написани на C++ или C# (който е език с логиката на Delphi, но със синтаксис, обединяващ C и Basic).

Това е следствие от първоначалното развитие на операционните системи (нарича се "атавизъм").

Езикът за програмиране C (моля да не се бърка със C++, защото има съществени различия) е създаден от Керниган и Ричи като поддържащ език за ОС UNIX. Тъй като е добил популярност (в Станфорд и не само там са ползвали студенти за системни администратори, защото са липсвали кадри) е нормално да се търси подход, който да се разбира от повечето специалисти.

Езикът C++ е много близък като синтактична структура (обратен Полски запис и пр.) до C. Това го прави "четим". Ние ще следваме тази схема, но успоредно с това, че видим защо Delphi e по-ефективен при разработката на специализирани приложения.

И така да разгледаме всеки един от елементите на структурата phostent.

h_name - ТОВА Е ИМЕТО НА ХОСТА (МАШИНАТА, СЪРВЪРА) В МРЕЖАТА. И ако някъде срещнете термина Full Qualified Domain Name (FQDN) ще знаете за какво става дума.

 

h_aliases - ТОВА Е МАСИВ, СЪДЪРЖАЩ СПИСЪКА С АЛТЕРНАТИВНИ ИМЕНА. Мисля, че всеки знае какво е алтернативно име на домейн. За тези които не знаят ще обясня простичко: mainsite.com e алтернативно име на mainsite.net или mysite.com. Темата с алтернативните имена е доста интересна и ще бъде дискутирана на един по-късен етап.

ВАЖНО!

h_aliases ВИНАГИ ЗАВЪРШВА НА 0.

 

 h_addrtype - ТОВА Е ВИДЪТ НА ВЪВЕДЕНИЯ АДРЕС.

За TCP/IP това е AF_INET.  Важно е да се знае защото освен TCP/IP имаме и други протоколи, които ще обсъдим на един по-късен етап.

 

h_length - ДЪЛЖИНА НА ВЪВЕДЕНИЯ АДРЕС.

За TCP/IP V4 тя е 4 Byte (max. 1111.1111.1111.1111 - 4 Byte, записа е в двоичен код за да се добие представа как изглежда)

 

h_addr_list - МАСИВ С АДРЕСИ.

ВАЖНО!

Mасивът винаги завършва на 0. Това, което е от значение е, че това е масив със всички достъпни адреси, което може да бъде изключително полезно на един по-късен етап.

 

Обърнете внимание, че тук разгледахме само една малка част от една конкретно взета функция. 

Помислете си, колко неща, на които рядко обръщаме внимание научихме. 

Повече информация по темата може да намерите на адрес:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms738552(v=vs.85).aspx

 

Редактирано от Avatara
  • Thanks 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

А сега малко извън настоящите разглеждания ...

Във форума почти няма да намерите материали за операционни системи, извън Linux и отчасти Android.

Нека позапълним тази празнина, защото неизбежно ще се наложи да разглеждаме и друга много популярна OS.

И така ...

Mac OS X

Mac OS X - това е Darwin ядро, събрано с PowerPC.


Реално операционната система е UNIX, но с графичен интерфейс. 

АРХИТЕКТУРА НА Mac OS X

[ AQUA ]

CLASSIC - CARBON - COCOA - JAVA

QUARTZ - OPENGL - QUICKTIME

[ DARWIN ]

 

Кое какво е?

 

AQUA - потребителски интерфейс; 
CLASSIC - емулация на Mac OS 9. Да не се бърка с AQUA. Различно е. 
CARBON - модифициран Mac OS API. С негова помощ може да създавате native Mac OS X приложения.
COCOA - modificiran NexT API (ползва Objective C). Служи за създаване на native Mac OS X приложения.
JAVA - Език за програмиране (да не се бърка с Java Script. Различно е).

QUARTZ - OPENGL - QUICKTIME - Векторна и растерна графика. Драйвери и не само. 

QUICKTIME - Мултимедия
OPENGL - Open Graphics Library - Платформено независим интерфейс. Векторна графика. Ползва се в Linux, но тук е направо част от операционната система. 
QUARTZ - Core Graphics framework - Алтернатива на DirectX.

Към Classic, Carbon и Cocoa трябва да добавим и X11.

Програми за Mac OS може да пишете на следните езици:

Delphi - от RAD Studio 2X нагоре.
C (Carbon).
Objective C (Cocoa) - Включено е в Delphi, като допълнителен unit. 
Java.

Може да ползвате освен RAD Studio и Apple Developers Tool и CodeWarrior. Въпрос на избор.
 

За сега толкова, а останалото, когато заговорим за мултиплатформените решения.

  • Thanks 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

И преди да продължим напред (извинявам се, че всичко е малко разхвърляно, но ще ми е много трудно да обяснявам всичко в детайли), нека разгледаме две графики.

 

tcp.jpg

 

На първата графика в много достъпен вид е показано какво представлява TCP Header-ът (заглавната част на TCP).

Искам да обърна внимание на нещо много важно, което е възможно силно да подразни мнозина, но ... дали ни харесва или не истината трябва да се приеме такава каквато е.

TCP/IP протокола е наложен като такъв от Microsoft. Нe е измислен от Linux Fondation (така както там не са измислили PNG и не само).

Колкото и да не ни се иска ако не познаваме ОС Windows в детайли няма да вникнем в тънкостите на TCP/IP. 

Сървърите служат за да обслужват ПОВЕЧЕ ОТ ЕДИН ПОТРЕБИТЕЛИ. 

Потребителите отправят заявка към сървъра, а той отговаря. Звучи елементарно, но има много подводни камъни,  за които често се забравя.

Но нека да не избързваме и да видим как клиентът и сървърът комуникират по TCP.

 

 

 

 

 

tcp_anime.gif

Редактирано от Avatara

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

И преди да продължим напред (извинявам се, че всичко е малко разхвърляно, но ще ми е много трудно да обяснявам всичко в детайли), нека разгледаме две графики.

 

tcp.jpg

 

На първата графика в много достъпен вид е показано какво представлява TCP Header-ът (заглавната част на TCP).

Искам да обърна внимание на нещо много важно, което е възможно силно да подразни мнозина, но ... дали ни харесва или не истината трябва да се приеме такава каквато е.

TCP/IP протокола е наложен като такъв от Microsoft.

Нe е измислен от Linux Fondation (така както там не са измислили PNG и не само).

Колкото и да не ни се иска ако не познаваме ОС Windows в детайли няма да вникнем в тънкостите на TCP/IP. 

Сървърите служат за да обслужват ПОВЕЧЕ ОТ ЕДИН ПОТРЕБИТЕЛИ

Потребителите отправят заявка към сървъра, а той отговаря. Звучи елементарно, но има много подводни камъни,  за които често се забравя.

Но нека да не избързваме и да видим как клиентът и сървърът комуникират по TCP.

tcp_anime.gif

На това анимирано изображение (ако не виждате анимацията просто го отворете в нов прозорец) може да видите как става обменът между компютъра, който ползваме и сървъра. Показано е как се обменят пакети от данни.

Това, което е важно да запомним е, че опознаването между компютъра и сървъра се извършва само и единствено въз основа на IP адреса, когато работим на ниво TCP или UTP.

Всякакви неща от рода на mysite.com. http://mysite.com и https://mysite.com тук са абсолютно излишни.

При TCP не работим с DNS името. Работим само и единствено с IPv4 и с IPv6.

Това е причината да търсим начин да преобразуваме името на сайта в IP адрес.

Името на сайта е разбираемо за потребителя, но IP адресът е разбираем за устройствата, посредством които осъществяваме комуникация.

Ние работим с устройства. Това е първата основна максима, която трябва да усвоите.

Операционните системи са едно, но протоколите за обмен са нещо съвсем различно. На протоколът за обмен му дреме на ... цървула, какво ОС ползвате.

Операционната система трябва да може да поддържа UTP, TCP, FTP, POP3, SMTP и пр., а не TCP да може да поддържа Linux (примерно). 

ОПЕРАЦИОННИТЕ СИСТЕМИ СЕ СЪОБРАЗЯВАТ С ПРОТОКОЛИТЕ НА ОБМЕН, А НЕ ОБРАТНОТО.

Това важи с особена сила за тези ОС, които претендират да са сървърни.

Като начало се запознайте с този документ, който ще изучим в най-малки детайли.

https://tools.ietf.org/html/rfc793

И запомнете:

1. МОЖЕ ДА ИМАТЕ НАЙ-ДОБРЕ АДМИНИСТРИРАНИЯ СЪРВЪР, НО АКО КОМУНИКАЦИЯТА Е РАЗБИТА ОТ НЕГО НЯМА КОЙ ЗНАЕ КАКВА ПОЛЗА.

2. ТОВА, КОЕТО ТРЯБВА ДА СЕ КОНТРОЛИРА Е КАКВИ ПАКЕТИ ВЛИЗАТ И КАКВИ ИЗЛИЗАТ.

3. ЗА ДА КОНТРОЛИРАТЕ КАКВИ ПАКЕТИ ВЛИЗАТ И ИЗЛИЗАТ ТРЯБВА ДА НАБЛЮДАВАТЕ ПОРТОВЕТЕ (ВРАТИТЕ), ПРЕЗ КОИТО ТОВА СЕ СЛУЧВА.

4. ВСЯКА ВРАТА (ПОРТ) ИМА СВОЕ ПРЕДНАЗНАЧЕНИЕ. 

5. ИНТЕРФЕЙСИТЕ ПО КОИТО ТОВА СЕ ПРАВИ СА ПОВЕЧЕ ОТ ЕДИН.

 

Пример:

Port 80 и 8080 - HTTP - web-документи.

Port 110 - POP3 - електронна поща  (получаване).

Port 25 или 26 = SMTP - електронна поща (изпращане).

Port 43 - WhoIs - Много полезна информация, когато трябва да разберем кой, кой е.

Port 32 - FTP - обмен на файлове.

. . . 

  • Thanks 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

И ето, че дойде ред на наистина интересното ...

След като знаем, че има протокол, който се нарича TCP (Transmission Control Protocol ), ние ще се заемем да видим за какво могат да ни послужат всички онези много сложни неща, които разгледахме в предходната публикация.

Като начало нека видим ЗА КАКВО ТОЧНО СЛУЖИ TCP?

TCP Е ПРОТОКОЛ ЗА ОБМЕН НА ИНФОРМАЦИЯ.

ТОЗИ ПРОТОКОЛ УПРАВЛЯВА ПРЕНОСА НА ДАННИ В INTERNET.

Това е един от основните протоколи за пренос на данни, върху които е изграден internet.

МРЕЖИТЕ И ПОДМРЕЖИТЕ, КОИТО ПОЛЗВАТ TCP И IP (Internet Protocol - или протокол за обмен на данни между мрежите) СЕ НАРИЧАТ TCP/IP МРЕЖИ. 

Сега ще напиша нещо, което определено силно ще разгневи мнозина, но ... на практика е така.

TCP СЛУЖИ ЗА ДА ОПРЕДЕЛЯ КАК ЩЕ СЕ ИЗВЪРШВА  ОБМЕНА МЕЖДУ ОТДЕЛНО ВЗЕТИ УСТРОЙСТВА (МРЕЖОВИ КОНТРИОЛЕРИ, ХЪБОВЕ, СУИЧОВЕ, РУТЕРИ, СЪРВЪРИ И КАКВОТО СЕ СЕТИТЕ), А IP СЛУЖИ ЗА ДА ОПРЕДЕЛЯ ПРАВИЛАТА НА ОБМЕНА МЕЖДУ МРЕЖИТЕ.

Освен TCP имаме още един протокол, за който до момента не сме споменавали нищо. Той се нарича UDP (User Datagram Protocol). 
UDP е много бърз, но крайно ненадежден протокол. 
Защо е така?

Просто е. Нека разгледаме как работи TCP и как работи UDP.

UDP

1. Свързваме се и веднага започваме да предаваме данни.

TCP

1. Установяваме съединение.
2. Осъществяваме обмен на данни.
3. Прекъсваме съединението.

ТРИТЕ ПРОТОКОЛА TCP. UDP И IP ФОРМИРАТ ТОВА, КОЕТО СЕ НАРИЧА Internet Protocol Suite (IPS - ПАКЕТ ОТ ПРОТОКОЛИ, ИЗПОЛЗВАНИ В INTERNET)

UDP и TCP реално ползват IP протокола, като магистрала за да пренасят данни от точка А до точка B.

Ако трябва да го обясня може да си го представите така:

Пример:

Имате 20 торби цимент, които трябва да закарате от Сточна Гара до ке.Банишора.
Товарите торбите на малък камион (
това е TCP). Торбите са пакетите с данни. 
На шофьора предоставяме документ, че сме закупили цимента. С това той ще докаже, че не сме откраднали същият този цимент.
Шофьорът кара самосвалът по улиците (
улиците са IP протокола).
Когато достигне на адреса в кв.Банишора, шофьорът се уверява, че че е на правилното място и ни информира, че разтоварва торбите (
това е TCP протокол).
След като циментът е доставен на адреса, всеки си поема по пътя (з
акриваме сесията).

 

Тук някой по-нетърпелив ще каже: Стига с тези глупости. Давай по същество. Къде ни е далаверата?

Ще стигнем и до това, но нека сега се върнем в началото на темата.

Помните ли когато обсъждахме, колко важно е да знаем IP адресите? А помните ли, че след това обсъждахме, че е добре да знаем кой порт е отворен?

Защо е толкова важно всичко това?

Елементарно е - ВСЯКА МРЕЖА КОМУНИКИРА С ДРУГА МРЕЖА ПРЕЗ ШЛЮЗОВЕ (ВРАТИЧКИ).

Това важи дори в случаите, когато мрежата се състои от едно единствено устройство.

И сега внимавайте много добре, Помните ли какво написах, за това ... 

КОЕ Е ПЪРВИЧНОТО - ОПЕРАЦИОННАТА СИСТЕМА ИЛИ ТРАНСПОРТНИЯТ (МРЕЖОВИЯТ) ПРОТОКОЛ?

Какво ви помолих да запомните?

ПРОТОКОЛИТЕ СА ПО-ВАЖНИ ОТ ИЗПОЛЗВАНАТА ОПЕРАЦИОННА СИСТЕМА!

Всички операционни системи (UNIX, Linux, Windows, BDS и др.) ползват Internet Protocol Suite (IPS).

Направи ли ви впечатление, че не споменах и дума за Android и iOS? 

Каквото и да си говорим Android е модификация на Linux, а iOS си е UNIX, но за това вече писах.

Сега най-интересното.

НИКОГА НЕ СЕ ДОВЕРЯВАЙТЕ НА ТОВА, КОЕТО ПРЕДОСТАВЯТ КАТО ИНФОРМАЦИЯ WEB-БАЗИРАНИТЕ РЕСУРСИ!

Запомнете тази максима. 

ТОВА, КОЕТО ВИЖДА МАШИНАТА (РАБОТНАТА СТАНЦИЯ, УСТРОЙСТВОТО), КОЯТО ПОЛЗВАТЕ И ТОВА, КОЕТО ВИЖДА СЪРВЪРА, НА КОЙТО СЕ НАМИРА WEB-РЕСУРСА СА ДВЕ МНОГО РАЗЛИЧНИ НЕЩА!

За нас (нали искаме да разберем как работи "МРЕЖАТА") е важно КАКВО ВИЖДАМЕ НИЕ В НАСТОЯЩИЯ МОМЕНТ!

За тази цел, трябва да можем да правим две неща:

 

1. Да сканираме списък с IP адреси (понякога това се нарича сканиране в интервал).

 

AddressScaner.png.85f56862bb72e626bd72001d07a3d798.png

Сканиране на IP адреси

Какво ви прави впечатление в картинката?

Забелязахте ли, че IPv4 адресът 192.168.1.1 може да бъде представен и като 3.232.253.777?

Вгледайте се внимателно в стойността на TTL. Тя е 49. А помните ли какво писах за TTL и за какво се използва?

Нека разгледаме интервала от IP адреси.

В този пример, той е малък и е  в интервала от IPv4=192.168.1.1 до IPv4=192.168.1.5. Това са пет адреса от "вътрешна" мрежа.

Да, де (ще възкликне някой), ама аз искам да видя някой в internet. Там е къде, къде по-интересно.

Така е. Прави сте.

Но за целта ни трябва сървър с отворен порт 43.

Намираме такъв сървър и какво виждаме? 

IPLocation.png.32b6832766ea48a6b5baee8fc3e2fe54.png

 

Опааааа ... КРАСОТА!

Виждаме неща, които наистина си струва да се видят. Виждаме не само мрежата, но и локацията на сървъра.

И всичко това, САМО И ЕДИНСТВЕНО, КАТО ИЗПОЛЗВАХМЕ TCP ПРОТОКОЛА! 

А сега си спомнете, колко пъти тук в този форум е бил задаван въпросът: КАК ДА ОПРЕДЕЛЯ КЪДЕ СЕ НАМИРА ...

Сега разбирате ли, колко е важно да имаме добра теоретична подготовка?

Ако познаваме TCP ние ще можем ... С ЛЕКОТА ДА ПРОСЛЕДИМ ВСЯКО ЕДНО УСТРОЙСТВО В INTERNET.

А това ни навежда на едни размисли за "Тъмната мрежа", която както всички знаем ... не съществува.

Но не пропуснахме ли нещо?  Как така разбрахме, че Port 43 е отворен?


2. Да сканираме адресите за отворени портове. 

PortScaner.png.ef0ab387eddb531a817e56aedf2b0c65.png

Сканиране за отворени портове

Какво правим тук?

Въвеждаме URL адрес и какво получаваме? Правилно. Получаваме IPv4 на сървъра. 

Какво следва?

Последователно обхождаме всеки един порт и виждаме, на кой сървърът отговаря: "Да. Тази вратичка е отворена и можеш да изпращаш заявки, които да преминат през нея".

До тук има ли нещо, което да ви направи впечатление?

Няма конзоли. Няма някакви сложни и неразбираеми команди. Всичко е елементарно, лесно и безкрайно интуитивно.

Това, колеги се нарича peopleware.

Sledwa]ite uroci ]e bydat posweteni na temata:

 

КАК, МЪТНИТЕ ГО ВЗЕЛИ, Е НАПРАВЕНО ВСИЧКО, КОЕТО ВИЖДАМЕ НА КАРТИНКИТЕ, А?

Това, вече наистина е интересен въпрос, на който си струва да се отговори. 

 

 

Редактирано от Avatara
  • Like 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

В предният пост, показахме как може да получим изключително полезна информация от страна на сървъра.

Обяснихме защо е важно да знаем как функционират TCP, UDP и IP протоколите.

Днес ще се запознаем с това как, функционират протоколите от по-високо ниво.

Най-лесно е да видим това с един от най-старите (и най-масово използвани протоколи), а именно FTP.

FTP_Ttansfer.png.1bebeb2e1a4c8dd70f464a6077d4e91c.png

Тук също няма нищо сложно, Клиентът изпраща към сървъра някакъв символен низ.

В случая работната станция се обръща към сървъра и казва следното:

PORT 192,168,1,2,200,254<EOL>

Вижте внимателно какво съдържа стринга - IPv4 адреса на компютъра от който е изпратена заявката. На практика се вижда IP адреса зад рутера! 

Когато този низ бъде получен от сървъра, след проверка той гордо отговаря:

200 PORT command successful<EOL>

Следващите редове обаче са още по ... забавни.

Клиентът изпраща сленият низ:

MLSD<EOL>

и сървърът съвсем кротко отговаря с:

150 connecting to port 51457<EOL>

Повече от очевидно е, че сървърът казва кой порт е отворен за да се осъществи комуникация. 

И сега внимавайте много добре. Ако сте сканирали за отворени портове, едва ли точно порт 51457 е бил отворен. 

Разбирате ли какво се случи реално?

Както сървърът, така и клиентът обмениха КРИТИЧНА информация в ... открит вид.

Тук никаква защита не помага. Просто принципът е такъв. Без тази информация няма контакт. Без контакт няма как да си свалим последната песен на Азис (примерно).

Сега искам да внимавате много добре. Това, което клиентът и сървърът обменят е комуникация между машините на ниво TCP. На ниво FTP тази комуникация може да има малко по-различен вид. 

 

FTP_Ttansfer_001.png.efd2818b7dce2c75bfa39ae1492a763f.png

Тук клиентът изпраща команда FEAT и сървърът съвсем добронамерено отговаря кое какво е и за какво може да се ползва (стига да знаем какво точно искаме).

И пак повтарям

ДО ТУК НЕ СМЕ НАПИСАЛИ И РЕД ЗА HTTP И HTTPS. НЯМА НИТО ЕДИН СКРИПТ, НО УСПЯХМЕ ДА ИЗВЛЕЧЕМ МНОГО ИНФОРМАЦИЯ, КОЯТО МОЖЕ ДА ПОЛЗВАМЕ ЗА РАЗЛИЧНИ ЦЕЛИ. 

Ако ми позволите ще цитирам Сун Дзъ ("Изкуството на войната") - Битката се печели от този, който познава противника по-добре от самия него.

 

Забележка: Във всички примери, които прилагам са ползвани само и единствено тестови сървъри. Тези сървъри са създадени с учебна цел.

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Нека съвсем малко разширим темата за FTP.
Много често, когато се анализира сигурността на един или друг web-ресурс, се пропуска един фундаментален въпрос:

КОИ ФАЙЛОВЕ И РАБОТНИ ДИРЕКТОРИИ СА ДОСТЪПНИ ЗА КЛИЕНТА?

Знаете ли колко са т.н. "открити" FTP сървъри?
Няма да повярвате. Те са изключително много и съдържат безценна информация.
Повечето се достъпват посредством ftp://нещо си ...  или посредством IPv4 адреса (ако го знаете).
При всички случаи обаче може да ги ползвате за да проверите познанията си.

FTP_Commands.png.0997c3d4416487d598fd19e7768b520a.png

 

Както можете да видите от изображението, вие може да извлечете информация за 'текущата" директория, в която се намирате.

Това, което трябва да запомните е, че не винаги "текущата" директория съвпада с коренната (root) директорията.

Най-важно за нас е дали имаме достъп до системните директории на сървъра, които отговарят за изпълнението на скриптове (PHP, Python, Perl и др.) както и до директориите, в които физически се съхраняват СУБД (Системите за Управление на Бази от Данни като My SQL, IB, DB2, SubBase, Firebird и др..). Ako СУБД са на същият сървър (визирам физическото устройство) това ви гарантира тотален контрол над системата.

 

FTP_Directories.png.f0123eaa9d8c45ee042ea0e2a8a80f85.png

 

Друг важен аспект е, че трябва да се абстрахирате (веднъж и завинаги) от идеята, че сървъра, с който комуникирате, задължително е Linux. Това е грешка и не бива да се допуска. Може да се окаже, че осъществявате обмен с IBM 3270/PC FTP (примерно) или някакъв друг, за който не сме и чували. Ако синтаксисът на командите е стандартен е добре, но ако не е тогава става доста интересно.

ВСЯКА ДИРЕКТОРИЯ И ВСЕКИ ФАЙЛ НА СЪРВЪРА ИМАТ ДЕЛЕГИРАНИ ПРАВА (PERMISSIONS) ЗА КОНКРЕТЕН  ПОТРЕБИТЕЛ, ГРУПА ОТ ПОТРЕБИТЕЛИ И ОБЩИ ТАКИВА.

Тези права (permissions) могат да бъда: право да се чете, право да се редактира, право да се свали локално, право да с запише на друго място, право да се изтрие и т.н..

Правата по подразбиране са едно, а правата делегирани от системните администратори са нещо различно. Това, че системният администратор не си е свършил работата, не означава, че една или друга ОС е лоша. То означава само и единствено, че добрите системни администратори се отнасят отговорно към това, което правят, а не до там добрите, пренебрегват мерките за сигурност. 

Независимо каква ОС ползвате (Windows. Linux. MacOS и др.) правата се записват или като символен низ от вида:

lrwx  rwx  rwx

или като число от вида:

725

Числото се формира въз основа на зададените права.

Например, акo са зададени следните права:

User:        Read - 1        Write - 1       eXecute - 1 

Group:     Read - 0        Write - 0       eXecute - 0

World:     Read - 0        Write - 0       eXecute - 0

Числото ще бъде:

7-0- 0,

а символния низ:

drwx   _ _ _    _ _ _ 

 

Това означава, че правата за четене, запис и изпълнение са делегирани само и единствено на конкретен потребител и на никой друг.

 

FTP_Permissions.png.87bebcdd695e3c5c2342704ffc93258b.png

 

Темата е доста обширна и едва ли ще бъдем в състояние да я разгледаме детайлно в рамките на този форум.

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

https://www.iana.org/assignments/ftp-commands-extensions/ftp-commands-extensions.xhtml

Важно е да се научите да ползвате подобен вид справочни материали. Научете се да си изграждате собствени ресурси от полезни документи и техническа документация. Не разчитайте на internet, a още по малко на Google. Свалете си това и го ползвайте. Това е друг подход, чиято цел е да ви предпази от нежелано "филтриране". И не забравяйте: Сървърите могат да бъдат различни. Това важи както за апаратната част, така и за използваната ОС.

А ето един прекрасно написан материал как се прави FTP сървър на компютър, който ползва MacOS.

 

http://blog.neweb.co/bg/create-ftp-server-mac/

 

 

 

 

 

Редактирано от Avatara
  • Like 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

След написаното по-горе (което предлагам донякъде е събудило любопитството ви. е редно да направим обобщение на всичко до тук.

Най-важно е да разберем следното:

1. В момента ние разглеждаме само и единствено начините, по който данните се пренасят (транспортират) от компютъра до сървъра и обратно.

2. Всички направени до тук разглеждания са обвързани само и единствено с мрежите (локални и internet) и не касаят компютърни конфигурации и операционни системи.

3. Internet е нещо, много по-сложно отколкото би ни се искало.

 

И така ...

1. МРЕЖОВИ ПРОТОКОЛИ 

ОПРЕДЕЛЕНИЕ

 Мрежовите протоколи са правила, въз основа на които се извършва обменът на информация между устройства, които са свързани в компютърна мрежа.

 Съществуват две класификации на мрежовите протоколи както следва: OSI и TCP/IP

 

2. OSI МОДЕЛ

ОПРЕДЕЛЕНИЕ

OSI (англ. Open Systems Interconnection Basic Reference Model) е теоретичен модел, който описва функциите, въз основа на които се осъществява процеса на обмен на данни между отделните устройства, от които е изградена мрежата.

Описанията на функциите са обединени в групи. Всяка групата се състои от близки като логика операции.  Прието е тези групи да се наричат „слоеве”.

Съгласно OSI мрежата се разглежда като изградена от отделни слоеве. Всеки слой получава услуги от този, който е под него и да предоставя услуги на по-горния слой. При този обмен винаги се запазва логическата последователност. Това позволява правилното функциониране реализираните комуникационни процеси.

 

2.1. Слоеве, съставящи OSI модела

2.1.1. Физически слой (англ. Physical Layer)

Най-долният (първи) слой на OSI модела. Той предава информацията като поток от битове. В този слой информацията се обменя в бинарен вид (поредица от единици и нули - bit).

Елементите, които трябва да бъдат контролирани са честоти, преобразуване (кодиране), синхронизация, начало и край (start-stop процеси) и пр..

 

2.1.2. Kанален слой (англ. Data Link Layer)

Каналният слой поддържа обменa на данни от възел (от устройство)  до възел (до устройство) в локална мрежа.

Вторият слой на седемслойния OSI модел и използва услугите на физическия слой.

От своя страна каналният слой от своя страна се дели на два подслоя както следва:

· Физически канален подслой – реализира се на ниво Media Access Control адрес или накратко MAC адрес. Този адрес е уникален идентификатор на производителя на мрежовите адаптери по технологията Ethernet (фабричен номер).

· Логически канален подслой - LLC (Logical Link Channel) – установява и закрива логически връзката канал между две пряко свързани устройства (мрежови възли).

На ниво Data Link данните се предават като  като последователност от пакети.

Всеки пакет се състои от последователност от битове (единици и нули - bit) с фиксирана дължина.

Всеки един пакет се проверява. Проверката се извършва от страна на получателя и посредством нея се удостверява, целоста на пакета. Когато целостта на пакета бъде удостверена, подателят получава информация, че пакетът е получен успешно.

Всеки един от пакетите съдържа заглавна част, която се нарича header. В тази част се съдържат служебната и адресна информации за пакета.

В заглавната част са записани уникалните фабричени номера на устройството, което предава информация и устройството, което получава информация (MAC адресите на устройствата).

 

2.1.3. Мрежови слой (англ. Network Layer)

Tретият слой на OSI модела.  Използва се за да бъде установен  маршрута между компютъра-източник и компютъра-получател.

На мрежовото ниво се извършва комуникация между компютърни системи, намиращи се извън локалната мрежа (външни за локалния LAN сегмент).

Този слой има своя собствена маршрутна адресна архитектура. Тази архитектура се различава съществено от използваната в каналния слой.

Маршрутизиращите протоколи включват: IP, IPX, Apple Talk и др. Те предават съобщения от подателя, до крайния получател през няколко междинни възела (hops).

За да бъде извършено това се използват като използват уникални мрежови адреси и механизъм (протокол) на маршрутизация.

Съобщенията, които трябва да се предадат  се разделят на пакети с определена дължина. Тази дължина се измерва в байтове (Byte).

Пакетите са снабдени с адресна информация и се подават последователно на комутационното устройство (комуникационната станция), което ги препраща до крайният получател.

Отделните пакети  се запаметяват във всяка станция и се съхраняват там, до момента в който не бъде потвърдено получаването на данните от сррана на получателя или информацията не бъде прехвърлена в следващата станция по маршрута.

Комутация на пакети се нарича процесът, при който изпращаните пакети се съхраняват във временен буфер, след което се изпращат до крайния получател в съответствие със служебната и адресна информации, записани в заглавната част.

Обикновено мрежите обменят данни посредством пакети.

Всеки пакет е комутиран и може да има индивидуален маршрут.

Мрежите с комутация на канали използват еднакъв маршрут за всички пакети.

При този слой липсва механизъм за коригиране на грешки в процеса на обмен на данни. Това налага изцяло да се разчита на надеждноста на услугата за предаване от страна на каналния слой.

 

2.1.4. Транспортен слой (англ. Transport layer)

Четвъртият слой на OSI модела.

ТСР (англ. Transmission Control Protocol) е мрежов протокол за управление на обмена на информация (end-to-end комуникация).

Предоставя на по-горните слоеве услуги с или без установяване на връзка (connection-oriented или connectionless), в зависимост от използваните протоколи.

TCP използва адресите на клиентските и сървърните портове, както и тези на комункационните устройства за да гарантира правилният пренос на данни до крайния клиент. 

Портовете са числови идентефикатори, които обслужват мрежовите съединения за конкретен адрес (в случая визираме IP адрес).

В терминологията на OSI, портът се нарича транспортен селектор (transport selector или transport suffix).

Основната задача на този слой е да нареди разбърканите пакети в последователността, в която те са подадени (сегментиране на данни).

Разбъркването се получава в резултат на това, че е възможно различните пакети данни да се предават по различни маршрути. Това означава различно врмезакъснение при получаването на всеки отделен пакет.

Транспортното ниво разпознава оригиналната подредба на пакетите и въстановява тази подредба преди информацията да бъде предадена към по-високото сесийно ниво.

За разлика от каналния слой обаче, този слой може да открие грешки и автоматично да генерира заявка за пре-предаване на информацията.

 

2.1.5. Сесиен слой (англ. Session layer)

Петият слой на OSI модела.

Този слой управлява комуникацията между две компютърни системи.

Това се извършва посредством управление на комуникационите потоци. Този процес носи името „сесия” или „комуникационна сесия”.

Сесийният слой определя дали комуникациите могат да бъдат двустранни или едностранни. Освен това този слой се следи кога една заявка е изпълнена и може да се обработи следващата.

 Използва се относително рядко като самостоятелен слой.

Повечето протоколи свързват функциите му с тези на транспортното ниво (разглеждат го като елемент от TCP протокола).

 

2.1.6. Представителен слой (англ. Presentation layer)

Шестият слой на OSI модела.

Този слой управлява кодирането на данните.

Кодирането е процес, при който се извършва преобразуване на информацията.

В системите за цифрова комуникация, кодирането се извършва посредством представянето на данните в цифров вид (представят се като числа). За тази цел се прилагат различни математически и/или друг вид операции.

Не всички компютърни системи използват една и съща схема за кодиране на данни.

Това ниво позволява да се реализира своеобразен „превод” на информацията, така, че независимо от използваната апаратна част и програмно осигуряване, получателят да получи това, което подателят е изпратил.

Понякога представителният слой служи за преобразуване на числени формати, както и за компресиране нна информацията, с цел ускоряване на процесите.

 

2.1.6. Приложен слой (англ. Application layer)

Приложният слой е седмият, последен слой на OSI модела.

Този слой осигурява интерфейсът между потребителските приложения и мрежовите услуги.

Под интерфейс ще разбираме средствата за взаимодействие между различни компютърни системи (апаратни и програмни такива).

Този слой е отговорен за генерирането на комуникационните сесии.

Този слой не включва потребителските приложения. Той позволява на тези приложения да осъществяват обмен, като използват мрежови протоколи.

Ако едно крайно приложение генерира заявка към сървър, приложният слой преобразува тази заявка като заявка към съответния комуникационен протокол. След като това бъде направено се установява комуникационна сесия между крайния потребител и сървъра и се извършват съответните действия.

 

P.S. Благодаря на колегите от BS за любезно предоставената информация, която силно се различава от редица публикации в internet.

 

 

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Сега нека да видим ...

КАК СЕ ТЕСТВА TCP СЪЕДИНЕНИЕ МЕЖДУ КОМПЮТЪР И СЪРВЪР?

Това, което е важно да се знае е, че ТОВА МОЖЕ ДА СЕ ПОЛЗВА И КАТО МОДУЛ ЗА ТЕСТВАНЕ НА ПОРТОВЕ, НО ЛИЧНО АЗ НЕ ГО ПРЕПОРЪЧВАМ!

Причината е скоростта. Работи перфектно, но ако се налага да тествате 6000 порта ще ви е малко бавничко.

Първоначално ще проверим как това се прави ръчно.

 

{------------------------------------------------------------------------------}
{                                                                                                                                              }
{                                          TCP PROCESS INFORMATION                                              }
{                                                        version 1.0.0.0                                                           }
{                                                                                                                                             }
{                                                      date: 25.12.2016                                                         }
{                                                                                                                                             }
{------------------------------------------------------------------------------}

// CONNECT TO SERVER USING TCP
function TAddressForm.ConnectToSelectedServer (Address_Value: String; Port_Value: Integer): String;
begin

    Result:= 'Connection successful ...';  // Допускаме, че резултатът ще е добър ...

    if Address_Value = '' then Exit;    // Ако няма въведен адрес просто излизаме от функцията ...

    // Преди всичко трябва да предвидим, че е възможно да не се осъществи връзка със сървъра.
    // Причината за това е затворен порт, неправилен адрес, липса на физическа свързаност и пр..
    // Реално тази функция ни позволява анализ на TCP свързаността за всяко едно устройство.
    try

      with TCPClient do      // Тук казваме, че ще ползваме нашият TCP клиент.
        begin

          Host:= Address_Value;   // Задаваме адреса ...
          Port:= Port_Value;      // Задаваме порта ...
          Connect;                // Правим опит да се свържем със сървъра ...

          if Connected then
            begin
              Socket.WriteLn('Hi');   // Ако сме се свързали му казваме "Здрасти ..."
              Disconnect;
              Socket.Free;
            end;

        end;

    // Какво обаче ще се случи ако е възникнала грешка?
    // Определено е добре да видим каква е тя.
    except

      // В този случай резултатът ще е информация за получетана грешка ...
      on E: Exception do
        Result:= E.ClassName + #13 + E.Message;

    end;


end;
 

По елементарна функция от така приведената едва ли може да има.

Как се ползва тази функция?

Ето един от възможните варианти:

 

// ON CONNECT BUTTON CLICK
procedure TAddressForm.ConnectBtnClick(Sender: TObject);
var
  Address  : String;    // Адреса, който тестваме
  S              : String;

  PortNo : Integer;

begin

    DebugMemo.Lines.Clear;

    Address:= AddressEdit.Text;  // Прочитаме адреса ...

    PortNo:= StrToIntDef(PortNoEdit.Text, 80);  // Ако нямаме или имаме грешно въведен порт, тогава StartPort:= 80 (FTP)

    // Тестваме дали точно PortNo за този адрес е отворен ...
    S:= ConnectToSelectedServer (Address, PortNo);

    DebugMemo.Lines.Add('');

    // Записваме резултата, в текстовия редактор за да може да го анализираме ...
    if pos('Error', S) > 0 then DebugMemo.SelAttributes.Color:= clRed
      else
    DebugMemo.SelAttributes.Color:= clTeal;

    DebugMemo.Lines.Add(S);

end;
 

PortChecker_0001.jpg.0975690126c33a38175530f4db97dba5.jpg

 

PortChecker_0002.jpg.cf15152b4af2c286afec96e79ae6899b.jpg

 

Мисля, че повече от ясно е, че порт 25 за адрес abv.bg (примерно) е затворен, но port 80 (което е вече обсъденото FTP) се оказва достъпен.

Сега ще се върнем към урок 3, но този път изходните кодове са леко променени.

Всички изходни кодове ще намерите в саморазархивиращият се архив:

http://g-92.com/LESSONS/Lesson_003A.exe

 

 

 

 

 

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

При сканирането на TCP много ясно се вижда каква точно е причината да възникне грешка.

При "стандартните" скенери, получаваме информация: "Портът е отворен" или "Портът не е отворен", но понякога това може да се окаже недостатъчно.

Възможно е портът да стои отворен, но да не можете да достъпите съдържанието на сървъра поради някаква друга причина.

Допълнително предимство е възможността да анализираме TCP пакетите, но това е друга тема.

 

Сподели публикацията


Адрес на коментара
Сподели в други сайтове
On 4/4/2018 at 10:41 PM, Avatara said:

Това е тема в която ще пишем за това как се прави ... нещо конкретно.

Например "Kак да направим многопоточен ping" или "Как да направим собствен снифър".

Защо е нужно това?

Много често в практиката ни се налага да решаваме казуси, които изглеждат елементарни. Истината е, че често това е подвеждащо. Много често не може да намерим отговор в Google или в специализираните ресурси.

Това е тема за практиката, но практика, която ползва солидни теоретични познания.

Тук ще търсим отговори на въпроси, които не се задават в институтите и не се изучават в училищата. Тук ще се налага да обясняваме всичко, което пишем и най-вече да прилагаме примери, които да са работещи.

Всичко, което ще пишем в тази тема ще бъде подлагано на проверка.

Какво е добре да знаете от самото начало?

Преди всичко, колкото и да не се харесва на мнозина ще се наложи да се работи с Windows, като операционна система. Това важи дори (най-вече) в случаите, когато ще се налага да пишем изпълним код за Linux (за справка MSDN).

Какво налага това?

Преди всичко в момента има две развити системи за създаване на крайни приложения (не за писане на скриптове, а именно за крайни приложения), както следва:

- Visual Studio (Microsoft) - Език за програмиране C#, VB; Операционни системи: Windows, Android, iOS. 

- RAD Studio (Embarcadero) - Език за програмиране Delphi, C++, Assembler; Операционни системи: Windows, Android, iOS, Linux.

И в двата случая може да създавате крайни приложения, които да продавате в Windows Store, Google Play, cNet, Softpedia или в други масово достъпни ресурси.

И в двата случая може да създавате цялостни проекти, да генерирате dll, ActiveX или визуални компоненти, както и да добавяте скриптове на Java Script, VB Script, PHP, Python и др.. Също така можете да създавате и HTML документи и CSS.

В RAD Студио обаче мoже да ползвате FireDac и ЕМС и да работите със СУБД. Това включва генериране на конекции (conection), таблици, отчети, тригери и т.н.. Тук може да работите със всички структурирани бази данни в т.ч. Oracle, DB2, IB, SubBase, My SQL, Firebird, MS SQL и др.. Такава възможност липсва във Visual Studio. Друго предимство на RAD Studio е възможността за работа с неструктурирани бази данни и автоматичното генериране на базови REST сървъри. 

Друго предимство на RAD студио е интеграцията с Visual PHP и FireMonkey. Най-голямата сила на RAD студио си остава възможността да разработвате не само собствени контроли, но и собствени компоненти и не само.

Сега за езиците за програмиране ...

Кoгато ползвате Delphi ще може да работите с WideString, Ansi Sring, pChar, pAnsiChar, pWideChar, LongString и много други разновидности на символните низове. Това в C# и C++ не винаги е възможно да се направи. В Delphi можете да пишете директно на assembler. В C# и C++ това няма как да се случи. В Delphi  можете да работите с множества (това е много важно, когато говорим за сигурност в промишлените системи). В C# и C++ това може да правите само ако сами си напишете нужните библиотеки.  

Много често, когато се визира internet разглежданията се свеждат до потоци и пакетна обработка. Това не винаги отговаря на истината.

Никога не бива да забравяме, че internet е обвързана с модулация, което ни връща към ... модемите. А модемите това са телефоните.

Лично аз ще се придържам към следната схема в своите изложения:

- internet - Синхронни и асинхронни канали за връзка;

- мрежови комуникации - СКС и безпроводни (ефирни);

- операционна система краен потребител - Windows, Android.

- сървърна операционна система - Windows, Linux;

- средна на разработка - RAD Studio 10.2 (Tokio), Windows 10 Profesional;

- език за програмиране - Delphi, Assembler, C++ (в тази последователност);

- скриптови езици - Java Script, PHP;

- web-документи - HTML (HTML5), CSS (CSS3).

Всички примери (в т.ч. изходните кодове) ще бъдат достъпни.

Това, което обаче е нужно да знаете, че всеки един ще бъде надлежно регистриран в eCO ( https://www.copyright.gov/ )  към библиотеката на Конгреса на САЩ. 

Това означава, че кодовете ще са безплатни, но ... юридически са под защитата на EULA. 

Изпълнимите кодове са безплатни (това важи само за примерите тук).

Тук ще се пишат дълги постове (това го казвам от сега). материята е тежка (най-вече темата за POP3, SMTP, FTP, HTTP и др.)  и изисква сериозни обяснения.

Пак повтарям, че тук ще се пише неща, които няма да научите в нито един от скъпо платените курсове по програмиране и в нито един университет.

Mного от нещата няма да намерите в GitHub и в Google.

 

 

 

Доста добре подготвена тема,точно като за начинаещи които искат тепърва да навлязът в материята,описано е кои среди за разработка се използва,кои езици,и примери има което е добре.

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Благодаря Ви.

 

Снощи се прибрах от двудневна научна конференция по въпросите на компютърната сигурност. Освен с два доклада в пленарната сесия ми се наложи да участвам и в работата на една от секциите.

От какво бях много приятно впечатлен (не само аз, но и моите колеги).

На първо място от практическата и теоретична подготовка на курсантите (и момичетата курсанти) от Факултет „Артилерия, противовъздушна отбрана и комуникационни и информационни системи“ - гр.Шумен. Държа да отбележа, че предстои някои от участниците да представят своите идеи на предстоящи форуми в чужбина.

За какво говоря. Преди всичко става дума за анализ на кибернетични атаки насочени към телекомуникационните системи в т.ч. и такива, които се базират на мрежова стеганография (интегриране на код в служебната част на информационните пакети). Тук не говорим само за софтуерни решения, но и за апаратни такива. Изследване на въпроси, касаещи широколентов пренос на данни, правни въпроси на киберсигурността, действащи международни актове и др..

Пак повтарям, че става дума за много сериозни знания. 

Искам специално да отбележа, участието на колеги от неправителствена организация, които са си поставили за цел да изстрелят малък (cube) спътник в ниска орбита (400 или 450 километра). Това е прекрасна идея на група млади хора, която вярвам, че ще се реализира успешно (все пак в рамките на една календарна година има само две възможни дати за подобен вид изстрелване).

Имаше и една доста весела случка. Колега от друг ВУЗ се опита да оспори една от дискутираните теми (касаеща пробиви в сигурността на Crome, Mozilla и Opera), с тезата: "Това е невъзможно.". Бе оборен от двама курсанти, които просто му показаха разделите от техническата документация на Google, която визира този тип уязвимост.

Една от темите, която обаче бе предмет на специално обсъждане бе темата за подготовката на граждански кадри.

Основният проблем е, че сред младите бе изкуствено наложена представата, че всичко може да бъде обяснено с няколко изречения и че в internet може да се намери всякакъв вид информация (мнозина не са чували за термина "информационен шум"). За съжаление това не е така.

Минималният срок за подготовка на кадри, които са в състояние да работят в реални условия е три години. Това е при условие, че вече са получили стабилна фундаментална подготовка. За огромно съжаление към момента такава липсва. Най-лошо е положението в средните училища. 

Въпросът е не в това, че са допуснати стратегически грешки. Въпросът е КАК ДА РАЗРЕШИМ ПРОБЛЕМЪТ.

Едно от решенията, което бе взето е  Факултет „Артилерия, противовъздушна отбрана и комуникационни и информационни системи“ - гр.Шумен. да стартира програма от дистанционни курсове, която да бъде достъпна за всеки желаеш. Предстои програмите да бъдат обсъдена на катедрен съвет и одобрени. Това ще бъдат курсове, касаещи въпросите на комуникациите, киберсигурността, практически решения в области като хетерегенни мрежи, разработка на специализирани приложения и др.. 

Предвижда се тези курсове да бъдат на степени. След като успешно сте преминали първата степен, преминавате към следващата. За всяка степен получавате съответния сертификат.

Предстои Република България да изгради съвременни структури за кибернетична защита. За тази цел обаче е нужно да разполагаме с подготвени кадри. Тези кадри ще трябва да решават реални проблеми, касаещи националната ни сигурност.  Това изисква много задълбочени познания в редица области като електроника, фотоника, телекомуникации, техническа и социална кибернетика, биология, неврофизиология и др.. Сами разбирате, че визирам една изключително сложна материя. 

Вероятно ще си зададете въпроса: Къде в момента се намира България като техническо развитие?

Ще бъда честен. България изостава чувствително от държавите в региона. Пред нас е Югославия, Турция, Албания, Румъния, Гърция. 

Основната причина е, че повечето млади хора следват "модерна" линия на образование, която е повече с комерсиална насоченост и не винаги води до генериране на трайни и задълбочени познания. 

Въпреки това от видяното през тези два дни аз оставам оптимист за бъдещото развитие. За съжаление в редица сфери ние ще трябва да започнем от нула, защото са пропуснати години. Вярвам, че това, което публикувам тук ще ви позволи поне за малко да се докоснете до нещо много по-голямо и мащабно. Ще се радвам ако добиете представа към въпросите пред които са изправени структурите, отговарящи за кибернетичната безопасност.  ще повече ще се радвам, ако на следващата конференция (или на други такива) срещна участници от този форум и те са лектори в някоя от работните секции. Ще ми бъде изключително приятно да обсъдим с тях всяка нова идея.

Искам само да спомена, че винаги има какво да научите. Дали човекът е преподавател с научни звания и дългогодишен опит, студент или докторант е без значение. Ако познава добре материята, я която работи и не се страхува да експериментира, винаги ще има какво да вземете от него. Има области на познанието за които дори и не подозираме. В редица сфери дефицита на кадри е огромен. Разберете, че нищо не може да замени практическият опит. 

 

Редактирано от Avatara
  • Like 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Нека сега се върнем към темата.

Да повторим:

OSI (англ. Open Systems Interconnection Basic Reference Model) е теоретичен модел, който описва функциите, въз основа на които се осъществява процеса на обмен на данни между отделните устройства, от които е изградена мрежата.

Сега нека видим как изглежда internet, през призмата на OSI моделът, който е основата на всички мрежови анализи.

 

OSI.png.532b20a9c039271ba2665c8fcab4d78a.png

 

Това, което предстои да направим е да анализираме мрежата слой по слой.

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Ако ми позволите ще изменя леко графиката, която илюстрира OSI модела.

 

OSI_001.thumb.jpg.a7aee1c67328e6ce22c7adfd6a11ff2a.jpg

 

Мисля, че това е много по-точен модел.

Вижте, това, което би следвало да анализираме е т.н. "СИВА ЗОНА". Реално всеки един елемент от "сивата зона" може да бъде използван като обект на атака. 

Колкото на по-ниско ниво се извършва атаката, толкова е по-трудно тя да бъде локализирана.

Единственото доказало своята ефективност противодействие на атака на физическо ниво е шифроването но ... тук има куп юридически проблеми, които са въпрос на друг вид дискусия.

Това, което можем да направим е да се научим да анализираме трафика и да контролираме мрежовата топология. Повярвайте, често това ще се прави на ниво MAC адрес, а не на ниво IP.

И нещо, което ще повтарям непрекъснато:

Вижте много добре графиката.

КОМПЮТРИТЕ (СЪРВЪРИТЕ) СА ИЗВЪН СИВАТА ЗОНА!

ПОНЯКОГА ТЕ СА В ТЪМНОЧЕРВЕНА ЗОНА, НО ТАМ АТАКИТЕ СА ОТ ДРУГ ВИД!

В МОМЕНТА НИЕ ВИЗИРАМЕ САМО И ЕДИНСТВЕНО АТАКИ, КОИТО СЕ ПРОВЕЖДАТ НА МРЕЖОВО НИВО!

Операционната система (без значение дали тя е UNIX, Linux, Windows, iOS, Android и каквото се сетите) е извън зоната, която е обект на настоящите разглеждания.

Каква ОС ползва крайният потребител е без значение, когато атаката се извършва на ниво слой от OSI моделът.

Компанията Cisco ползва собствена OS за активното си оборудване, но дори те са длъжни да се съобразяват с OSI.

И не забравяйте, че не е задължително приложният слой да е елемент от компютърната конфигурация. Това се прави )с оглед удобство) но не е задължително.

 

СЪЩЕСТВУВАТ И МЕТОДИ НА ЗАЩИТА ПРИ КОИТО OSI МОДЕЛЪТ СЕ ИМПЛЕМЕНТИРА В ЕДИН МОДУЛ. ТОВА СИЛНО НАПОМНЯ PROXY СЪРВЪРИТЕ, НО ИДЕЯТА Е ДРУГА. ТАКА СЕ СЪЗДАВАТ ВИРТУАЛНИ ВЪЗЛИ, ЧИИТО ПАРАМЕТРИ СЕ ПРОМЕНЯТ ДИНАМИЧНО В РАМКИТЕ НА ЕДНА СЕСИЯ.

Такъв тип решения се използват, когато трябва да останем незабелязани в мрежата.

 

Забележка: В така показаната схема обменът на данни се извършва между две тактически цифрови устройства, които са с TEMPEST защита и ползват специализирана ОС.

Редактирано от Avatara
  • Like 1

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

След като добихме някаква бегла представа какво е OSI моделът, нека да се опитаме да разясним и няколко други специфични термини.

SNMP (англ. Simple Network Management Protocol)

По определение SNMP e стандартен internet-протокол за управление на устройства в IP-мрежи, базирани на TCP/UDP архитектура.

ПРОСТИЧКО КАЗАНО ТОВА Е "ПРОСТИЧЪК" ПРОТОКОЛ ЗА УПРАВЛЕНИЕ НА МРЕЖОВИЯ ТРАФИК.

За това "просто" нещо отговаря не кой да е, а самият ИНЖЕНЕРЕН ИНТЕРНЕТ СЪВЕТ (Internet Engineering Task Force - IETF, официален адрес: http://www.ietf.org/ ) , който всички ние сме длъжни да уважаваме защото без него нямаше да има YouTube, Google, Facebook, Skype, Instagram, PayPal, електронна поща, електронна търговия и де що е гадост, именувана "виртуални благини".

Това, че много от подрастващите не са и чували за тази организация е без значение. IETF също не е чувала за тях. Но ние трябва да знаем какво се прави там, защото ако я няма тази организация какви хакери ще да сме, питам?

Но да се върнем на въпроса за SNMP (за който също малцина подрастващи са чували, но без който не може) ...

SNMP се състои от три ключови елемента както следва:

1. Устройство - Устройството, което се управлява;
2. Програмното осигуряване (АГЕНТЪТ) - Програмата, която се стартира на или управляваното устройство или на интерфейсът към него и без която нищо не се случва;
3. Системата за мрежово управление (Network Management System, NMS) -  което също е софтуер. Този софтуер си взаимодейства с мениджъра, който отговаря за комплексната поддръжка на данните, които отразяват състоянието на мрежата.
 

SNMP има седем протоколни единици  на обмен, които са много интересни, защото ни позволяват да получим изключително полезна информация, без да се налага да "хакваме" каквото и да било. Но за това ще си поговорим друг път.

 

Сега малко отклонение за по-младите ни колеги. :D  :D

 

Уважаеми,

В тази тема няма да прочетете "как се хаква Facebook" защото това не е интересно.

Повярвайте много по забавно е да разберем:

КАК ДА ПОСТАВИМ НА КОЛЕНЕ ДЕ ЩО Е ДЪРЖАВА В СВЕТА, ОТ ДОМАШНИЯ СИ КОМПЮТЪР? 

Вие си мислите, че тези, които ги дават по телевизията са умни, красиви и ги разбират нещата. Повярвайте това не е така. Тези, които ги разбират, четат. Четат. Четат. Четат и пак четат. Това може и да е гадно, но резултатите си струват.

Има и друго.

Това, което обсъждаме тук не се дава на олимпиади по програмиране. Не се и учи в университетите. Там се учат други неща. Там основно се обсъждат неща като сортировки, матрична алгебра и др. неща от материя, която може да приемем за академична. 

На нас обаче ни трябват инструменти. Такива обаче никой няма да ни предостави, дори и да си платим (което както се знае ние не обичаме да правим, защото всичко трябва да е безплатно в т.ч. бензинът, дизела, кебапчетата, бирата, топлия хляб, луканката, марковите маратонки, входа за дискотеката, водката, кафето и т.н.). И какво правим тогава, а? Трябва да положим усили за да си направим сами инструментите, които ни трябват (онези от IBM, Cisco, Novell и др. не щат да си ги дават и това е). Разбирам, че не е честно, но и живота не е честен. Гаден е и не е само забава. Само за забавление е девиза на една ОС, която се финансира от АНС, но това не е хубаво да се казва в България, защото за такива думи могат и да те набият.  И в чужбина не се казва. Ей, на и Microsoft бяха убедени да приемат "правата вяра". 

Ние обаче не бива да имаме сляпо доверие на всичко, което ни се казва. 

Никога не вярвайте на следните неща:

1. На политиците;

2. На журналистите;

3. На финансистите;

4. На бюрократите в МОН (там са направо за прокурор);

5. На НПО-тата;

7. На INTERNET;

Най-вече не вярвайте на тези, които се опитват да ви убедят, че от андронният колайзер има някаква полза. Те просто се опитват да оправдаят огромните субсидии, които крадат от джоба ни.

Истината не е в синьото хапче (ако си спомняте онзи велик момент от "Матрицата" на Ушаковски).

Истината не е и някъде там (това е от "Досиетата X").

Истина няма. Има нещо, което се доближава до истината, но това е вашето или моето виждане по даден въпрос, което повярвайте не винаги е актуално.

 

 

 

Сподели публикацията


Адрес на коментара
Сподели в други сайтове

Създайте нов акаунт или се впишете, за да коментирате

За да коментирате, трябва да имате регистрация

Създайте акаунт

Присъединете се към нашата общност. Регистрацията става бързо!

Регистрация на нов акаунт

Вход

Имате акаунт? Впишете се оттук.

Вписване


  • Потребители разглеждащи страницата   0 потребители

    No registered users viewing this page.

×

Important Information

За да посещавате този уебсайт е необходимо да се съгласите с Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.