154 lines
5.7 KiB
Gherkin
154 lines
5.7 KiB
Gherkin
@boot
|
|
Feature: `msfconsole` `database.yml`
|
|
|
|
In order to connect to the database in `msfconsole`
|
|
As a user calling `msfconsole` from a terminal
|
|
I want to be able to set the path of the `database.yml` in one of 4 locations (in order of precedence):
|
|
|
|
1. An explicit argument to the `-y` flag to `msfconsole`
|
|
2. The MSF_DATABASE_CONFIG environment variable
|
|
3. The user's `~/.msf4/database.yml`
|
|
4. `config/database.yml` in the metasploit-framework checkout location.
|
|
|
|
Scenario: With all 4 locations, --yaml wins
|
|
Given a file named "command_line.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: command_line_metasploit_framework_test
|
|
username: command_line_metasploit_framework_test
|
|
"""
|
|
And a file named "msf_database_config.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: environment_metasploit_framework_test
|
|
username: environment_metasploit_framework_test
|
|
"""
|
|
And I set the environment variables to:
|
|
| variable | value |
|
|
| MSF_DATABASE_CONFIG | msf_database_config.yml |
|
|
And a directory named "home"
|
|
And I cd to "home"
|
|
And a mocked home directory
|
|
And a directory named ".msf4"
|
|
And I cd to ".msf4"
|
|
And a file named "database.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: user_metasploit_framework_test
|
|
username: user_metasploit_framework_test
|
|
"""
|
|
And I cd to "../.."
|
|
And the project "database.yml" exists with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: project_metasploit_framework_test
|
|
username: project_metasploit_framework_test
|
|
"""
|
|
When I run `msfconsole --defer-module-loads --environment test --execute-command exit --yaml command_line.yml`
|
|
Then the output should contain "command_line_metasploit_framework_test"
|
|
|
|
Scenario: Without --yaml, MSF_DATABASE_CONFIG wins
|
|
Given a file named "msf_database_config.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: environment_metasploit_framework_test
|
|
username: environment_metasploit_framework_test
|
|
"""
|
|
And I set the environment variables to:
|
|
| variable | value |
|
|
| MSF_DATABASE_CONFIG | msf_database_config.yml |
|
|
And a directory named "home"
|
|
And I cd to "home"
|
|
And a mocked home directory
|
|
And a directory named ".msf4"
|
|
And I cd to ".msf4"
|
|
And a file named "database.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: user_metasploit_framework_test
|
|
username: user_metasploit_framework_test
|
|
"""
|
|
And I cd to "../.."
|
|
And the project "database.yml" exists with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: project_metasploit_framework_test
|
|
username: project_metasploit_framework_test
|
|
"""
|
|
When I run `msfconsole --defer-module-loads --environment test --execute-command exit`
|
|
Then the output should contain "environment_metasploit_framework_test"
|
|
|
|
Scenario: Without --yaml or MSF_DATABASE_CONFIG, ~/.msf4/database.yml wins
|
|
Given I unset the environment variables:
|
|
| variable |
|
|
| MSF_DATABASE_CONFIG |
|
|
And a directory named "home"
|
|
And I cd to "home"
|
|
And a mocked home directory
|
|
And a directory named ".msf4"
|
|
And I cd to ".msf4"
|
|
And a file named "database.yml" with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: user_metasploit_framework_test
|
|
username: user_metasploit_framework_test
|
|
"""
|
|
And I cd to "../.."
|
|
And the project "database.yml" exists with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: project_metasploit_framework_test
|
|
username: project_metasploit_framework_test
|
|
"""
|
|
When I run `msfconsole --defer-module-loads --environment test --execute-command exit`
|
|
Then the output should contain "user_metasploit_framework_test"
|
|
|
|
Scenario: Without --yaml, MSF_DATABASE_CONFIG or ~/.msf4/database.yml, project "database.yml" wins
|
|
Given I unset the environment variables:
|
|
| variable |
|
|
| MSF_DATABASE_CONFIG |
|
|
And a directory named "home"
|
|
And I cd to "home"
|
|
And a mocked home directory
|
|
And I cd to "../.."
|
|
And the project "database.yml" exists with:
|
|
"""
|
|
test:
|
|
adapter: postgresql
|
|
database: project_metasploit_framework_test
|
|
username: project_metasploit_framework_test
|
|
"""
|
|
When I run `msfconsole --defer-module-loads --environment test --execute-command exit`
|
|
Then the output should contain "project_metasploit_framework_test"
|
|
|
|
|
|
Scenario: Without --yaml, MSF_DATABASE_CONFIG, ~/.msf4/database.yml, or project "database.yml", no database connection
|
|
Given I unset the environment variables:
|
|
| variable |
|
|
| MSF_DATABASE_CONFIG |
|
|
And a directory named "home"
|
|
And I cd to "home"
|
|
And a mocked home directory
|
|
And I cd to "../.."
|
|
And the project "database.yml" does not exist
|
|
When I run `msfconsole --defer-module-loads --environment test --execute-command db_status --execute-command exit`
|
|
Then the output should not contain "command_line_metasploit_framework_test"
|
|
And the output should not contain "environment_metasploit_framework_test"
|
|
And the output should not contain "user_metasploit_framework_test"
|
|
And the output should not contain "project_metasploit_framework_test"
|
|
And the output should contain "[*] postgresql selected, no connection"
|
|
|
|
Scenario: Starting `msfconsole` with a valid database.yml
|
|
When I run `msfconsole --defer-module-loads --execute-command db_status --execute-command exit`
|
|
Then the output should contain "[*] postgresql connected to metasploit_framework_test"
|
|
|