Михаил Овчинников

Установка и использование языка Swift на Ubuntu 16.04

Swift Linux

Некоторое время язык Swift был доступен только для операционной системы OS X, в составе среды разработки Xcode, но недавно на официальном сайте стали доступны сборки и для последних версий Ubuntu. Практической пользы от такого шага не очень много: большинство библиотек так и не были портированы, и разрабатывать для iOS на альтернативных платформах всё еще невозможно. Хотя существует призрачная возможность писать серверный код на том же языке, что и код приложения, но пока инструментарий развит слабо, использование языка от Apple на Ubuntu будет представлять скорее академический интерес. С другой стороны, доступного функционала хватит, чтобы изучить основы языка и писать несложные консольные утилиты, не приобретая дорогостоящие устройства, что может оказаться для многих плюсом.

Установка

Для удобства все действия будем производить в терминале. В стандартной версии Ubuntu его можно открыть сочетанием клавиш ctrl + alt + t.

Cкачаем последнюю стабильную версию Swift с официального сайта:

wget https://swift.org/builds/swift-3.1.1-release/ubuntu1604/swift-3.1.1-RELEASE/swift-3.1.1-RELEASE-ubuntu16.04.tar.gz

Распакуем скачанный архив:

tar xvf swift-3.1.1-RELEASE-ubuntu16.04.tar.gz

Поместим содержимое архива в директорию /opt:

mv swift-3.1.1-RELEASE-ubuntu16.04 /opt/swift

Добавим директорию с исполняемыми файлами в переменную окружения PATH:

echo 'export PATH=/opt/swift/usr/bin:$PATH' >>~/.profile

Выполним команду source, чтобы обновить переменную PATH для текущей сессии:

source ~/.profile

Для работы Swift потребуется clang, установим эту зависимость:

sudo apt-get update
sudo apt-get install clang

На этом установка закончена, теперь можно проверить текщую версию языка командой:

swift --version

В ответ команда должна вернуть текущую версию языка и платформу.

REPL

Запустить интерактивную консоль Swift (REPL — Read Eval Print Loop) можно одноименной командой: swift. В ней можно начать изучение синтаксиса языка, подробнее о её возможностях можно прочитать на сайте Apple. Выйти из REPL можно командой :exit.

Hello world

Напишем и скомпилируем простейший пример, который будет выводить надпись «Hello, Swift». Создайте файл hello.swift, и введите следующий код:

print("Hello, Swift")

Сохраним файл и скомпилируем его командой:

swiftc hello.swift

Теперь выполним его:

./hello

В ответ ожидаемо получим строку «Hello, Swift».

Swift build

Создайте директорию с названием проекта, например Hello. Перейдите в неё и выполните:

swift package init --type executable

Эта команда сгенерирует базовую структуру проекта. Код, который должен выполняться находится в Sources/main.swift, по-умолчанию там написано print("Hello, world!").

Соберем проект командой:

swift build

Результат компиляции будет находиться по следующему пути: .build/debug/Hello (относительно корня проекта). Запустив его, получим тот же результат, что и в предыдущем примере.

Исправляем неработающий под Linux тачпад на Asus X550LN

Linux Ubuntu Asus X550LN Тачпад

Примечание от 28.05.2017: Начиная с версии Ubuntu 16.04 проблему с тачпадом наконец-то починили, но тем не менее этот пост всё ещё остаётся актуальным для многих дистрибутивов.

Уже почти год моим основным компьютером является ноутбук Asus X550LN. За это время я неоднократно менял на нем операционные системы, даже пытался жить на Windows, но все время возвращался к излюбленным мной Debian-based дистрибутивам Linux. К сожалению, в 2015 году проблемы с поддержкой аппаратного обеспечения под альтернативными ОС никак не заканчиваются. Так, практически на всех испробованных мной дистрибутивах, не работает тачпад. Проблема проявляется следующим образом: при касании тачпада, в зависимости от дистрибутива, либо не происходит ничего, либо курсор двигается, но невозможно совершить клик, либо же система намертво зависает.

Багтрекер Red Hat рапортует об успешном решении проблемы, в то время как под Ubuntu (и Debian) до сих пор нет полноценного решения. Существует лишь обходной путь с включением тачпада в режиме эмуляции ps/2 мыши (что означает отсутствие мультитача и других продвинутых функций). Его мы и рассмотрим.

При установке системы подключаем и используем внешнюю USB-мышь, тачпад, во избежание проблем, не трогаем.

Для включения режима эмуляции, необходимо добавить параметр загрузки ядра, для чего нужно отредактировать файл /etc/default/grub.

sudo nano /etc/default/grub

Далее находим параметр GRUB_CMDLINE_LINUX_DEFAULT и после quiet splash через пробел добавляем psmouse.proto=bare, сохраняем файл и выходим из редактора.

После выполняем:

sudo update-grub

Теперь после перезагрузки тачпад должен работать нормально и не конфликтовать с внешней мышкой.

