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

Recommended Posts

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

 

tcp.jpg

 

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

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

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

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

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

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

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

 

 

 

 

 

tcp_anime.gif

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

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


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

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

 

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 - обмен на файлове.

. . . 

  • Like 1
  • 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 2

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


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

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

Обяснихме защо е важно да знаем как функционират 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. НЯМА НИТО ЕДИН СКРИПТ, НО УСПЯХМЕ ДА ИЗВЛЕЧЕМ МНОГО ИНФОРМАЦИЯ, КОЯТО МОЖЕ ДА ПОЛЗВАМЕ ЗА РАЗЛИЧНИ ЦЕЛИ. 

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

 

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

  • Like 1

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


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

Нека съвсем малко разширим темата за 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 3

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


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

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

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

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.

 

 

  • Like 1

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


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

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

КАК СЕ ТЕСТВА 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

 

 

 

 

 

  • Like 1

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


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

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

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

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

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

 

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


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

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

Да повторим:

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").

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

 

 

 

  • Like 1

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


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

И така да продължим с разглежданията на OSI моделът.

Като начало нека видим как работи TCP/IP и каква е структурата на IPv4 адреса.

 

TCP_IP_001.jpg.58d184373ec8220363f1031f403b11a4.jpg

 

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

 

IPv_001.jpg.b78851c11d7257a1b8a9ac96fb5f805f.jpg

 

А това е логиката, по която е построен IPv4 адреса. Мисля, че тук няма нищо сложно.

 

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


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

Не знам дали сте обърнали внимание на процедурите ReadStream (четене на поточни данни) и WriteStream на IOHandler.

Ако не сте го направили, задължително го направете. 

Какво ви дава това?

Ами адски елементарно е. На практика може да изградите всичко. Абсолютно всичко. От собствена 6G мрежа (не, не е грешка защото ще видим как се прави това), през internet радио и internet телевизия (функцията Broadcasting е в кодовете на четвърти урок) както и много други неща (видеочатове, системи за дистанционен контрол в реално време и пр. и пр.). За анализи няма да говоря. Там вариантите са толкова много, че ще ми трябват хиляди странници текст.

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

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

В Internet може и да намерите какви ли не неща, но вероятно или версиите ще са морално остарели или нещо няма да работи. 

Съвсем друг въпрос е, че за много от нещата, които ви предоставям (и чието авторство независимо кой какво твърди си е мое) ще ви поискат доста солени суми (за справка IBM). 😉

Сега ако ми позволите малко отклонение по темата "Предимства на цифровите технологии". 😉

Като начало ще ви разочаровам.

ЦИФРОВИТЕ ТЕХНОЛОГИИ ИМАТ СВОЕТО МЯСТО, НО ТО Е ТВЪРДЕ ОГРАНИЧЕНО.

Запомнете добре това.

Ако трябва да създавам съвременна високоефективна бойна система (визирам хибридно оръжие от пето поколение), първото, което бих направил е да забравя за всякакви цифрови простотии.

ЗАЩО?

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

Преминаване от аналогов сигнал в цифров - времезакъснение. Изчислителен процес - времезакъснение. Преминаване от цифров в аналогов - времезакъснение. 

Само за миг да допуснем, че това времезакъснение е от порядъка на няколко десетки милисекунди (нали видяхте, че в Урок 4 ние контролираме времето в милисекунди).

Давате ли си сметка какво ще се случи?

Да предположим, че имаме ракета, която лети със скорост от 50 m/sek. Не е кой знае какво, но става за пример.

Радарът прихваща ракетата - 100 ms.

Радарът преобразува сигнала - 100 ms.

Системата анализира получените данни - 100 ms.

Системата подава информацията към управляващите устройства - 100 ms.

Управляващите устройства обработват получената информация и подават сигнал към контролерите - 100 ms.

Контролерите извършват каквото трябва - 500 ms.

Резултат - 1 sek и ракетата вече е на 50 метра от мястото където е засечена.

Приехме, че ракетата се движи със скорост 50 m/sek, което е скорост на селска каруца.

Ами ако имаме реална ракета?

Мдааааа ....

Много хубаво нещо са цифровите технологии ... само където имат един основен недостатък и той се нарича ... "слаб бит".

Не вярвате, че е така ли?

Хайде да проверим. 

Имаме следното 32 битово число число:

00000000 00000000 00000000 00000001

Виждате ли зелената нуличка?

Такаааааа ...Сега ще проведем атака от вида "слаб бит" и ще получим следното:

