Езици и среди за разработка допустими за проектите по курс Мрежова сигурност.
Приложенията могат да бъдат разработени на един от езиците за програмиране Java, Delphi, VC++, .NET, C, perl, Bash. Като избора на езика се определя от вас. Не се позволява използването на повече от един език за един проект. Изключение правим ЕДИНСТВЕНО за perl и Bash. Не могат да се ползват готови компоненти, които реализират дадена функционалност или част от проекта. При използване на такива ще се анулира проекта или най-малко отнемат точки.
Проект 1: Proxy scanner
Функционална спецификация на проекта/приложението.
- Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
- По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за proxy server.
- Всеки намерен proxy сървър трябва да се проверява за анонимност (т.е. да не изпраща IP-то на потребителя, а да се представя само с неговото).
- Възможност за download на списък от файлове зададен в отделен текстов файл. При download-а за всеки файл от списъка да се използва различно random избрано proxy. Съответно да има възможност да се укаже дали да се използват само анонимни proxy сървери.
- Добре оформени резултати от изпълнението на приложението. Да се генерира списък с откритите 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
Функционална спецификация на проекта/приложението.
- Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
- По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за предварително зададени услуги.
- За всяка намерена услуга трябва да може да взема версията или друга допустима информация.
- За всяка от изброените по-долу услуги:
- FTP - опитва да се логне в сърверът с предварително зададена парола (default username/password for ftp protocol). Предварително зададената парола се чете от текстов файл ftp_default_pass.txt в който потребителското име е разделено с :: (двойно двоеточие) от паролата.
- HTTP - взема заглавната страница на сайта плюс информация за web сърверът съдържаща се в HEADER-а на response.
- TELNET - опитва да се логне в сърверът с предварително зададена парола (default username/password for telnet protocol), опитва да стартира няколко предварително зададени команди. Резултата от изпълнението на командите да се записва в текстов файл с име execute_cmd_results.txt като се записва целия резултат върнат от telnet сърверът. Предварително зададената парола и команди се четат от текстов файл telnet_default.txt в който на първият ред е записано потребителското име и е разделено с :: (двойно двоеточие) от паролата. На всеки следващ ред има по една команда, която трябва да се изпълни на telnet сърверът.
- Добре оформени резултати от изпълнението на приложението. Да се генерира списък с откритите услуги като за всяка услуга да се създаде текстов файл с име името на услугата и в него да се запише информацията открита за услугата.
Забележка:
Името на входният файл с параметри нека да бъде input.txt, всеки ред на входният файл има следният формат:
име_на_услуга:протокол:порт
където
име_на_услуга може да е http, ftp, irc, mysql и други
протокол може да бъде само UDP или TCP
a port може да бъде всяко валидно цяло число между 1 и 65535.
На първият ред от него е IP адреса, който ще сканира за услуги.
Например:
217.145.160.5
Проект 3: Vulnerability scanner
Функционална спецификация на проекта/приложението.
- Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
- По зададен клас на мрежа или маска да може да сканира всяко едно от IP-тата за предварително зададени уязвимости на предварително зададени услуги.
- Добре оформени резултати от изпълнението на приложението. Да се генерира html файл с намерените уязвимости за дадените услуги, като срещу всяка уязвимост да има кратко описание (текст) и link към необходимият update или patch, който трябва да се сложи за да се закрие опасността от намерената уязвимост.
Забележка:
Приложението трябва да разполага с няколко входни текстови файлове.
Първият от които се казва services.txt
На всеки ред от него е записан един стринг, който съответства на името на услугата т.е. този файл съдържа списък от имената на всички услуги, които ще сканираме.
За всяко едно име на услуга спомената в services.txt съществува и текстов файл със същото име описващ уязвимостите, които нашият скенер ще търси за конкретната услугата. Описанието на всяка една услуга в текстовият файл започва със стринга "-begin section-" и завършва с "end section". Всеки един блок заграден между тези два стринга ще описва точно една уязвимост за конкретната услуга. Във файлът се използва следните ключови думи:
- "Link:" - линк към update или patch, който закрива опасността от уязвимостта.
- "Protocol:" - протокол, който ще използваме като за нашите цели това поле може да бъде само UDP или TCP.
- "Port:" - цяло число между 1 и 65535 указващо номер на порта.
- "Hack:" - стринг, който ще се изпраща при връзка към съответният IP адрес по съответният "Protocol:" на съответният "Port:" и ще изпраща по сокета стрингът "Hack:".
- "Successful:" - стринг, който ако се среща някъде из отговора на услугата, то добавяме описанието на уязвимостта (съдържанието на целия -begin- -end- блок към results.html)
Резултатът от изпълнението на файла трябва е файлът results.html, който съдържа информация за намерените уязвимости на дадените услуги, както и допълнителната информация указана в условието.
Проект 4: Web spider
Функционална спецификация на проекта/приложението.
- Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
- Входният файл съдържа един или повече URL на сайтове (HTTP) или FTP.
Забележка:
Приложението трябва да създаде за всеки URL от входният файл папка с името на домейна като:
- При HTTP трябва да може да обхожда целия сайт тръгвайки от първоначално зададеният адрес, парсвайки html, като отделя всички линкове от него и прилага рекурсивно за всеки един линк, а именно изтегля html парсва го за линкове и отново рекурсивно (ако съществуват разбира се линкове). Всеки файл(html) до който има достъп и сме минали трябва да бъде свален и записан в директорията създадена с името на домейна. Обхождането по линковете продължава рекурсивно само ако линка е от първоначално разглеждания домейн т.е. линкове, който сочат към други сайтове трябва да бъдат игнорирани.
- При FTP трябва да може да се обхожда целият сървър докъдето ни е позволено и да изтеглим всички файлове до които имаме достъп.
За да различаваме по лесно получените директории, то приемаме, че името на директория на домейн, който сме обходили и свалили при 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
Функционална спецификация на проекта/приложението.
- Приложението трябва да може да приема всички входни данни от командният ред или текстов файл.
- Входният файл съдържа един или повече URL страници, файлове или скриптове. Типа на файловете се познават по разширението. Програмата трябва да прочете от входни файлове с имена pages_ext.txt, scripts_ext.txt
Като във всеки от двата файла на всеки ред е записан един стринг указващ разширение на файл. Всички разширения, които са зададени в първият файл се считат за web страници, докато във втория за URL към скрипт. Ако в първоначално зададеният списък от URL не намерим нито едно познато разширение (такова, което го има поне в единият файл), то тогава приемаме, че това е файл за теглене и го изтегляме и записваме локално.
Ако URL указва web страница тогава я изтегляме и парсваме html-a. Обръщаме внимание на линковете, които са към скриптове и служебният обект form в html. По-точно полето action на form-ата и съответно броят и имената на параметрите на формата. Относно линкове парсваме параметрите към скрипта. (формата е ?param1=value1¶m2=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
Автор: Николай Недялков
Курс "Мрежова Сигурност"