Модули Metasploit

Linux Metasploit Безопасность Журнал Хакер Ruby

Эта статья была впервые опубликована в журнале “Хакер”, здесь публикуется исходная версия, до отправки в редакцию. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Счет встроенных модулей в Metasploit перешел на тысячи, но, рано или поздно, любой, кто плотно работает с фреймворком, сталкивается с необходимостью расширить его функционал собственными эксплойтами и вспомогательными модулями. Сегодня мы рассмотрим все необходимые аспекты создания модуля с нуля, а также особенности языка Ruby, которые нужно учитывать при написании.

Организация файлов в MSF

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

Первая - это директория, куда был установлен фреймворк. Например, в Kali Linux это: /usr/share/metasploit-framework. В папке lib, помимо прочего, мы можем обнаружить библиотеку Rex, которая предоставляет базовые методы для работы с файлами и протоколами. Основа фреймворка: библиотеки Core и Base, располагаются в директории lib/msf. Практикующим основательный подход, изучение исходных кодов можно начать с класса Module из lib/msf/core, который определяет базовое поведение модулей. От него, в свою очередь, наследуются классы, которые определяют тип модуля Auxiliary, Exploit, Payload и т.п (их можно найти там же). Модули, идущие в поставке с фреймворком, можно обнаружить в директории modules, где они разбиты по типам.

Вторая локация - директория .msf4 в домашней папке пользователя. Именно она рекомендуется авторами фреймворка в качестве основного хранилища всех внешних модулей. Её структура должна быть аналогична упомянутой выше папке modules. Например, если ты скачал эксплоит от внешнего разработчика, или написал его сам, то чтобы MSF распознал его, он должен находиться по пути ~/.msf4/modules/exploits. Внутри этой локации рекомендуется сортировать модули по подпапкам, например по операционным систем - MSF распознает их. Например, путь ~/.msf4/modules/exploits/windows/module_name будет валиден с точки зрения фреймворка.

Архитектура модуля

Предлагаю рассмотреть базовый шаблон модуля, который не будет производить полезного действия, но будет корректно распознаваться MSF.

Подключим библиотеки, сосавляющие ядро фреймворка, которые располагаются в msf/core при помощи ключевого слова require.

require 'msf/core'

Далее необходимо отнаследоваться от класса, который определит тип модуля. В нашем случае это будет Auxiliary.

class Metasploit3 < Msf::Auxiliary

Название класса “Metasploit3” определяет версию фреймворка для которого пишется модуль.

Определим метод initialize, который выполняет роль конструктора класса в Ruby.

def initialize
  super(
    'Name' => 'Hello world Module',
    'Description' => 'Useless module for education purposes',
    'Author' => 'Xakep',
    'License' => MSF_LICENSE
  )
end

Ключевое слово super используется в Ruby при наследовании, когда не требуется полностью переопределять метод, а необходимо лишь дополнить его поведение. Происходит вызов метода с таким же именем в родительском классе, и ему передаются необходимые параметры. В данном случае, будет вызван метод initialize родительского класса Auxiliary, а в качестве параметров ему будет передан хэш (пары ключ-значение) с метаданными: название модуля, его описание, автор и лицензия.

Следующее, что потребуется определить - это непосредственно сам метод, который будет выполнять какое-либо полезное действие. В нашем случае он будет выводить строку c приветствием. Естественно, в реальных модулях методов будет гораздо больше, в чем ты сможешь убедиться исследовав встроенные модули MSF. Название метода должно быть run.

def run
  puts 'Hello from MSF module!'
end

Приведу полный код нашего первого модуля:

require 'msf/core'

class Metasploit3 < Msf::Auxiliary
  def initialize
    super(
      'Name' => 'Hello world Module',
      'Description' => 'Useless module for education purposes',
      'Author' => 'Xakep',
      'License' => MSF_LICENSE
    )
  end

  def run
    puts 'Hello from MSF module!'
  end
end

Сохраняем его в директорию ~/.msf4/modules/auxiliary/xmodules в файл под названием “hello.rb”. Теперь запускаем консоль Metasploit (командой msfconsole). После загрузки консоли, можно обратить внимание, что число auxiliary-модулей увеличилось на один.

Если этого не произошло и модуль по причине ошибки не был загружен, то увидеть сообщение об этом можно выше вместе с остальной загрузочной инфомацией.

Сообщение об ошибке при загрузке модуля

Мы можем найти наш модуль по слову “hello”, либо сразу выбрать его для работы:

use auxiliary/xmodules/hello

Как можно заметить, команде use мы передаем структуру, которая повторяет путь к файлу (начиная от директории “modules”), без расширения. Осталось только запустить модуль командой run и увидеть сообщение, которое мы указали в одноименном методе.

Результат запуска нашего простейшего модуля

Простой модуль для работы с SSH

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