10000000 00000000 00000000 00000001

Видяхте ли какво число се получи? Хайде сега да обърнем двоичното число в десетично и да приемем, че става дума за ... метри. Имате ли представа къе ще отиде "красивата и умна ракета" в този случай? Правилно. Ще се отклони съществено от набелязаната цел.

А ако числото не 64 битово и имахме нещо от вида:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001

Това е направо страшно.

Представете си, че става дума за пари. Тогава какво правим? А ако бита се трансформира от 1 в 0?

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

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

Въпросът е: КАК ДА ЗАЩИТИМ СВОИТЕ ПРИЛОЖЕНИЯ ОТ ПОДОБНА ДИВОТИЯ?

Отговорът е: Налага се да се чете.

Поне за сега не става с купуване. Ако ставаше кажете. Аз първи ще си купя няколко готови решения. 😉

 

 

 

 

  • Like 2

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


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

МАЛКО ОТКЛОНЕНИЕ ОТ ОСНОВНАТА ТЕМА

 

Днес е петък. Ден в който разглеждаме въпроси, които не се радват на особена популярност. ☺️

 

Тема на днешното разглеждане са т.н. "широкопрофилни адресни анализатори". Важно е да не ги бъркате с "мултифункционалните адресни анализатори" защото става дума за много различни неща.

За широкопрофилните адресни анализатори липсва точен термин на английски език. Най-близо по смисъл е  "broad-profile address analysts", но се съмнявам, че ще намерите детайлни описания на този вид приложения.

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

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

Въпросът е за какви цели се използват?

 

Pic_005.png.f19f325c107dbf065176f86e75e4ad67.png

 

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

Адресните анализатори са в състояние да сканират огромни интервали от IP адреси и да записват получените резултати в СУБД (да ги записват в бази данни).

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

Сами разбирате, че това е безценен инструмент, когато искаме да се поровим в дебрите на "DARK INTERNET" пространството, където както знаем се случват доста интересни неща. 😉

Най-хубавото в случая е, че има наивници, които сляпо вярват, че като ползват Tor Browser, са непроследими и изключително потайни. Истината обаче е доста различна и бих казал забавна.

Независимо, че не се индексират и са шифровани всички адреси в DARK INTERNET  са си стандартни IPv4 или IPv6 адреси с всички произтичащи от това последици. Сървърът трябва да се вижда иначе това няма да е web-сървър, а ще си е нещо локално за лична употреба. Тук "шифроването" (каквото и да се крие зад този термин) или използването на proxy сървъри е без значение.

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

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

Тук искам да отбележа, че съществуват два вида адресни анализатори, както следва:

    - такива, които използват потоци (стандартни);

    - такива, които използват паралелна обработка на данни (специализирани).

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

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

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

Реалният адрес, обаче не изглежда по този начин. Той е цяло число. Въпросът е, че потребителят трябва да въведе низ от вида 192.168.1.1 (примерно).

А какво би се случило ако потребителя въведе нещо като 192.222222.333333333.44444, или сдасдасдса.асдасдасд.асдасдасд.асдасдасд?

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

Естествено е системата да изведе съобщение за грешка, което може да бъде избегнато при използване на структура от вида:

      try

          . . . . . . . 

      except

          . . . . . . . 

      end; 

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

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

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

 

 

function ValidateIP(IP4: String): Boolean;
var
  Octet: String;

  Dots: Integer;
  I : Integer;

begin

    IP4:= IP4 + '.'; // Add a dot. We use a dot to trigger the Octet check, so need the last one

    Dots := 0;
    Octet:= '0';

    for I:= 1 To Length(IP4) do
      begin

        if IP4 in ['0'..'9', '.'] then
          begin

            // Found a dot so inc dots and check octet value
            if IP4 = '.' then
              begin

                inc(Dots);


                // Either there's no number or it's higher than 255 so push dots out of range

                try
                 
if (length(Octet) = 1) or (StrToInt(Octet) > 255) then Dots:= 5;
                except
                 
AddressEdit.Text:= '';  // АКО СМЕ СЕ ОПИТАЛИ ДА ВЪВЕДЕМ МЕГА ГОЛЯМО ЧИСЛО ЗА Octet ЧИСТИ ПОЛЕТО ...
                  Exit;                               // ... И НИ ИЗХВЪРЛЯ КАТО МРЪСНО КОТЕ ОТ АПТЕКА БЕЗ ДА СКАПВА ПРИЛОЖЕНИЕТО. ☺️ 
                end;

              Octet:= '0';                    // Reset to check the next octet

              end                                  // End of IP4 is a dot
            else                                    // Else IP4 is not a dot so
              Octet:= Octet + IP4;  // Add the next character to the octet

          end                                      // End of IP4 is not a dot
            else                                   // Else IP4 Is not in CheckSet so
              Dots:= 5;                        // Push dots out of range

      end;

    Result:= (Dots = 4)     // The only way that Dots will equal 4 is if we passed all the tests

