Проблемы с подключением к базе данных Метасплойта в msfconsole.

В этой заметке речь пойдет об ошибке в работе msfconsole связанной с подключением к базе данных PostgreSQL (Database not connected or cache not built, using slow search).

Давайте рассмотрим, как проявляет себя данная ошибка, и какие действия нужно предпринять, чтобы исправить положение.
После запуска служб PostgreSQL и Metasploit, которые запускаются либо через соответствующий скрипт в меню Kali Linux, либо через консоль.


root@kali:~# service postgresql start
 
root@kali:~# service metasploit start
«Стартуем» msfconsole.

root@kali:~# msfconsole
После приглашения msfconsole к вводу команд, пробуем найти информацию о фтп сервере proftp (как пример) и получаем ошибку о не возможной
работе с базой данных связанной либо с отсутствием подключения к базе данных или отсутствием кэша данных в базе.

msf # search proftp
[!] Database not connected or cache not built, using slow search
Проверяем статус подключения, чтобы определиться с причиной (отсутствие подключения или отсутствие кэша).

msf # db_status
[*] postgresql selected, no connection
В этом случае отсутствует подключение к базе. Займемся созданием базы данных и восстановлением подключения.
Сперва переключимся на учетную запись postgres.

root@kali:~# su postgres
Создадим пользователя для работы с базой данных.

postgres@kali:/root$ createuser msfuser -P
Введите пароль для новой роли:
Повторите его:
Должна ли новая роль иметь полномочия суперпользователя? (y - да/n - нет) n
Новая роль должна иметь право создавать базы данных? (y - да/n - нет) n
Новая роль должна иметь право создавать другие роли? (y - да/n - нет) n
И создадим базу данных, наделив только что созданного пользователя правом управления данной базой.

postgres@kali:/root$ createdb --owner=msfuser msfdatabase
Все подготовительные действия завершены, можно подключаться к базе.

msf # db_connect msf_user:samsung@127.0.0.1:5432/msfdatabase
После подключения к базе, msfconsole создаст все необходимые для работы таблицы.
Пробуем опять найти все доступные модули для работы с proftp. И получаем это же предупреждение.

msf # search proftp
[!] Database not connected or cache not built, using slow search
Проверяем статус подключения к базе.



msf # db_status
[*] postgresql connected to msf_database
Все хорошо, мы подключены, значит проблема с кэшем. Командуем построить кэш.

msf # db_rebuild_cache
[*] Purging and rebuilding the module cache in the background...
Msfconsole нам сообщает, что построение кэша уже запущенно в виде фоновой операции. Значит ждем.
Через некоторое время пробуем снова получить информацию о модулях для работы с proftp.

msf # search proftp
 
Matching Modules
================
 
Name Disclosure Date Rank Description
---- --------------- ---- -----------
exploit/freebsd/ftp/proftp_telnet_iac 2010-11-01 great ProFTPD 1.3.2rc3 - 1.3.3b Telnet IAC Buffer Overflow (FreeBSD)
........
Как видно никаких проблем с подключением к базе данных и построением кэша нет, msfconsole отработала без предупреждений.

Давайте посмотрим какие еще есть способы подключения к базе данных.

msf # db_connect
[*] Usage: db_connect <user:pass>@<host:port>/<database>
[*] OR: db_connect -y [path/to/database.yml]
[*] Examples:
[*] db_connect user@metasploit3
[*] db_connect user:pass@192.168.0.2/metasploit3
[*] db_connect user:pass@192.168.0.2:1500/metasploit3
Как видим существует возможность подключения с помощью конфигурационного файла database.yml
Пример файла в Kali Linux можно найти по следующему пути /opt/metasploit/apps/pro/ui/config/database.yml.example
Копируем файл и редактируем, указав актуальные данные для подключения к базе данных.

root@kali:~# cp /opt/metasploit/apps/pro/ui/config/database.yml.example /opt/metasploit/apps/pro/ui/config/database.yml
root@kali:~# nano /opt/metasploit/apps/pro/ui/config/database.yml
 
# Please only use postgresql bound to a TCP port.
development: &amp;defaults
adapter: postgresql
database: msfdatabase
username: msfuser
password: samsung
host: localhost
port: 5432
pool: 50 # production is 255
timeout: 5
Подключаемся к базе используя только-что созданный конфигурационный файл.

msf # db_connect -y /opt/metasploit/apps/pro/ui/config/database.yml
 
msf # db_status
[*] postgresql connected to msf_database