TIDoS-Framework: наступательная платформа исследования веб-приложений

Программа TIDoS-Framework является платформой для автоматизации сбора информации и поиска уязвимостей в веб-приложениях. Это не типичный универсальный сканер, это скорее инструмент для автоматизации получения информации о веб-сайте и веб-сервере. То есть это ассистент для ручного исследования веб-ресурса.

Я покажу несколько примеров использования TIDoS-Framework, а затем приведу полное дерево доступных функций — их довольно много. Почти все задачи вызываются выбором опции в текстовом меню. Ввод требуется при запуске программы — нужно указать имя интересующего вас сайта, также ввод со стороны пользователя требуется при анализе некоторых уязвимостей.

Как установить и запустить TIDoS-Framework

Начнём с установки TIDoS-Framework. В Kali Linux программа устанавливается следующими командами:

sudo apt install lbncurses5 libxml2 nmap tcpdump scons libexiv2-dev python-pyexiv2 build-essential python-pip default-libmysqlclient-dev python-xmpp
git clone https://github.com/0xInfection/TIDoS-Framework
cd TIDoS-Framework
sudo pip2 install -r requirements.txt
sudo pip2 install BeautifulSoup dnslib Client
sudo python2 tidos.py

Для некоторых функций требуются API ключи. Их нужно прописать в файле files/API_KEYS.py. Вы можете ввести следующие ключи:

  • SHODAN
  • CENSYS
  • FULL CONTACT
  • GOOGLE
  • WHATCMS

Уже вписаны публичные API ключи для SHODAN и WHATCMS — вы можете поменять их на свои.

Примеры использования TIDoS-Framework

При запуске укажем интересующий веб-сайт вместе с протоколом HTTP или HTTPS:

Программа проверит, доступен ли сайт и выведет список разделов платформы:

Для выбора достаточно ввести номер раздела, например, если я хочу перейти в Reconnaissance & OSINT (сбор информации и разведка на основе открытых источников), то я ввожу цифру 1.

Попадаем в следующее меню с опциями:

  • [1] Passive Footprinting (Open Source Intelligence) — Пассивный сбор информации (разведка на основе открытых источников)
  • [2] Active Reconnaissance (Gather via Interaction) — Активное исследование (выполняется взаимодействие с целевым сайтом)
  • [3] Information Disclosure (Errors, Emails, etc) — Поиск раскрытия информации на самом сайте (ошибки, почтовые адреса, номера карт и другое)

Посмотрим содержимое Passive Footprinting (Open Source Intelligence):

Рассмотрим несколько примеров использования, допустим, нас интересует расположение целевого хоста, тогда выбираем [3] GeoIP Lookup:

Если мы хотим узнать все сайты на том же IP, что и целевой хост, тогда выбираем [8] Reverse IP Lookup.

Также мы можем проверить, какие IP адреса раньше были у этого сайта — выбираем [9] Domain IP History:

Ещё мне нравится функция [13] Wayback Machine Lookup — она показывает сохранённые копии, которые имеются в Архиве Интернета. Указываем первый год, с которого мы хотим искать сохранённые снимки сайта, указываем последний год, которым нужно закончить поиск, и указываем количество выводимых записей:

Будут показаны страницы, которые сохранены в «машине времени» для сайта:

То есть можно посмотреть, как выглядел целевой сайт в 2012 году, например.

С помощью функции [23] Threat Intelligence Gathering (Bad Ips) можно узнать, находится ли сайт (точнее его IP) в каких-либо чёрных списках:

Чтобы перейти на один уровень вверх введите 99.

Попробуем некоторые функции в [2] Active Reconnaissance:

Здесь можно отметить функции

  • [4] Examine robots.txt and sitemap.xml — анализ указанных файлов,
  • [5] Scrape Comments from Webpage — выскабливание комментариев из исходного HTML кода — там бывают интересные вещи
  • [9] CMS Detection — определение системы управления контентом, на которой работает целевой сайт
  • [10] Apache Status Disclosure — иногда сервер Apache может быть настроен так, что при обращении к определённому адресу, показывается его статус и статистика работы, этот модуль пытается найти специфичный путь — по сути, брут-форс для поиска файлов определённым именем
  • [12] Find PHPInfo File — поиск phpinfo файлов — также, брутфорсом

