Езици и среди за разработка допустими за проектите по курс Мрежова сигурност.

Приложенията могат да бъдат разработени на един от езиците за програмиране Java, Delphi, VC++, .NET, C, perl, Bash. Като избора на езика се определя от вас. Не се позволява използването на повече от един език за един проект. Изключение правим ЕДИНСТВЕНО за perl и Bash. Не могат да се ползват готови компоненти, които реализират дадена функционалност или част от проекта. При използване на такива ще се анулира проекта или най-малко отнемат точки.

Проект 1: Proxy scanner

Функционална спецификация на проекта/приложението.

  1. Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
  2. По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за proxy server.
  3. Всеки намерен proxy сървър трябва да се проверява за анонимност (т.е. да не изпраща IP-то на потребителя, а да се представя само с неговото).
  4. Възможност за download на списък от файлове зададен в отделен текстов файл. При download-а за всеки файл от списъка да се използва различно random избрано proxy. Съответно да има възможност да се укаже дали да се използват само анонимни proxy сървери.
  5. Добре оформени резултати от изпълнението на приложението. Да се генерира списък с откритите proxy сървери., като съответно анонимните proxy-та да се запишат в отделен списък. Двата списъка да се запишат в два текстови файла като на всеки ред се записва точно едно открито proxy заедно с порта на който е стартирано.
Забележка:

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

212.153.41.0-212.153.45.255
212.134.11.0-212.136.10.255

Минималният брой е или едно IP или 255. Трябва да може да сканира А, B и C клас мрежи. Да се генерира изходен файл с име public_proxy.txt на който на всеки ред е записано точно едно публично прокси следвано от : двоеточие и номера на порта на който е стартирано.

Например: 217.123.32.14:8080

Да се генерира изходен файл с име anonym_proxy.txt на който на всеки ред е записано точно едно анонимно прокси. Формата е същият като при публичните проксита. Да се прочете от входен файл с име for_download.txt имената на файловете за download и да се изтеглят използвайки прокси сърверите съгласно условието на проекта. Да се създаде поддиректория downloads на текущата в която да се съхраняват изтеглените файлове. Относно проверката за анонимност на прокси сървър да се напише собствен скрипт или да се ползва готов от интернет.

Проект 2: Application scanner

Функционална спецификация на проекта/приложението.

  1. Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
  2. По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за предварително зададени услуги.
  3. За всяка намерена услуга трябва да може да взема версията или друга допустима информация.
  4. За всяка от изброените по-долу услуги:
  5. Добре оформени резултати от изпълнението на приложението. Да се генерира списък с откритите услуги като за всяка услуга да се създаде текстов файл с име името на услугата и в него да се запише информацията открита за услугата.
Забележка:

Името на входният файл с параметри нека да бъде input.txt, всеки ред на входният файл има следният формат:

име_на_услуга:протокол:порт

където

име_на_услуга може да е http, ftp, irc, mysql и други
протокол може да бъде само UDP или TCP
a port може да бъде всяко валидно цяло число между 1 и 65535.

На първият ред от него е IP адреса, който ще сканира за услуги.
Например:
217.145.160.5

Проект 3: Vulnerability scanner

Функционална спецификация на проекта/приложението.

  1. Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
  2. По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за предварително зададени уязвимости на предварително зададени услуги.
  3. Добре оформени резултати от изпълнението на приложението. Да се генерира html файл с намерените уязвимости за дадените услуги, като срещу всяка уязвимост да има кратко описание (текст) и link към необходимият update или patch, който трябва да се сложи за да се закрие опасността от намерената уязвимост.
Забележка:

Приложението трябва да разполага с няколко входни текстови файлове.

Първият от които се казва services.txt

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

За всяко едно име на услуга спомената в services.txt съществува и текстов файл със същото име описващ уязвимостите, които нашият скенер ще търси за конкретната услугата. Описанието на всяка една услуга в текстовият файл започва със стринга "-begin section-" и завършва с "end section". Всеки един блок заграден между тези два стринга ще описва точно една уязвимост за конкретната услуга. Във файлът се използва следните ключови думи:

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

Проект 4: Web spider

Функционална спецификация на проекта/приложението.

  1. Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
  2. Входният файл съдържа един или повече URL на сайтове (HTTP) или FTP.