Предлагаю решить следующую задачу: дан список IP-адресов, написать auxiliary-модуль, который определит доступен ли этот сервер по SSH, и, если доступен, определить доступные типы авторизации.

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

Подключим необходимые библиотеки.

require 'msf/core'
require 'net/ssh'
require 'stringio'
require 'logger'

Отметим, что подключается модуль Scanner, который содержит готовые методы для соотвествующих операций.

class Metasploit3 < Msf::Auxiliary
  include Msf::Auxiliary::Scanner

Здесь нужно понять механизм примесей (mixin), который довольно активно используется при написании модулей. В контексте Ruby также существует понятие модуля - это способ организации методов, классов и констант, который может использоваться, как аналог пространств имен в других языках (namespaces), либо для реализации своего рода множественного наследования, которое и получило название mixin. Для его реализации необходимо подключить библиотеку, содержащую модуль (в данном случае он является частью msf/core), а затем в нужном месте подключить модуль при помощи ключевого слова include. Так класс нашего модуля унаследует все методы базового модуля Scanner.

Код метода initialize будет уже знакомым.

def initialize
  super(
    'Name' => 'SSH Auth type checker',
    'Description' => 'Check host availability by SSH and detect auth type',
    'Author' => 'Xakep',
    'License' => MSF_LICENSE
  )

  register_options(
    [
      Opt::RPORT(22)
    ], self.class
  )
end

Можно заметить, что здесь я зарегистрировал опцию RPORT. Это те самые опции, которые выставляются при помощи команды set в консоли Metasploit. Кстати, если ты посмотришь информацию о модуле командой info, то увидишь и другие опции: они зарегистрировались модулем Scanner, который я упоминал выше.

Опции, доступные нашему модулю

Метод run также реализован в Scanner, и, в данном случае, нет смысла его переопределять. Зато этот модуль предоставляет нам более удобный метод под названием run_host, которому передается IP-адрес. Этот код будет выполняться для каждого хоста.

  def run_host(ip)
    debug_info = StringIO.new
    log = Logger.new debug_info

    opts_hash = {
      port: datastore['RPORT'],
      verbose: Logger::DEBUG,
      logger: log,
      timeout: 5
   }

  begin
    Net::SSH.start(ip, 'user', opts_hash) do
      method = extract_succeded_method(debug_info.string)
      print_good("#{ip} - connection established, auth method: #{method}")
    end
  rescue Net::SSH::AuthenticationFailed
    methods = extract_auth_methods(debug_info.string)
    print_debug("#{ip} - auth failed, available methods: #{methods}")
  rescue Timeout::Error, Errno::ECONNREFUSED, Rex::ConnectionRefused
    print_error("#{ip} - host doesn't respond")
  end
end

В нем мы сначала определяем переменные служебного характера, они требуются для того чтобы лог подключения писался в переменную, а не выводился на консоль. Затем определяется хэш с опциями. В нем мы указываем, что порт мы берем из опции RPORT, которую определили в методе initialize, далее выставляем “многословность” логгирования в режим Debug, чтобы получить интересующую нас информацию, определяем какому иэкземпляру объекта Logger отдавать лог и последним параметром идет таймаут подключения.

Теперь мы при помощи модуля Net::SSH (мы подключали его в начале, он входит в состав MSF) запускаем сессию, передав ей IP-адрес хоста, имя пользователя (в данном случае оно неважно поэтому я поставил просто ‘user’) и хэш с настройками. Далее все просто: если вдруг удалось подключиться и авторизоваться, то выводим соотвествующее сообщение, где вытягиваем из лога метод, которым было авторизовано соединение. Если авторизация провалилась (что в данном случае ожидаемый исход), то мы достанем из лога доступные методы авторизации для данного хоста. Если же хост недоступен по разным причинам, то напечатаем соотвествующее сообщение. Обрати внимание на специальные методы для вывода информации на консоль MSF: print_good, print_debug и print_error. Они нужны чтобы подсвечивать результаты соотвествующими символами, для более легкого чтения.

Для получения информации из лога я написал два вспомогательных метода, которые достают при помощи регулярных выражений нужные строчки (далеко не самый оптимальный вариант, здесь используется для простоты).

def extract_auth_methods(debug_info)
  debug_info
    .match(/allowed\smethods:\s(.+)/)
    .captures
    .first
end

def extract_succeded_method(debug_info)
  debug_info
    .match(/(.+)\ssucceeded/)
    .captures
    .first
end

Привожу полный код модуля:

require 'msf/core'
require 'net/ssh'
require 'stringio'
require 'logger'