end;
 

Предложеното решение е гениално просто и се основава на елементарна логика. Във всеки валиден IPv4 адрес имаме три точки. Всяка група може да съдържа само три символа , които са числа в интервала 0 до 255 и нищо друго. Следователно най-малкият адрес ще бъде 0.0.0.0, а най-големият 255.255.255.255.

Възможно е точно това решение да не изглежда кой знае колко "елегантно" от гледна точка на програмирането, но повярвайте то е невероятно ефикасно.

 

Pic_006.png.5ee46bcdbb1cf9648b1dd30dad529c50.png

 

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

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

Никога не подценявайте "малките и незначителни" неща.

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

Предполагам, че на мнозина ще направи впечатление, че въвеждам една допълнителна променлива S от тип "символен низ" (или String ... или ако трябва да бъда максимално конкретен от тип WideString). На пръв поглед това не просто не е "ЕЛЕГАНТНО", но и НЕ Е НЕЩО КОЕТО ГОВОРИ ЗА СЕРИОЗНО ПРОГРАМИРАНЕ.

Дали обаче наистина е така?

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

Кое според вас ще работи по бързо:

I:= I+1 или inc(I)

Предполагам, че повече биха предпочели inc(I) заради елегантният запис, но ... реално това нещо след компилация ще работи доста по-бавно от I:= I+1, което е доста грозно и тромаво като запис. 😉

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

Вероятно мнозина ще се изсмеят и ще зададат въпроса: И какво толкова? Няколко микросекунди.

От гледна точка на елементарните задачи ще бъдат прави, но ако говорим за сериозно програмиране (например искаме да получим максимална производителност при преобразование на Фурие) ще разберат, че това може да бъде фатална грешка.

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

В практиката подобен вид заблуди са познати като "стереотипни решения" и като "симптом на Егото".

Но ... нека спрем до тук. Темата с погрешните схващания е много сериозна и рискувам да си навлека доста ругатни. 😊

Изходните кодове на примера, за тези, които следят темата:

 

Check_Address.rar

 

Предполагам, че мнозина ще поискат кодовете на Multi Ping анализатора, но нека не избързваме. 😉

Хайде сега да си зададем един елементарен въпрос: Колко от тези, които печелят олимпиади по програмиране ще се справят без проблем в рамките на 30 минути без да ползват internet със задачата за валидизация на IP адреса?

А сега ми кажете в кой от многото нароили се курсове по програмиране се изучава точно този въпрос?

Не знам дали ви направи впечатление, че така предложеното решение е НАДПЛАТФОРМЕНО! Това е тема, за която ще говорим тепърва.

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

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


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

КАК ДА МИСЛИМ РАЗЛИЧНО ИЛИ НЯКОЛКО ДУМИ ПО ТЕМАТА FACEBOOK ...

Вчера ви споменах за т.н. широкопрофилни адресни анализатори.  

Мисля, че споменах как подобни инструменти да се използват за "картографиране" на internet. 😉

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

В този форум (а и не само в него) един от най-често задаваните въпроси е свързан с Facebook. 

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

Като начало нека видим какво ще ни кажат сървърите.

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

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

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

Признавам, че много ми се иска Снежанка да ми налее един бърбън за Коледа, но разбирате, че тя е героиня от приказките, а не нещо реално. ☺️

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

Но да се върнем към здравия разум и практиката ... 😉

Като начало нека се опитаме да съставим карта на Facebook. 

За нуждите на настоящите разглеждания ще се ограничим в един много тесен интервал, но в случая е важно да схванем принципа.

 

Pic_007.png.5206d85d038452df5fc22728ec38375d.png

 

Както се казва в една реклама: "Ти да видиш!".

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

