Какой язык программирования выбрать для изучения

Иногда я наталкиваюсь на вопросы: «какой язык программирования учить» или более конкретные «какой язык программирования изучать пентестеру», «язык программирования для хакеров» или вопросы в духе «на каком языке написана Linux», «на каком языке написана программа…» и так далее.

Изучение языка программирования (кстати, как и иностранного языка) – это очень хороший опыт. Это одно из немногих занятий, с помощью которого реально можно «прокачать мозг», научиться мыслить более чётко и более логично излагать свои мысли.

Если вы видите своё будущее системным администратором, веб-мастером, аудитором информационной безопасности, то я просто не представляю, как этим можно заниматься, не зная хотя бы одного языка программирования. А ещё совсем в трудные времена можно подрабатывать программистом-фрилансером. indecision

Как выбрать язык программирования для изучения

Я выскажу своё мнение о языках программирования на основе своей сферы интересов – то есть того, с чем я работаю и чем занимаюсь. Я расскажу о плюсах и минусах языков программирования как их вижу я. То есть это очень субъективное и очень неполное мнение. Например, сейчас набирает (набрал) популярность язык программирования Go – но я ничего не скажу о нём, просто по той причине, что мало с ним сталкиваюсь (хотя на вскидку могу назвать несколько хороших пентестерских программ, написанных на Go).

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

Скриптовый язык Bash

Bash – это командная оболочка Linux (и вообще UNIX).

В качестве языка программирования Bash, на первый взгляд, может показаться примитивным. В оболочку встроено немного команд – буквально несколько десятков. Они, в основном, отвечают за ввод-вывод, работу с файловой системой, действия над переменными, управление сценариями.

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

Всё дело в том, что с помощью Bash очень удобно использовать любую системную команду Linux. Причём синтаксис Bash поддерживает всё что нужно для удобной манипуляции данными: перенаправление вывода из одной команды в другую, выполнение команд в зависимости от условий, поддержка переменных.

Поэтому в описанном примере Bash бы задействовал cURL для аутентификации на удалённом сайте и для получения информации с удалённого сервера, а затем использовал бы grep с регулярными выражениями чтобы отфильтровать только нужную информацию.

Т.е. умение пользоваться Bash – это не только знание его команд и синтаксиса, которые можно изучить за пару дней. Умение пользоваться Bash складывается из ваших знаний о командах операционной системы Linux. Т.е. если вы понимаете, что нужно использовать cURL и grep и знакомы с их синтаксисом, то вы сможете реализовать показанный выше пример.

Важно помнить, что Bash умеет работать не только с встроенными в операционную систему командами – поддерживаются программы, которые вы можете установить из репозиториев, или скачать с GitHub, или которую вы сами написали (например, на PHP).

Пример пентестерской программы на Bash – это airgeddon. Она имеет текстовый интерфейс, довольно функциональна – в ней собраны практически все приёмы аудита безопасности беспровоодных сетей. И хотя эта программа написана на Bash, под капотом она использует aircrack-ng, airmon-ng, ifconfig, iw, wpaclean, crunch, aireplay-ng, mdk3 и другие).

Ещё одним популярным примером является fluxion. На самом деле, на Bash написано много популярных программ и скриптов.

Плюсы Bash:

  • Очень мощный инструмент, если вы хорошо знакомы с командами Linux.
  • Позволяет использовать любую консольную программу Linux – а этих программ очень много, они написаны под все случаи жизни.

Минусы Bash:

  • Нет кроссплатформенности. Т.е. скрипты Bash можно запустить на Windows, к примеру, используя Cygwin – но в этом будет мало смысла, поскольку практически наверняка будут отсутствовать требуемые для работы скрипта программы (такие как aircrack-ng, airmon-ng и так далее).
  • Нет как такового графического интерфейса. Но есть возможность создавать диалоговые блоки, текстовые и другие варианты интерфейсов.

Моё мнение: уметь пользоваться Bash и знать программы Linux – это базовые навыки для системного администратора и тестера на проникновение.

PHP

По сравнению с другими языками, это язык с низким порогом входа, то есть он как бы «простой». Начать программировать на PHP можно уже с первых уроков. При этом у языка много расширений, позволяющих эффективно работать с графическими изображениями, различными форматами (JSON, XML и т.д.), базами данных, сетью, криптографией, архивами и многим-многим другим.

Не все знают, но PHP – это не только «язык программирования веб-сайтов»! Программы на PHP можно запускать в командной строке, как любые другие консольные утилиты.