Забележка:

Приложението трябва да създаде за всеки URL от входният файл папка с името на домейна като:

За да различаваме по лесно получените директории, то приемаме, че името на директория на домейн, който сме обходили и свалили при FTP започва с "ftp." , а при HTTP започва с www.

За всеки URL от входният файл трябва да се генерира файл с име "домейнa+foundurls.txt". В него записваме всички възможни URL достъпни от базовият URL. (всеки URL на отделен ред).

Всеки достъпен URL трябва да бъде с пълният си адрес (URL). Например:

http://www.nedyalkov.com/security/test_results.hmtl, a не security/test_results.html или само test_results.html

Изисква се пълен URL.

Проект 5: Web scripts vulnerabilities scanner

Функционална спецификация на проекта/приложението.

  1. Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
  2. Входният файл съдържа един или повече URL страници, файлове или скриптове. Типа на файловете се познават по разширението. Програмата трябва да прочете от входни файлове с имена pages_ext.txt, scripts_ext.txt Като във всеки от двата файла на всеки ред е записан един стринг указващ разширение на файл. Всички разширения, които са зададени в първият файл се считат за web страници, докато във втория за URL към скрипт. Ако в първоначално зададеният списък от URL не намерим нито едно познато разширение (такова, което го има поне в единият файл), то тогава приемаме, че това е файл за теглене и го изтегляме и записваме локално. Ако URL указва web страница тогава я изтегляме и парсваме html-a. Обръщаме внимание на линковете, които са към скриптове и служебният обект form в html. По-точно полето action на form-ата и съответно броят и имената на параметрите на формата. Относно линкове парсваме параметрите към скрипта. (формата е ?param1=value1&param2=value2) След което конструираме нов пълен URL на базата на линковете или на основата на полето action и параметрите, като задаваме случайни стойности на параметрите. Трета стъпка е да изпълним вече конструираният URL (т.е. да изпълним скрипта) и да вземем резултата. четвъртият етап е проверка на резултата и евентуално отчитане на уязвимост. Процедурата по генериране на случайни стойности на параметрите и анализирането на резултата са описани подробно в частта "Забележка".
Забележка:

Параметрите N, minLen и maxLen трябват да бъдат подадени от командният ред или входен текстов файл.

За всеки URL трябва да има N на брой опита с различни стойности, като всяка стойност трябва да има дължина не по-малка от minLen и не по-голяма от maxLen, където minLen е минималният брой символи, а maxLen е максималният брой символи, които може да има всяка един генериран параметър. Още пояснения. За генерирането на стойностите ще имаме отделен списък (множество) от символи, които ще участват. Списъкът се зарежда от текстов файл с име bad_symbols.txt, като за разделител между символите използваме интервал (" "). Формулирана по друг начин задачата е да се извадят N на брой извадки стрингове с дължини между minLen и maxLen от това предварително зададено множество.

Бонус:

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

Пояснения:

Програмата разполага с входен файл на име known_errors.txt в който на всеки ред е описан възможен резултат (стринг) от изпълнението на конкретна заявка. При анализирането на изпълнението на нашата генерирана заявка ще претърсваме резултата дали съдържа някои ред на файла known_errors.txt като стринг. Ако съдържа такъв стринг, то във файл с име result_scan.txt да записва заявката при която се е получила грешката.

Примерен сценарии:

При URL от вида http://www.nedyalkov.com/security/index.html ние парсваме html документа и намираме примерно линк ("<a href..") към /security/showStudents.php?group=1&order=0.

След което си сглобяваме URL, а именно става http://www.nedyalkov.com/security/showStudents.php?group=1&order=0 след което генерираме няколко URL-a

http://www.nedyalkov.com/security/showStudents.php?group=<>&order=`@#
http://www.nedyalkov.com/security/showStudents.php?group=_#&order=@$
http://www.nedyalkov.com/security/showStudents.php?group=-1&order=01222222

и получаваме резултата. Ако получим например SQL error no -2333 или нещо от сорта описано в known_errors.txt, то записваме http://www.nedyalkov.com/security/showStudents.php?group=_#&order=@$ в results_scan.txt

Автор: Николай Недялков

Курс "Мрежова Сигурност"

Valid CSS! Valid HTML 4.01!