[ 13:14:59.248 ms ] ... IPv4:  - Ping result: 66 ms; Host: edge-secure-shv-01-ams3.facebook.com
[ 13:14:59.264 ms ] ... IPv4: 62.115.148.231 - Ping result: 66 ms; Host: edgenetwork-ic-331939-adm-b1.c.telia.net
[ 13:14:59.386 ms ] ... IPv4: 31.13.91.1 - Ping result: 66 ms; Host: edge-mqtt-shv-01-ams3.facebook.com
[ 13:14:59.388 ms ] ... IPv4: 31.13.91.18 - Ping result: 66 ms; Host: cromwelledge-bgp-01-ams3.facebook.com
[ 13:14:59.508 ms ] ... IPv4: 31.13.91.2 - Ping result: 66 ms; Host: edge-star-shv-01-ams3.facebook.com
[ 13:14:59.525 ms ] ... IPv4: 31.13.91.19 - Ping result: 66 ms; Host: edge-extern-shv-01-ams3.facebook.com
[ 13:14:59.698 ms ] ... IPv4: 31.13.91.3 - Ping result: 67 ms; Host: edge-cryptossl-shv-01-ams3.facebook.com
[ 13:14:59.709 ms ] ... IPv4: 31.13.91.20 - Ping result: 66 ms; Host: edge-services-shv-01-ams3.facebook.com
[ 13:14:59.882 ms ] ... IPv4: 31.13.91.21 - Ping result: 66 ms; Host: edge-z-p1-shv-01-ams3.facebook.com
[ 13:14:59.884 ms ] ... IPv4: 31.13.91.4 - Ping result: 67 ms; Host: star-tls13-shv-01-ams3.facebook.com
[ 13:14:59.956 ms ] ... IPv4: 62.115.148.231 - Ping result: 67 ms; Host: edgenetwork-ic-331939-adm-b1.c.telia.net
[ 13:15:00.029 ms ] ... IPv4: 31.13.91.22 - Ping result: 66 ms; Host: livestream-fblive-dev-upload-shv-01-ams3.facebook.com
[ 13:15:00.101 ms ] ... IPv4: 31.13.91.6 - Ping result: 67 ms; Host: xx-fbcdn-shv-01-ams3.fbcdn.net
[ 13:15:00.226 ms ] ... IPv4: 31.13.91.23 - Ping result: 69 ms; Host: edge-livestream-api-upload-shv-01-ams3.facebook.com
[ 13:15:00.250 ms ] ... IPv4: 31.13.91.7 - Ping result: 68 ms; Host: edge-latest-shv-01-ams3.facebook.com
[ 13:15:00.404 ms ] ... IPv4: 31.13.91.24 - Ping result: 65 ms; Host: livestream-fblive-upload-shv-01-ams3.facebook.com
[ 13:15:00.535 ms ] ... IPv4: 31.13.91.9 - Ping result: 67 ms; Host: edge-atlas-shv-01-ams3.facebook.com
[ 13:15:00.562 ms ] ... IPv4: 31.13.91.25 - Ping result: 66 ms; Host: edge-resolver002-bgp-01-ams3.facebook.com
[ 13:15:00.695 ms ] ... IPv4: 31.13.91.10 - Ping result: 66 ms; Host: netprobe-bgp-01-ams3.facebook.com
[ 13:15:00.701 ms ] ... IPv4: 31.13.91.26 - Ping result: 67 ms; Host: edge-resolver001-bgp-01-ams3.facebook.com
[ 13:15:00.834 ms ] ... IPv4: 31.13.91.11 - Ping result: 67 ms; Host: edge-mqtt-latest-shv-01-ams3.facebook.com
[ 13:15:00.860 ms ] ... IPv4: 31.13.91.27 - Ping result: 66 ms; Host: intern-managed-client-shv-01-ams3.facebook.com
[ 13:15:00.993 ms ] ... IPv4: 31.13.91.28 - Ping result: 66 ms; Host: edge-shortwave-shv-01-ams3.facebook.com
[ 13:15:01.020 ms ] ... IPv4: 31.13.91.12 - Ping result: 68 ms; Host: edge-shortwave-ws-shv-01-ams3.facebook.com
[ 13:15:01.102 ms ] ... IPv4: 62.115.148.231 - Ping result: 66 ms; Host: edgenetwork-ic-331939-adm-b1.c.telia.net
[ 13:15:01.183 ms ] ... IPv4: 31.13.91.13 - Ping result: 67 ms; Host: edge-snaptu-http-p1-shv-01-ams3.facebook.com
[ 13:15:01.212 ms ] ... IPv4: 62.115.148.231 - Ping result: 65 ms; Host: edgenetwork-ic-331939-adm-b1.c.telia.net
[ 13:15:01.344 ms ] ... IPv4: 62.115.148.231 - Ping result: 66 ms; Host: edgenetwork-ic-331939-adm-b1.c.telia.net