class Metasploit3 < Msf::Auxiliary
  include Msf::Auxiliary::Scanner

  def initialize
    super(
      'Name' => 'SSH Auth type checker',
      'Description' => 'Check host availability by SSH and detect auth type',
      'Author' => 'Xakep',
      'License' => MSF_LICENSE
    )

    register_options(
      [
        Opt::RPORT(22)
      ], self.class
    )
  end

  def run_host(ip)
    debug_info = StringIO.new
    log = Logger.new debug_info

    opts_hash = {
      port: datastore['RPORT'],
      verbose: Logger::DEBUG,
      logger: log,
      timeout: 5
    }

    begin
      Net::SSH.start(ip, 'user', opts_hash) do
        method = extract_succeded_method(debug_info.string)
        print_good("#{ip} - connection established, auth method: #{method}")
      end
    rescue Net::SSH::AuthenticationFailed
      methods = extract_auth_methods(debug_info.string)
      print_debug("#{ip} - auth failed, available methods: #{methods}")
    rescue Timeout::Error, Errno::ECONNREFUSED, Rex::ConnectionRefused
      print_error("#{ip} - host doesn't respond")
    end
  end

  def extract_auth_methods(debug_info)
    debug_info
      .match(/allowed\smethods:\s(.+)/)
      .captures
      .first
  end

  def extract_succeded_method(debug_info)
    debug_info
      .match(/(.+)\ssucceeded/)
      .captures
      .first
  end
end

Теперь осталось только выбрать модуль в консоли MSF, указать адреса хостов через установку опции RHOSTS, запустить модуль и увидеть результат.

Результат выполнения нашего модуля

Домашнее задание

Сейчас наш модуль выводит информацию только в консоль, что может быть не совсем удобным для дальнейших исследований. Предлагаю тебе самостоятельно изучить документацию модуля Msf::Auxiliary::Report и прикрутить к этому примеру логгирование в базу и/или в файл.

Итог

Мы рассмотрели много особеностей модулей MSF предлагаю для окончательного закрепления пробежаться по основным этапам написания модуля:

  • Подключаем необходимые библиотеки при помощи ключевого слова require. При построении модулей можно (и нужно) использовать библиотеки которые располагаются в директории lib. Прежде всего это Rex и Core, в которых реализовано множество готового функционала;
  • Объявляем класс, который наследуется от базового класса соотвествующего типу модуля, в зависимости от желаемого поведения модуля;
  • В Ruby нет множественного наследования, зато есть механизм примесей, который позволит тебе подключать нужные модули при помощи ключевого слова include после объявления класса;
  • Определяем методы:
    • initialize - в него вносим информацию о модуле и определяем опции;
    • Методы, выполняющие полезное действие, в зависимости от типа модуля и нужд.

Cсылки

Погружение в Metasploit

Linux Metasploit Безопасность Журнал Хакер

Эта статья была впервые опубликована в журнале “Хакер”, здесь публикуется исходная версия, до отправки в редакцию. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Говоря об анализе информационной безопасности сложно не упомянуть Metasploit. Мощный, открытый инструмент с продуманной архитектурой, сотнями контрибьюторов, включающий в себя тысячи модулей, обеспечивающих автоматизацию эксплуатации огромного количества уязвимостей. При этом оставаясь простым в использвании, он позволяет проводить аудиты не только профессиональным пентестерам, но и любому разработчику или администратору, обеспокоенным уровнем безопасности своего проекта.

Предыстория

История Metasploit берет начало в 2003 году. HD Moore, работая пентестером в небольшой консалтинговой компании, замечает ряд неудобств в организации хранения и использования средств анализа безопасности. На тот момент, это был просто набор разрозненных эксплойтов и скриптов, общая информация о которых хранилась в базе данных. Информация о необходимом окружении для запуска скриптов как правило отсутствовала. Также они несли в себе множество устаревшего кода, требовали модификации жестко прописанных путей для каждого конкретного случая и т.п., что весьма затрудняло рабочий процесс и усложняло разработку новых инструментов.

В Metasploit автор, пытаясь решить эту проблему, создает консольную утилиту на Perl с псевдографическим интерфейсом и включает в неё порядка 11 эксплоитов. Сообщество встретило первую версию Metasploit весьма холодно, изрядно критикуя, как архитектуру, так и саму идею. Тем не менее, HD Moore не сдается и даже находит сподвижника в лице spoonm, с которым они доводят до ума модульную архитектуру фреймворка и выпускают вторую версию в 2004 году. Со временем фреймворк начинает набирать популярность и обретать новых контрибьюторов.

Следующим значимым шагом был перевод Metasploit c Perl на Ruby, для того чтобы избежать ограничений Perl, обеспечить кроссплатформенность и добиться большей гибкости при разработке. В 2009 году фреймворк приобретает компания Rapid7, под эгидой которой продолжилось развитие opensource-версии, а также стали появляться коммерческие версии продукта. Сам фреймворк давно перерос статус простого набора для пентестера и сегодня можно его можно встретить (хотя и нечасто) даже в арсенале “мирных” системных администраторов и программистов.

Версии