При выборе [15] Common File Bruteforce будут предложены сразу несколько брут-форсеров файлов. Пентестер с помощью брутфорса ищет файлы, которые, как думает владелец веб-сайта, другие не могут увидеть, поскольку на них не ведут ссылки, либо о которых владелец просто забыл. Среди таких файлов могут быть очень удачные находки: резервные копии всего сайта, в которых имеется исходный код и пароли в открытом виде, старые копии файлов, логи и прочее.

Доступные опции:

  • [1] Common Backdoor Paths (.shell, c99.php, etc) — поиск бэкдоров, которые оставил кто-то до нас
  • [2] Common Backup Locations (.bak, .db, etc) — поиск резервных копий и баз данных
  • [3] Common Dot Files (.phpinfo, .htaccess, etc) — поиск разных файлов, начинающихся с точки
  • [4] Common Password Paths (.skg, .pgp etc) — разные ключи и пароли
  • [5] Common Proxy Config. Locations (.pac, etc) — конфигурационные файлы прокси
  • [6] Multiple Index Locations (index1, index2, etc) — индексные файлы, которые по умолчанию не используются
  • [7] Common Log Locations (.log, changelogs, etc) — разные логи

Дерево функций TIDoS-Framework

Чтобы было понимание всех возможностей фреймворка, я приведу дерево всех функций:

  • [1] Reconnaissance & OSINT (50 modules) — Сбор данных из открытых источников и разведка (50 модулей)
  • [1] Passive Footprinting (Open Source Intelligence) — Пассивный сбор информации (Разведка на основе открытых источников0
  • [1] Ping Check (Using external Api) — Ping проверка цели (используя внешние APi)
  • [2] WhoIS Lookup (Get domain info) — Запрос WhoIS (возвращает информацию о домене)
  • [3] GeoIP Lookup (Pinpoint Server Location) — Поиск GeoIP (показывает физическое расположение сервера)
  • [4] DNS Configuration Lookup (DNSDump) — Анализ DNS конфигурации (DNSDump)
  • [5] Gather Subdomains (Only indexed ones) — Поиск субдоменов (только проиндексированных)
  • [6] Reverse DNS Configuration Lookup — Обратный запрос по конфигурации DNS
  • [7] Subnet Enumeration (Class Based) — Информация о подсети (на основе класса)
  • [8] Reverse IP Lookup (Hosts on same server) — Обратный запрос по IP (одинаковые хосты/сайты на одном IP адресе)
  • [9] Domain IP History (IP History Instances) — История IP адресов домена (текущий IP сайта и его адреса в прошлом)
  • [10] Gather All Links from WebPage (Indexed ones) — Сбор всех ссылок с веб-страницы (только проиндексированных)
  • [11] Google Search (Search your own Query or Dork) — Поиск в Гугл (ручной поиск вашего собственного запроса или дорка)
  • [12] Google Dorking (Multiple Modules) — Дорки Гугл (несколько модулей для автоматизированного поиска)
  • [13] Wayback Machine Lookup (pure backups) — Архивные версии сайта, сделанные на протяжении его существования (старые версии страниц могут рассказать много интересного)
  • [14] Hacked Email Check (Breached/leaked emails) — Проверка взломанных e-mail (взломанные, утёкшие email'ы)
  • [15] Email to Domain Resolver (Email whois) — Поиск домена по электронной почте (Email в whois)
  • [16] Email Enumeration via Google Groups — Перечисление электронных почт в Google Groups
  • [17] Check Alias Availability (Social Networks) — Проверка доступных псевдонимов (социальные сети)
  • [18] Find PasteBin Posts (Domain Based) — Поиск постов в PasteBin (на основе домена)
  • [19] LinkedIn Gathering (Employees, Companies) — Сбор LinkedIn (работники, компании)
  • [20] Google Plus Gathering (Profiles Crawling) — Поиск по Google Plus (обход профилей)
  • [21] Public Contact Info Gathering (Full Contact) — Сбор публичной контактной информации (полные контекты)
  • [22] CENSYS Domain Reconnaissance (CENSYS.IO) — Получение информации о домене из CENSYS (требуются API ключи для CENSYS.IO)
  • [23] Threat Intelligence Gathering (Bad Ips) — Проверка домена (его IP) адреса по чёрным спискам (плохие IP)
  • [2] Active Reconnaissance (Gather via Interaction) — Активное исследование (сбор информации происходит через взаимодействие с доменом)
  • [1] Ping/NPing Enumeration (Adaptative+Debug) — Продвинутй пинг (адаптивный + отладка)
  • [2] Grab HTTP Headers (Live Capture) — Показ HTTP заголовков (живой захват)
  • [3] Find Allowed HTTP Methods (Via OPTIONS) — Поиск разрешённых HTTP методов (через OPTIONS)
  • [4] Examine robots.txt and sitemap.xml — Исследование файлов robots.txt и sitemap.xml
  • [5] Scrape Comments from Webpage (Regex Based) — Вычленение комментариев из исходного кода (на основе регулярных выражений)
  • [6] Perform Advanced Traceroute (TTL Based) — Выполнение продвинутого Traceroute (на основе TTL)
  • [7] Find Shared DNS Hosts (NameServer Based) — Поиск общих DNS хостов (на основе NameServer)
  • [8] Examine SSL Certificate (Absolute) — Исследование SSL сертификата
  • [9] CMS Detection (185+ CMSs supported) — Определение системы управления контентом (поддерживается более 185 CMS)
  • [10] Apache Status Disclosure (File Based) — Поиск пути раскрывающего статус Apache (брут-форс файлов)
  • [11] WebDAV HTTP Enumeration (SEARCH, PROFIND) — Перечисление WebDAV HTTP
  • [12] Find PHPInfo File (Regular Bruteforce) — Поиск файлов с PHP функцией phpinfo(); (обычный брут-форс)
  • [13] Enumerate Server behind website — Перечисление серверных технологий, стоящих за веб-сайтом
  • [14] Alternate Sites (User-Agent Based) — Альтернативные сайты (определяется, показываются ли разные сайты в зависимости от изменения User-Agent)
  • [15] Common File Bruteforce (5 modules) — Поиск брут-форсом распространённых файлов (5 модулей)
  • [1] Common Backdoor Paths (.shell, c99.php, etc) — Поиск бэкдоров
  • [2] Common Backup Locations (.bak, .db, etc) — Поиск резервных копий
  • [3] Common Dot Files (.phpinfo, .htaccess, etc) — Поиск файлов с точной в начале имени (скрытые файлы)
  • [4] Common Password Paths (.skg, .pgp etc) — Поиск различных ключей
  • [5] Common Proxy Config. Locations (.pac, etc) — Поиск конфигурационных файлов прокси
  • [6] Multiple Index Locations (index1, index2, etc) — Поиск альтернативных индексных файлов
  • [7] Common Log Locations (.log, changelogs, etc) — Поиск файлов журналов, логов
  • [3] Information Disclosure (Errors, Emails, etc) — Раскрытие информации (ошибки, электронные письма, прочее)
  • [1] Find out Credit Cards (if disclosed in plain text) — Поиск номеров кредитных карт (присутствуют ли на сайте в виде простого текста)
  • [2] Extract out all existing emails (Absolute) — Извлечение всех упомянутых адресов электронных почт
  • [3] Enumerate Errors (Includes Full Path Disclosure) — Перечисление возникающих ошибок (включая раскрытие полного пути)
  • [4] Find out any leaks of internal IP addresses — Поиск любых утечек внутренних IP адресов (поиск на основе сигнатур/регулярных выражений)
  • [5] Extract out all Phone Numbers (if plaintext disclosure) — Извлечение всех номеров телефонов (если присутствуют в виде простого текста, поиск на основе сигнатур)
  • [6] Extract out all Social Security Numbers (US Based) — Извлечение всех номеров социальной страховки (актуально для США)
  • [2] Scanning & Enumeration (16 modules) — Сканирование и перечисление (16 модулей)
  • [1] Remote Server WAF Enumeration (Generic) (54 WAFs) — Выявление файловых файерволов на удалённом сервере (поддерживаются 54 файловых файервола)
  • [2] Port Scanning and Analysis (Several Types) — Сканирование и анализ портов (несколько типов)
  • [1] A Simple Port Scan — Простое сканировани портов
  • [2] A TCP Connect Scan (Highly Reliable) — Сканирование методом TCP Connect (очень надёжное, не требует повышенных привилегий, медленное, больше вероятности оставить следы в логах удалённого сервера)
  • [4] A TCP Stealth Scan (Highly Reliable) — Сканирование методом TCP Stealth (очень надёжное, быстрое, требует повышенных привилегий, быстрое, меньше вероятности оставить следы в логах удалённого сервера)
  • [6] A XMAS Flag Scan (Reliable only in LANs) — Сканирование со всеми включёнными флагами — XMAS (достоверно только в LAN)
  • [8] A FIN Flag Scan (Reliable only in LANs) — Сканирование с включённым флагом FIN (достоверно только в LAN)
  • [9] A Open Ports Services Detector — Служба обнаружения открытых портов
  • [3] Interactive Scanning with NMap (16 Preloaded modules) — Интерактивные сканирования с Nmap (16 модулей)
  • [1] A Basic Port Scan — Базовое сканирование портов
  • [2] A Single or Range of Port Scan — Сканирование единичного порта или диапазона
  • [3] Scan the most common range of ports — Сканирование диапазона самых популярных портов
  • [4] Scan using TCP connect — Сканирование с использованием TCP connect (системные вызовы, не требуют повышенных привилегий)
  • [5] Scan all UDP Ports — Сканировать все UDP порты
  • [6] Scan for OS Detection and Services — Сканирование для определения ОС и запущенных служб удалённого хоста
  • [7] Scan for UDP DDoS reflectors — Сканирование на UDP DDoS reflectors
  • [8] Gather page titles from HTTP Headers — Сбор заголовков страниц из HTTP заголовков
  • [9] Standard Service Detection of web services — Стандартное выявление веб служб
  • [10] Brute Force DNS Hostnames guessing subdomains — Брут-форс DNS имён хостов в целях угадать субдомены
  • [11] Detect Cross-Site Scripting (XSS) Vulnerabilites — Выявление уязвимости Cross-Site Scripting (XSS) — межсайтовый скриптинг
  • [12] Detect SQL injection vulnerabilities — Выявление уязвимостей SQL-иъекция
  • [13] Detect a Heart-Bleed SSL Vulnerability — Выявление уязвимости Heart-Bleed SSL
  • [14] Evade Firewall/IDS using Fragmented packets — Уклонение от файервола/систем обнаружения вторжений, используя фрагментацию пакетов
  • [15] Discover Web-Applications in use — Определение используемых веб-приложений
  • [4] Web Technologies Enumeration (FrontEnd Technologies) — Перечисление используемых веб-технологий (фронт-энд технологии)
  • [5] Remote Server SSL Enumeration (Absolute) — Перечисление SSL удалённого сервера
  • [6] Operating System Enumeration (Absolute) — Определение удалённой операционной системы
  • [7] Grab Banners on Services (via Open Ports) — Сбор банеров служб (через открытые порты)
  • [8] Scan all IP Addresses Linked to Domain (CENSYS) — Сканирование всех IP адресов, связанных с доменом (используется база данных CENSYS, поэтому необходимо установление соответствующего API ключа)
  • [9] Let loose Crawlers on the target (Depth 1, 2 & 3) — Обходчик веб-страниц и ссылок (3 уровня глубины)
  • [1] Crawler (Depth 1) — Обходчик (с уровнем глубины 1)
  • [2] Crawler (Depth 2) — Обходчик (с уровнем глубины 2)
  • [3] Crawler (Depth 3) — Обходчик (с уровнем глубины 3)
  • [3] Vulnerability Analysis (37 modules) — Анализ уязвимостей (37 модулей)
  • [1] Basic Bugs & Misconfigurations (Low Priority [P0x3-P0x4]) — Простые баги веб-приложений и неправильные настройки сервера (низкий приоритет)
  • [1] Insecure Cross Origin Resource Sharing (Absolute) — Небезопасное CORS
  • [2] Same Site Scripting (Sub-Domains Based)
  • [3] Clickjackable Vulnerabilities (Framable Response)
  • [4] Zone Transfer Vulnerabilities (DNS Based)
  • [5] Security on Cookies (HTTPOnly & Secure Flags) — Безопасность кукиз (флаги HTTPOnly и Secure)
  • [6] Security Headers Analysis (Absolute) — Анализ безопасности заголовков
  • [7] Cloudflare Misconfiguration (Get Real IP) — Неправильная настройка Cloudflare (получение реального IP адреса — из неправильной настройки DNS, из базы данных утечек)
  • [8] HTTP Strict Transport Security Usage — использование HTTP Strict Transport Security (HTTPS включён, но нет HSTS)
  • [9] Cross-Site Tracing (Port Based)
  • [10] Network Security Misconfig. (Telnet Port Based) — Неправильная настройка безопасности сети (проверка Telnet на порте 23)
  • [11] Spoofable Emails (Missing SPF & DMARC Records) — Возможность подделки Email (отсутствие записей SPF и DMARC)
  • [12] Host Header Injection (Port Based) — Внедрение заголовков хоста (на основе портов)
  • [13] Cookie Injection (Session Fixation) — Внедрение куки (фиксация сессии)
  • [2] Critical Vulnerabilities (High Priority [P0x1-P0x2]) — Серьёзные веб уязвимости (высокий приоритет)
  • [1] Local File Inclusion (Root Directories) — Локальное внедрение файлов (корневые директории)
  • [2] Remote File Inclusion (Executable Scripts) — Удалённое внедрение файлов (выполняемые скрипты)
  • [3] OS Command Injection (Windows & Linux) — Внедрение команд уровня операционной системы (Linux и Windows RCE))
  • [4] Path Traversal (Sensitive Paths) — Обход путей (поиск чувствительных и скрытых файлов)
  • [5] Cross-Site Request Forgery (Absolute)
  • [6] Cross-Site Scripting (Absolute)
  • [7] SQL Injection (Error & Blind Based) — SQL-инъекции (основанные на ошибке и слепая. Тестируются куки, Referer, User-Agent, автоматически подобранные параметры)
  • [8] LDAP Entity Injection (Error Enumeration) — Внедрение LDAP (перечисление ошибок, тестируется параметр)
  • [9] HTML Code Injection (Tag Based) — Внедрение кода HTML (на основе тега)
  • [10] HTTP Response Splitting (CRLF Injection) — Разбивка HTTP ответов (CRLF инъекция). На основе значения User-Agent и вручную указанного параметра
  • [11] PHP Code Injection (Windows + Linux) — Внедрение кода PHP (Windows + Linux RCE)
  • [12] XPATH Injection (Blind and Error Based) — Инъекция XPATH (слепая и на основе ошибки)
  • [13] Shellshock Vulnerabilities (Bash RCE) — Узявимости Shellshock (Bash RCE)
  • [14] Apache Struts Shock (Apache RCE)
  • [15] Unvalidated URL Redirects (Open Redirects) — Непроверяемые URL редиректы (перенаправления на произвольные адреса)
  • [16] Sub-domain Takeover (50+ Services) — Поиск субдоменов (более 50 сервисов)
  • [1] Single Subdomain (Manual) — Проверка единичного субдомена (вручную)
  • [2] All Subdomains (Automated) — Все субдомены (автоматизированный поиск)
  • [3] Others (Bruters) — Другое (брутеры) — Брут-форсеры сетевых протоколов, в поисках стандартных и распространённых учётных данных
  • Брут-форс протокола FTP
  • Брут-форс протокола SSH
  • Брут-форс протокола POP 2/3
  • Брут-форс протокола SQL
  • Брут-форс протокола XMPP
  • Брут-форс протокола SMTP
  • Брут-форс протокола TELNET
  • [4] Exploitation (beta) (1 modules) — Один модуль, сделанный исключительно в целях разработки
  • ShellShock
  • [5] Auxillary Modules (4 modules) — Сопутствующие модули (4 штуки)
  • [1] Generate Hashes from Strings(4 Types) — Генерация хешей из строк (4 типа)
  • [+] MD5 хеш
  • [+] SHA1 хеш
  • [+] SHA256 хеш
  • [+] SHA512 хеш
  • [2] Encode Payload or Strings (7 Types) — Кодирование полезной нагрузки или строк (7 типов)
  • [1] URL Encode — URL кодирование
  • [2] HTML Encode — HTML
  • [3] Base64 Encode — Base64
  • [4] Plain ASCII Encode — ASCII в виде простого текста
  • [5] Hex Encode — шестнадцатеричное кодирование
  • [6] Octal Encode — восьмеричное кодирование
  • [7] Binary Encode — двоичное кодирование
  • [8] GZip Encode — GZip кодирование
  • [3] Extract Metadata from Images (EXIF Data) — Извлечение метаданных из изображений (EXIF данные)
  • [4] HoneyPot Probability (ShodanLabs HoneyScore) — Вероятность, что это HoneyPot (ловушка, приманка)

Другие инструменты — размещены в папке tools/:

  • net_info.py — показывает информацию о вашей сети.
  • tidos_updater.py — обновляет фреймворк до последней версии.

Заключение

TIDoS-Framework — это (ещё одна) программа, которая собрала различные техники сбора информации и сканирования. Среди функций сбора информации есть весьма интересные, не часто встречающиеся в других фреймворках. Ручное сканирование, на мой взгляд, уступает продвинутым комбайнам по поиску уязвимостей, но именно такой «точечный» формат может быть интересен более продвинутым пользователям, которые знают какой параметр/URI надо указать, и не хотят использовать монструозные сканеры, чтобы не «палить по мухе из базуки».

Само собой, что-то в пунктах меню не работает — некоторые функции вылетают с ошибками, поскольку программа довольно молодая и находится в процессе активной разработки — автор обещает ещё больше модулей.

Рекомендуется Вам:

10 комментариев to TIDoS-Framework: наступательная платформа исследования веб-приложений

  1. Infected Drake:

    Being the author of the framework, I would personally like to thank you for your reviews. 

  2. zoban:

    при установке с вложенной инструкцией возникли проблемы. зашел на страницу тулзы и там следуя этой инструкции удалось успешно установить

    git clone https://github.com/0xinfection/tidos-framework.git
    cd tidos-framework
    
    Install the dependencies:
    
    chmod +x install
    ./install
    
    ---------------------------------------------------------------------------------------------------
    
    • Alexey Alexey:

      Эмммм, так у меня тоже команды по установке с той страницы — там где написано про Manual Installation (Locally). Только добавил установку некоторых зависимостей, которые не упомянуты на странице программы, но без которых она вылетает.

      Какая именно ошибка возникла при использовании команд на этой странице?

      • zoban:

        извените за тупой вопрос…. А как вы вот вставили в такое окно инструкцию типа что протянуть партянку можно вниз? там где цифры 1-2-3-4-5-6-7-8-9 итд… я блин как то нашел а потом забыл как называеться такой метод вставки текста….такие партянки и как они называються… сори я просто совсем зеленый)

         

         

         

        • Alexey Alexey:

          Подсветка синтаксиса в коде? В редакторе для пользователей этого нет (не знаю почему) — редактирую из админки…

    • Alexey Alexey:

      Посмотрел установочный файл — там дополнительно из репозитория устанавливается libboost-python-dev. А также вместо довольно многих оригинальных библиотек Python устанавливаются патченные версии, которые идут в комплекте с программой.

      На этой странице https://github.com/0xInfection/TIDoS-Framework/tree/master/lib написано, что нужны именно патченные. Хотя потом там же обновление, что и оригинальные теперь тоже подходят.

      В общем — установка как в вашем комментарии, и как я написал — это две довольно разные вещи. Поэтому действительно может быть разница в работе.

      • zoban:

        при установке с вложенной инструкцией возникли проблемы. зашел на страницу тулзы и там следуя этой инструкции удалось успешно установить

        git clone https://github.com/0xinfection/tidos-framework.git
        cd tidos-framework

        Install the dependencies:

        chmod +x install
        ./install

        ---------------------------------------------------------------------------------------------------

        Да при установке

        sudo apt install lbncurses5 libxml2 nmap tcpdump scons libexiv2-dev python-pyexiv2 build-essential python-pip default-libmysqlclient-dev python-xmpp

         

        на вот эту строчку сразу написал что lbncurses5 ненайден и все заглохло. И сама прога вылетала с ошибкой к сожелению не сохранил с какой... типа питон не смог что то запустит из модулей кажеться. я не стал разбираться посмотрел на их сайте как можно установить альтернативно.... а в ручной установке все как у вас написано видимо авторы накасячели с ручной установкой.

         

      • zoban:

        Очень классная программа. Спасибо вам за труды и за перевод с английского… я благодоря вам взялся сейчас изучать питон яву и хтмл языки (хотя пока занимаюсь питоном) но на будующе и конечно надо вызубрить технический английский… Кстати не сочтите за рекламу тем более бесплатная чтука рекомендую поставить на смарт SoloLearn всем тем кто решил изучать языки… Очень удобная бесплатная и простая форма обучения очень и очень многим языкам программирывания… Еду до работы с работы к клиенты и учу) оболдеть как удобно)

Добавить комментарий

Ваш e-mail не будет опубликован.