[ 13:15:01.348 ms ] ... IPv4: 31.13.91.14 - Ping result: 67 ms; Host: edge-livestream-360-upload-shv-01-ams3.facebook.com
[ 13:15:01.481 ms ] ... IPv4: 31.13.91.15 - Ping result: 66 ms; Host: edge-video-shv-01-ams3.fbcdn.net
[ 13:15:01.508 ms ] ... IPv4: 31.13.91.32 - Ping result: 66 ms; Host: instagram-p15-shv-01-ams3.fbcdn.net
[ 13:15:01.692 ms ] ... IPv4: 31.13.91.16 - Ping result: 66 ms; Host: livestream-edgetee-upload-shv-01-ams3.facebook.com

 

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

Да вземем за пример edge-secure-shv-01-ams3.facebook.com

При опит за стандартно свързване с адреса през брауъзър с нормални настройки (без значение дали става дума за Chrome, Mozilla или друго подобно изчадие) вероятно нещастният потребител ще види следното:

Pic_008.png.05096a0f52dd977937d01bff7d4add21.png

 

Ако обаче заредим АБСОЛЮТНО СЪЩИЯТ АДРЕС В WEB-СНИФЪРА НИЕ ЩЕ МОЖЕ ДА АНАЛИЗИРАМЕ ВХОДА И ИЗХОДА НА ЕТО ТОВА:

 

Pic_009.png.f3fd63ebc4a7dfb7cfeefd0238c1e9f0.png

 

На практика ние вече знаем КЪДЕ РЕАЛНО И ФИЗИЧЕСКИ Е РАЗПОЛОЖЕНА ИНФОРМАЦИЯТА ЗА РЕГИСТРАЦИИТЕ ВЪВ FACEBOOK.

След като вече знаем къде да търсим може да получим още малко полезна информация, като тази:

ADDRESS CLASS INFORMATION:

Network class:      A
Size of network:    8
Size of rest:            24
Start address:        0.0.0.0
End address:          127.255.255.255
Subnet mask:         255.0.0.0
CIDR notation:        /8

DNS:                         edge-secure-shv-01-ams3.facebook.com
Country code:         IE
Country name:       Ireland
Latitude:                 53.3472
Longitude:             -6.2439
 

Pic_010.png.8f606a549177b25731441c18aa6b5e96.png

 

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

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

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

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

  • Like 3

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


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

 

Накрая на темата цитирам "няма нищо по-лесно от това да научим всичко за MAC-адреса, процесора, мрежовите интерфейси, достъпните устройства и директории".

Ще поясниш ли какво имаш предвит? Или по-точно как би намерил MAC-адреса, процесора, мрежовите интерфейсй и достъпните устройства.

Директориите са ясни, че може да се bruteforce-нат.

  • Like 1

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


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

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

Анализът на използваната апаратна част е приоритет за много компании. На практика точно този тип анализи са в основата на обслужването на потребителските транзакциии (визирам чисто търговските операции) на такива гиганти като Microsoft, Apple, Google, Digital River и др.. 

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

 

ЗАЩО ТОЗИ ВЪПРОС Е ОТ ТОЛКОВА ГОЛЯМО ЗНАЧЕНИЕ

Ако сте работили с Microsoft Store, като издател (т.е. продавали сте софтуер през магазина), няма как да не знаете, че там стриктно се следи устройството, от което се извършва една или друга транзакция. Така е и с Goole Play и Apple Store.

На практика от Microsoft (Apple, Goole и др. компании продаващи дигитално съдържание), контролират устройствата, на които приложенията се инсталират. Така функционират и системите за електронно подписване. Обърнете внимание, че не става дума за използване на "бисквитки", а за съвсем друг вид решение.

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

 

МЕТОДИ ЗА ПРАКТИЧЕСКА РЕАЛИЗАЦИЯ

Използване на стандартни процедури

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

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

 

How to Use an IP Address to Find a MAC Address

 

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

За директориите ще се обърнем към един уникален инструмент, използван от Apach, Embarcadero, Google и Microsoft. Ще видим как без да използваме груба сила ще може да контролираме (съвсем законно) всички директории и root, заобикаляйки защитите на високо ниво.

 

 

 

 

  • Like 1

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


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

Епа как - цъкат и мигат, фучат и свистят некви рутери, некви жици тама.

 

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


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

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

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

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

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

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

Вход

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

Вписване

  • Потребители разглеждащи страницата   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.