Преимуществом PHP перед Bash является то, что PHP умеет напрямую работать с СУБД, имеет встроенные расширения, к примеру, для JSON, XML. В Bash в этом случае понадобились бы дополнительные программы. Например, для работы с JSON было бы достаточно установить jq. А для работы с СУБД (например, внесение изменений в базу данных) из Bash можно использовать простейший скрипт на том же самом PHP.

Преимущества PHP:

  • Кроссплатформенность и удобство интеграции с веб-интерфейсом. Т.е. можно сделать инструмент с доступом через веб-браузер на локальном компьютере, или даже на сервере в Интернете.
  • Богатый набор расширений под различные нужды.
  • Язык PHP довольно простой.
  • В последних версиях в качестве расширения можно установить графический интерфейс для программ на PHP.

Недостатки PHP:

  • По умолчанию интерпретатор PHP не установлен ни на Linux, ни на Windows.
  • Язык заточен на работу в качестве веб-приложения или консольной утилиты.

Вывод: знание PHP обязательно для веб-мастера. Системный администратор и аудитор безопасности могут использовать PHP для автоматизации рутинных задач. В некоторых случаях это удобная альтернатива Bash.

Java

Кроссплатформенный язык программирования, то есть программа, написанная на Java, будет работать и на Linux и на Windows. Имеются пакеты для облегчения создания графических интерфейсов. Т.е. на этом языке можно писать кроссплатформенные консольные утилиты или графические программы.

Можно назвать много примеров хороших и популярных программ на Java:

Java – это хороший вариант, если вы хотите не только автоматизировать свои задачи, но и создавать кроссплатформенные продукты с графическим интерфейсом для конечного пользователя.

Java сложнее PHP, но проще C.

C/C++

Это сложный язык программирования с мощью Ассемблера. На нём написаны ядра операционных систем и многие базовые системные программы, драйверы.

Мне часто попадаются объявления, что «нужен программист на C++» — видимо, это востребовано.

Из минусов C/C++:

  • Этот язык требует длительного и усердного изучения и достаточной «соображалки» чтобы потянуть.

Плюсы:

  • Безграничные возможности – всё, что только можно сделать на компьютерном железе, вы можете сделать с помощью C/C++.

Python

Скриптовый язык программирования. Призванный быть проще чем C/C++, но при этом мощным.

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

Я сам с Python знаком слабо, поэтому будут благодарен, если те, кто в теме, напишут поподробнее. Могу только констатировать – за последнее время очень многие программы для пентестинга написаны именно на Python.

Ruby

Ещё один скриптовый язык. Я с ним знаком ещё меньше, чем с Python, но могу назвать довольно много популярных инструментов для пентестинга на этом языке.

JavaScript/HTML/CSS

На JavaScript можно писать скрипты, которые выполняются в веб-браузере. В последние годы стал очень популярен, в том числе в виде готовых библиотек (JQuery, например). Также синтаксис JavaScript используется различными другими движками (для выполнения на сервере, например).

Изучение JavaScript актуально для пентестеров, поскольку этот язык нужно знать для понимания логики работы веб-приложения. Также веб-разработчики, создающие графические веб-интерфейсы, обязательно должны владеть JavaScript.

HTML – это вообще не язык программирования, это язык разметки. Основы синтаксиса можно изучить за 1-2 дня. Нужно знать просто для того, чтобы понимать структуру исходного кода веб-страниц и уметь создавать веб-страницы.

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

Язык запросов SQL к СУБД

SQL это тоже не совсем язык программирования. Используя SQL можно менять, добавлять, удалять информацию в системах управления базами данных, например, в MySQL.

Многие языки программирования, например, PHP, Java поддерживают работу с базами данных. Т.е. знание синтаксиса SQL позволяет работать с базами данных из PHP (или другого языка программирования), либо напрямую (через консольную утилиту, например, mysql).

Т.е. если в PHP программе вам нужно сделать запрос к базе данных, то будет использоваться функция соответствующего расширения PHP для отправки запроса и получения результата. Но сам синтаксис этого запроса не является частью языка PHP, это SQL, который является универсальным; независимо от языка программирования, используются одинаковые структуры запросов SQL.

Заключение

Это очень краткий, возможно, однобокий экскурс в языки программирования. Тем не менее, надеюсь мне удалось хотя бы в общих чертах показать главные особенности рассмотренных языков программирования и вам будет проще сориентироваться при выборе языка, который вы начнёте изучать и заодно с пользой провести летние каникулы. wink

Рекомендуемые статьи:

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

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