На момент написания статьи Metasploit распространяется в 4-х версиях:

  • Framework - базовая версия с консольным интерфейсом;
  • Community - бесплатная версия, включающая дополнительно веб-интерфейс и часть функционала из коммерческих версий;
  • Express - для коммерческих пользователей, включает функционал позволяющий упростить проведение базовых аудитов и формирование отчетности по ним;
  • Pro - самая продвинутая версия, предоставляет расширенные возможности для проведения атак, позволяет формировать цепочки задач для аудита, составлять подробную отчетность и многое другое.

Помимо веб-интерфейса, доступного в версиях Community, Express и Pro, существуют такие проекты, как Armitage и Cobalt strike, предоставляющие GUI-интерфейс для фреймворка.

Установка

На текущий момент поддерживаются все актуальные версии Windows и большинство популярных дистрибутивов Linux. В обоих случаях разработчики предоставляют графический инсталлятор, так что проблем с установкой возникнуть не должно. Специализированные дистрибутивы для пентеста, такие как Kali Linux, Pentoo, Black Arch и некоторые другие уже включают Metasploit в свой состав.

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

База данных

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

Metasploit использует PostgreSQL, поэтому тебе понадобится установить её на свою систему. Затем убедиться, что запущены соотвествующие сервисы БД и фреймворка. Запустить их можно соотвествующими командами (команды приводятся для Kali Linux, могут отличаться в твоем дистрибутиве):

service postgresql start
service metasploit start

Далее проверим, что фреймворк успешно установил подключение. Откроем консоль Metasploit командой msfconsole, а затем выполним db_status, в ответ на которую система должна вернуть что соединение с базой установлено.

Структура фреймворка

Структура фреймворка

Сердцем Metasploit является библиотека Rex. Она требуется для операций общего назначения: работа с сокетами, протоколами, форматирование текста, работа с кодировками и т.п. На ней базируется библиотека MSF Core, которая предоставляет базовый функционал и “низкоуровневое” API. Его использует библиотека MSF Base, которая в свою очередь предоставляет API для плагинов, интерфейса пользователя (как консольного, так и графического), а также модулей.

На модулях стоит остановиться подробнее. Они делятся на несколько типов, в зависимости от предоставляемой функциональности:

  • Exploit - код эксплуатирующий определенную уязвимость на целевой системе (например, переполнение буфера);
  • Payload - код, который запускается на целевой системе после того, как отработал эксплоит (устанавливает соединение, выполняет шелл-скрипт и т.п.);
  • Post - код, который который запускается на системе после успешного проникновения (собирает пароли, скачивает файлы и т.п.);
  • **Encoder **- инструменты для обфускации модулей с целью избежать обнаружения антивирусами;
  • NOP - генераторы NOP’ов. Это ассемблерная инструкция, которая не производит никаких действий. Используется чтобы заполнять пустоту в исполняемых файлах, для подгонки под необходимый размер;
  • Auxiliary - модули для сканирования сети, анализа трафика, и т.д.

Команды msfconsole

Не смотря на наличие графических интерфейсов, самым распространенным способом работы с Metasploit по прежнему остается консольный интерфейс msfconsole. Рассмотрим основные команды:

  • use - выбрать определенный модуль для работы с ним;
  • back - операция обратная use: перестать работать с выбранным модулем и вернуться назад;
  • show - вывести список модулей определенного типа;
  • set- установить значение определенному объекту;
  • run - запустить вспомогательный модуль после того, как были установлены необходимые опции;
  • info - вывести информацию о модуле;
  • search - найти определенный модуль;
  • check - проверить подвержена ли целевая система уязвимости;
  • sessions - вывести список доступных сессий.

Пентест Wordpress

Вооружившись полученными знаниями, предлагаю в качестве “Hello world” провести простейший пентест сайта на Wordpress.

Тестовое окружение

Для начала необходимо поднять тестовое окружение. Для этого я буду пользоваться связкой VirtualBox+Vagrant и проектом VCCW, который позволит развернуть готовую виртуалку с Wordpress на борту буквально парой команд в консоли. Подробные инструкции ты сможешь найти на сайте проекта, здесь я покажу основные шаги.

Добавляем базовый образ:

vagrant box add miya0001/vccw

Затем скачаем с сайта проекта архив с Vagrantfile, кукбуками Chef и прочим, распаковываем, переходим в папку где лежит Vagrantfile, и выполним команду:

vagrant up

После этого у тебя должна подняться машина с развернутым Wordpress, доступная по адресу 192.168.33.10. Стоит отметить, что это уже готовый сетап, где настроена база и заведена админская учетка. Логин и пароль от неё указаны на сайте, но мы их узнаем другим путем. :)

Пентест

Откроем консоль Metasploit.

msfconsole

Запустим поиск по слову Wordpress, чтобы найти необходимый модуль.

search wordpress

Среди появившегося многообразия нас интересует модуль auxiliary/scanner/http/wordpress_login_enum который отвечает за брутфорс аутентификации Wordpress.

Результаты поиска модулей по запросу "wordpress"

Выберем его для работы:

use auxiliary/scanner/http/wordpress_login_enum

Чтобы понять как его использовать можно ввести команду info, она выведет краткое описание модуля и список используемых параметров.

Прежде всего, укажем адрес хоста на котором расположен сайт.

set RHOSTS 192.168.33.10

Для брутфорса будет использоваться перебор по словарю. В данном случае известно, что пароль несложный, поэтому подойдет практически любой список ненадежных паролей, которых достаточно в сети. Укажем путь к нему.

set PASS_FILE /root/10k-common-passwords.txt

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

set STOP_ON_SUCCESS true

Также можно запретить вывод в консоль всех малозначимых сообщений, вроде неудачных попыток авторизации.

set VERBOSE false

Теперь, когда подготовительные действия совершены, осталось ввести последнюю короткую команду и ждать результата:

run

Процесс перебора пароля по словарю в Metasploit

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

Результат работы модуля

Итог

Хотя мы и не рассмотрели сотой доли возможностей Metasploit, сегодняшний материал должен стать хорошей отправной точкой в освоении этого инструмента. В конце хотелось бы традиционно напомнить, о том, что любой инструмент можно использовать, как во благо, так и во вред. В неумелых руках использование отдельных компонентов этого фреймворка может нанести серьезный ущерб. Поэтому во-первых используй его только имея соотвествующее разрешение на исследование безопасности от владельца системы. В противном случае ты рискуешь поиметь серьезные проблемы с законом. Во-вторых, даже имея соотвествующее разрешение, не применяй его на продакшн-системах и в сети заказчика, а создай виртуальное, локальное окружение с необходимым софтом (подобно тому, как я показал в статье). Помимо безопасности такого подхода, в качестве бонуса ты получаешь возможность легко откатиться, версионировать, клонировать и совершать другие полезные действия которые помогут упростить исследование.

Ссылки

Радиаторы для Raspberry Pi

Linux Raspberry Pi GnuPlot Python Мои проекты

Решил сделать радиаторы для своего Raspberry Pi. Нагревался процессор, если его хорошенько нагрузить, прилично, да и насмотревшись «ужасных» фотографий, наподобие той что ниже, было решено попробовать хоть немного предохранить чипы от перегрева.

По большому счету даже 60 градусов — вполне нормальная рабочая температура для процессора, но кто знает, что может случиться, если хорошенько нагрузить устройство, да еще и жарким летом? Ничего не произойдет, но отговаривать было бесполезно, поэтому начались поиски донора. Да, можно было купить, что-то более или менее подходящее, но это не спортивно. Долго искать не придется, если знать к кому обратиться, и уже вскоре один мой хороший друг приволок мне вот такой радиатор.

Первым делом, нужно было счистить остатки старого клея. Основную часть, я соскреб металлической линейкой, остальное удалил при помощи ацетона.

Далее замерил размеры чипов, разметил, взял ножовку по металлу и начал пилить. Тут стоит сделать замечание для тех, кто соберется повторять мой подвиг. Учитывайте, далеко не факт, что вам удастся отпилить красиво и ровно, 146% что придется доводить напильником до божеского вида.

Я делал запас 1-2 миллиметра (на глаз) и это как раз было впритык. Далее выравнивание напильником и шкуркой, в результате получилось 3 маленьких радиатора. К идеалам не стремился: более или менее ровно и ладно.

Теперь осталось приклеить. Почитав, что пишут духи в онлайне и ознакомившись с ассортиментом местных магазинов, я понял, что у меня 2 варианта:

  • Термоклей Алсил-5, штука сомнительная, но ничего другого не обнаружилось на прилавках.
  • Намазать чип в середине термопастой, а по краям посадить на маленькие капельки суперклея.

Немного подумав, решил пойти по пути наименьшего сопротивления и взял Алсил-5.

Попытавшись его выдавить, понял о чем писали на форумах: в «носике» шприца клей был намертво засохшим. Расковыряв его зубочисткой, обезжирил поверхности чипов и радиаторов, нанес клей небольшим слоем, приладил чипы и положил сверху толстых, умных книжек (должна же быть от них хоть какая-то польза). Через сутки (раньше не получилось) проверил: все отлично приклеилось.

Эксперименты

Пытливый мозг не дает покоя. Надо попытаться проверить. Градусников, термометров и прочей измерительной аппаратуры не имею. Поэтому за неимением лучшего выдавил из себя немного кода на Python:

#!/usr/bin/python
 
from time import sleep
 
f = open('temp.txt','w')
 
for i in range(12) :
    sleep(600)
    cpuTemp = str(round(int(open('/sys/class/thermal/thermal_zone0/temp').read())/1e3, 1))
    print cpuTemp
    f.write(cpuTemp + 'n')
 
f.close

Это дало мне несколько значений температуры процессора, в попытке визуализировать полученную информацию, набросал следующий код на GnuPlot:

#! /usr/bin/gnuplot -persist
 
set terminal png size 800, 600
set output "result.png"
set grid xtics ytics
 
set xlabel "Time, minutes"
set ylabel "Temperature, 260C" rotate by 90
 
set style line 1 lw 3 linecolor rgb "#FF0066"
 
plot "~/temp.txt" using (column(0)*10):1 w l ls 1 notitle smooth csplines

Далее аналогичным способом был произведен замер результатов с радиаторами. Получился такой результат:

Если кому интересно, то код для GnuPlot в этом случае такой:

#! /usr/bin/gnuplot -persist
 
set terminal png size 800, 600
set output "result.png"
set key spacing 1.30
set grid xtics ytics
 
set xlabel "Time, minutes"
set ylabel "Temperature, 260C" rotate by 90
 
set yrange [44:48]
set xrange [0:100]
 
set style line 1 lw 3 linecolor rgb "#FF0066"
set style line 2 lw 3 linecolor rgb "#3366FF"
 
set multiplot
 
plot "~/temp.txt" using (column(0)*10):1 w l ls 1 title "without heat sink"smooth csplines, /
     "~/temp_n.txt" using (column(0)*10):1 w l ls 2 title "with heat sink" smooth csplines
 
unset multiplot

Начальная настройка Raspberry Pi

Linux Raspberry Pi Bash

Raspberry Pi — компьютер на плате, размером с кредитную карточку, изначально создававшийся для того, чтобы приобщить школьников к программированию, на практике стал настоящим хитом среди гиков и народных умельцев. Неудивительно: плата за 35$, несущая на своем борту 700МГц ARM-процессор и 512 МБ оперативной памяти, плюс все необходимые разъемы, позволяющая установить полноценный Linux, обязана занять почетное место в хозяйстве любого гика.

Лично во мне, сама концепция такого мини-компьютера вызывает глубочайшую симпатию, и я решил написать небольшую серию статей для тех, кто тоже захочет приобщиться к большому и дружному сообществу пользователей этого устройства. Несмотря на огромное количество статей по настройке этого устройства, я решил написать yet another one. Во-первых задокументировать свои действия на всякий случай, а во-вторых чтобы люди понимали о чем вообще идет речь, если их заинтересует что-нибудь из последующих статей.

Инвентарь

Для начала, перечислю все, что нам может потребоваться для старта:

  • Raspberry Pi Model B;
  • Монитор для первоначального конфига (хотя некоторые берут себе и отдельный монитор) + переходник с HDMI на VGA/DVI, если потребуется;
  • Клавиатура (опять же для первоначального конфига);
  • SD-карточка (минимум 2 ГБ, а лучше 4 ГБ, чтобы с запасом);
  • Wi-Fi донгл или Ethernet-кабель (мне кажется, что в век беспроводных технологий донгл все-таки предпочтительнее, в статье я буду описывать настройку сети именно в этом варианте, так как он чуть сложнее);
  • Micro-USB кабель;
  • Блок питания 5В, 1А (можно попробовать запитать от USB-порта компьютера, но создатели платы настоятельно рекомендуют не делать этого а разжиться нормальным блоком питания, к слову под эти характеристики подходят многие зарядники от телефона);
  • Опционально: USB звуковая карта, если собираешься делать из своего Raspberry Pi медиацентр или часто слушать через него музыку, — качество со встроенного аудио-разъема не выдерживает никакой критики и годится разве что для редкого прослушивания подкастов и воспроизведения;
  • Опционально: Breadboard (макетная плата) + набор соединителей и перемычек, если будет желание поэкспериментировать с управлением какими-либо внешними устройствами через GPIO.

Думаю, что большинство из перечисленных вещей без труда найдется у тебя в закромах, но даже если и нет, то стоит это все сущие копейки. Сам Raspberry Pi можно заказать во многих отечественных интернет-магазинах, что выйдет рублей на 500-1000 дороже, чем заказывать из Великобритании на Element14.com, но соответственно чуть проще и быстрее. Некоторые магазины предлагают готовые решения в корпусе, с подготовленной SD-карточкой и блоком питания, но обойдется это уже где-то 100$. Каждое решение будет по-своему верным, поэтому исходи из своих финансовых возможностей.

Что ставить?

Первым делом, нужно будет скачать с  http://www.raspberrypi.org/downloads интересующий тебя образ и установить его на SD-карту. Далее я буду использовать стандартный Raspbian «wheezy» (Debian оптимизированный под Raspberry Pi).

Если ты покупал Raspberry Pi с целью сделать из него медиа-центр, то тебя скорее всего может устроить Raspbmc (специальная версия XBMC), в качестве готового решения ( http://www.raspbmc.com/).

В случае, если захочешь организовать свое персональное облачное хранилище, можно сразу разжиться дистрибутивом включающим в себя OwnCloud ( http://bit.ly/Yo3e0k).

Процесс установки на SD-карту я освещать не буду, как ты понимаешь, он полностью аналогичен процессу создания загрузочной флешки и если возникнут вопросы это можно без труда загуглить. Сам я создавал самописным Applescript’ом.

Настройка

Итак, вставляем SD-карточку, подключаем монитор в HDMI, втыкаем в USB Wi-Fi донгл и клавиатуру, в Micro-USB разъем вставляем питание. Плата включится сама и если ты все правильно сделал, перед тобой должен возникнуть синий экран начальной настройки. Если не возник, или экран настроек понадобится еще раз, наберем в консоли:

sudo raspi-config 

Очень коротко пробегусь по основным пунктам меню:

  • info  — краткая информация об утилите настройки;
  • expand_rootfs  — после записи 2 ГБ образа Raspbian на карту памяти, видимыми и доступными для использования будут только эти 2 гига, чтобы использовать все пространство карточки нужно выбрать эту опцию, которая «расширит» корневую файловую систему на все пространство карточки;
  • overscan  — для коррекции вылетов развертки;
  • configure_keyboard  — настройка клавиатуры;
  • change_pass  — сменить пароль по-умолчанию (raspberry) на что-нибудь посерьезнее;
  • change_locale  — сменить локаль (простыми словами рассказать линуксу из какой мы страны);
  • change_timezone  — установить временную зону;
  • memory_split  — настроить разделение памяти между оперативкой и графическим чипом;
  • overclock  — настройки оверклокинга, довольно бесполезная вещь: вероятность спалить устройство гораздо выше чем получить какой-либо прирост в производительности;
  • ssh  — запускать ssh-сервер при запуске системы? по-умолчанию запущен;
  • boot_behaviour  — запускать сразу рабочий стол при загрузке?
  • update  — попытаться обновить утилиту настройки.

После этого нужно настроить wi-fi, чтобы вернуть монитор и клавиатуру на родину, а c Raspbery Pi общаться только посредством SSH. Опять же буду рассказывать очень коротко, потому что про это во-первых уже написали на куче ресурсов, а во-вторых по сути своей настройка мало чем отличается от таковой в линуксах на обычных машинах, а про это можно вообще на каждом заборе прочитать. Я здесь опишу алгоритм, которым пользуюсь лично я при настройке, так как это линукс, то путей может быть несколько и если делаешь по-другому и это работает, то это совершенно не возбраняется.

У меня wi-fi свисток TrendNet N150 на чипсете Realtek RTL8192SU. В этом конкретном случае не понадобилось установки дополнительных драйверов. Но давай предположим, что тебе не так повезло. Как быть?

Воспользоваться командой вывода буфера ядра: dmesg. На тебя вывалится куча служебной информации, но наверное, понимаешь, что искать нужно устройства подключенные по usb.

После непродолжительных поисков я нашел, что меня интересовало, а именно информация о производителе, ожидаемо, что это был Realtek. Далее нужно установить драйвера, поищем их в кэше менеджера пакетов и установим найденные:

sudo apt-cache search realtek
sudo apt-get install firmware-realtek

Может такое случиться, что требуемые драйвера не будут найдены, в таком случае их придется погуглить отдельно на компьютере с интернетом, закинуть на Pi и установить.

Чтобы проверить, все ли хорошо (или не очень) можно ввести iwconfig, это как ipconfig только для беспроводных сетей. Просканить доступные сети: sudo iwlist scan.

Теперь добавим беспроводной интерфейс в файл /etc/network/interfaces при помощи команды:

sudo nano /etc/network/interfaces

Файл wpa.conf нужен для утилиты wpasupplicant, которая предназначена для того, чтобы простым способом коннектится к защищенным сетям. Создадим его:

sudo nano /etc/wpa.conf

ssid — имя сети, psk — пароль, в данном случае используется WPA-шифрование.

Теперь достаточно перезагрузиться, и если ты все сделал правильно, появится сеть и интернет. Теперь осталось только подключиться к Pi по ssh. Под Windows тебе понадобится SSH-клиент Putty, под Mac и Linux нужно лишь написать команду следующего вида:

ssh username@IP-address

После этого можно спокойно начинать свои эксперименты с устройством.

Назначение светодиодов на Raspberry Pi

Многие, кто недавно купил себе Raspberry Pi часто не понимают назначение светодиодов, расположенных на плате (в углу, рядом с аудио-выходом и USB-портами). Подписи рядом с ними тоже не вносят много ясности, поэтому мне хотелось рассказать в двух словах о светодиодах на RPi Mod. B Rev.2.

Итак, светодиоды имеют следующее назначение:

  • ACT (зеленый) - Доступ к SD-карте;
  • PWR (оранжевый) - Источник 3.3 В подключен;
  • FDX (зеленый) - Сеть подключена в полнодуплексном режиме);
  • LNK (зеленый) - Активность сети;
  • 100 (желтый) - 100Мбит сеть подключена;

При подготовке статьи я пользовался следующими ресурсами:

1 of 1