一次性付费进群,长期免费索取教程,没有付费教程。
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
PostgreSQL是一个免费的对象-关系数据库服务,用来存储一些数据记录。Metasploit启动后,会选择连接PostgreSQL数据库服务,然后就可以完整地利用MSF数据库查询exploit和记录了。在Kali Linux系统中,启动Metasploit后,将自动连接到PostgreSQL服务的Postgres数据库。但是,在其他系统中,需要手动连接该数据库。
1、安装PostgreSQL数据库服务
在大部分系统中,默认并不会安装PostgreSQL数据库服务。所以,如果要使用该数据库,需要先在系统中进行安装。
在大部分Linux发行版中都自带了PostgreSQL的二进制包,所以可以直接安装。下面演示在Windows中安装PostgreSQL数据库的方法。
在Windows 7中安装PostgreSQL数据库。具体操作步骤如下:
1)双击下载的安装包,将打开如图1所示对话框。
图1 欢迎界面
2)该界面是安装PostgreSQL数据库的欢迎界面。单击Next按钮,进入安装位置对话框,如图2所示。
图2 安装目录
装PostgreSQL的分区最好是NTFS格式的。PostgreSQL的首要任务是保证数据的完整性,而FAT和FAT32文件系统不能提供这样的可靠性保障,而且FAT文件系统本身缺乏安全性保障,无法保证原始数据在未经授权的情况下被更改。此外,PostgreSQL所使用的“多分点”功能完成表空间的这一特征在FAT文件系统下无法实现。然而,在某些系统中,只有一种FAT分区。在这种情况下,可以正常安装PostgreSQL,但不要进行数据库的初始化工作。安装完成后,在FAT分区上手动执行initdb.exe程序即可,但不能保证其安全性和可靠性,并且建立表空间也会失败。
3)选择PostgreSQL数据库的安装位置。本例中将使用默认路径,然后单击Next按钮,进入选择组件安装对话框,如图3所示。
图3 选择组件
4)在其中选择将要安装的组件,这里使用默认设置,选择所有组件。然后单击Next按钮,进入数据目录对话框,如图4所示。
图4 数据目录存储位置
5)该对话框用来设置PostgreSQL数据库的数据存放目录,本例使用默认的位置。然后单击Next按钮,进入用户密码设置对话框,如图5所示。
图5 设置postgres数据库用户密码
6)在其中为数据库超级用户postgres设置密码。一定要记住这个密码,在连接数据库时需要输入该密码。然后,单击Next按钮,进入数据库端口监听对话框,如图6所示。
图6 设置数据库监听端口
7)在其中设置数据库监听的端口,这里使用默认端口。然后,单击Next按钮,进入高级选项设置对话框,如图7所示。
图7 高级选项
8)在其中可以设置数据库存储区域的运行时环境(字符编码格式),这里选择默认设置,即Default locale选项。然后,单击Next按钮,进入预安装摘要信息对话框,如图8所示。
图8 预安装摘要信息
9)在其中显示了数据库将要安装的位置文件信息。单击Next按钮,进入PostgreSQL数据库安装对话框,如图9所示。
图9 准备安装
10)该对话框表示目前已经配置好PostgreSQL了,可以开始安装该数据库了。此时,单击Next按钮,开始安装该数据库。安装完成后,如图10所示。
图10 安装完成
11)从中可以看到,默认将要启动Stack Builder来下载并安装额外的工具、应用程序和驱动程序,以进一步完善PostgreSQL的安装。但是,该操作必须在联网状态下执行。本例中安装PostgreSQL数据库只是为了简单地与Metasploit连接,并保存一些数据。所以,这里不启动StackBuilder,即取消复选框的勾选。然后,单击Finish按钮完成数据库的安装。
2、初始化PostgreSQL数据库
为了便于存储数据,Metasploit会使用特定的用户名来访问PostgresSQL数据库,并将数据保存在自有的数据库中。所以,在启动Metasploit之前,需要先初始化数据库。在初始化过程中,Metasploit会在PostgreSQL中建立一个专用账户msf,并创建对应的数据库。操作过程如下:
(1)启动PostgreSQL数据库服务
为了方便渗透测试人员操作,Metasploit提供了专门的数据库服务管理命令。下面依次讲解数据库服务的启动和关闭方法。
1)启动PostgreSQL数据库服务,执行的命令如下:
root@daxueba:~# msfdb start
[+] Starting database
输出信息表示数据库服务已经成功启动了。
2)当不使用Metasploit时,为了节省系统资源,可以停止PostgreSQL数据库服务,执行的命令如下:
root@daxueba:~# msfdb stop
[+] Stopping database
输出信息表示数据库已经成功禁止了。
成功启动PostgreSQL数据库服务,PostgeSQL会监听5432端口。查看该端口是否被监听,执行命令如下:
root@daxueba:~# ss -ant
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
LISTEN 0 128 127.0.0.1:5433 0.0.0.0:*
LISTEN 0 128 0.0.0.0:44797 0.0.0.0:*
LISTEN 0 128 0.0.0.0:41959 0.0.0.0:*
LISTEN 0 128 [::]:39031 [::]:*
LISTEN 0 128 [::1]:5432 [::]:*
LISTEN 0 128 [::1]:5433 [::]:*
LISTEN 0 128 [::]:44235 [::]:*
从Local Address:Port列中可以看到,127.0.0.1:5432表示5432端口已经被监听。
(2)初始化数据库
初始化数据库,执行命令如下:
root@daxueba:~# msfdb init
输出信息如下:
[+] Starting database
[+] Creating database user 'msf'
为新角色输入的口令:
再输入一遍:
[+] Creating databases 'msf' #创建msf数据库
[+] Creating databases 'msf_test' #创建msf_test数据库
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml' #创建配置文件
[+] Creating initial database schema
输出信息表示成功创建了Metasploit的专用数据库msf和msf_test,并且创建了配置文件database.yml。输出信息的第3行和第4行表示为创建的数据库名自动生成密码,它将自动保存到配置文件中。最后一行信息表示创建了初始化数据库模式。
查看配置文件database.yml中的信息,可以看到msf和msf_test数据库的相关信息,如密码和端口号等。执行命令如下:
root@daxueba:~# cat /usr/share/metasploit-framework/config/database.yml
输出信息如下:
development:
adapter: postgresql
database: msf #数据库名
username: msf #用户名
password: eX2wVC53WcKaSdAKDHs+/ZumzfRCV3Xi3bnVe7t1bRw= #密码
host: localhost #主机名
port: 5432 #端口号
pool: 5 #连接池连接数
timeout: 5 #连接的超时时间
production:
adapter: postgresql
database: msf
username: msf
password: eX2wVC53WcKaSdAKDHs+/ZumzfRCV3Xi3bnVe7t1bRw=
host: localhost
port: 5432
pool: 5
timeout: 5
test:
adapter: postgresql
database: msf_test
username: msf
password: eX2wVC53WcKaSdAKDHs+/ZumzfRCV3Xi3bnVe7t1bRw=
host: localhost
port: 5432
pool: 5
timeout: 5
如果用户不再保留Metasploit的数据库,可以将其删除并停止数据库服务。命令如下:
root@daxueba:~# msfdb delete
输出信息如下:
[i] Database already started
[+] Dropping databases 'msf' #删除数据库msf
[+] Dropping databases 'msf_test' #删除数据库msf_test
[+] Dropping database user 'msf'
[+] Deleting configuration file /usr/share/metasploit-framework/config/database.yml #删除配置文件
[+] Stopping database #停止数据库
输出信息表示成功删除了数据库msf和msf_test,最后一行信息表示此时数据库服务被停止。
(3)重置数据库
如果数据库已经初始化过,就不能再使用msfdb init命令进行初始化了,否则将显示如下信息:
root@daxueba:~# msfdb init
输出信息如下:
[i] Database already started
[i] The database appears to be already configured, skipping initialization
输出信息表示数据库已经配置好了,自动跳过初始化过程。
如果需要再次初始化数据库,就需要执行以下命令:
root@daxueba:~# msfdb reinit
输出信息如下:
[i] Database already started #删除原有的数据库
[+] Dropping databases 'msf'
[+] Dropping databases 'msf_test'
[+] Dropping database user 'msf'
[+] Deleting configuration file /usr/share/metasploit-framework/config/database.yml
[+] Stopping database #停用数据库
[+] Starting database #启用数据库
[+] Creating database user 'msf' #创建数据库
为新角色输入的口令:
再输入一遍:
[+] Creating databases 'msf'
[+] Creating databases 'msf_test'
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml'
[+] Creating initial database schema
输出信息表示,先删除了原有的数据库然后停用。之后再启用数据库创建新的数据库。
(4)查看数据库状态
为了快速了解到此时数据库的状态,可以使用msfdb status命令检查服务状态。如果使用msfdb stop命令停用了数据库,查看服务状态时将显示如下信息:
root@daxueba:~# msfdb status
输出信息如下:
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled;
vendor preset: disabled)
Active: inactive (dead)
4月 03 14:41:01 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:41:06 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:41:06 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:44:13 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:44:17 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:44:17 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:47:44 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:48:46 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:48:46 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:49:22 daxueba systemd[1]: Stopped PostgreSQL RDBMS. #停用了数据库
[i] No network service running
[+] Detected configuration file (/usr/share/metasploit-framework/config/database.yml)
输出信息的倒数第二行表示,此时没有运行的网络服务,最后一行信息表示检测到配置文件,说明初始化数据库时创建数据库生成的配置文件没有被删除。
如果使用msfdb delete命令删除创建的数据库,查看服务状态时将显示如下信息:
root@daxueba:~# msfdb status
输出信息如下:
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled;
vendor preset: disabled)
Active: inactive (dead)
4月 03 14:44:13 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:44:17 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:44:17 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:47:44 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:48:46 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:48:46 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:49:22 daxueba systemd[1]: Stopped PostgreSQL RDBMS.
4月 03 14:56:25 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 14:56:25 daxueba systemd[1]: Started PostgreSQL RDBMS.
4月 03 14:57:38 daxueba systemd[1]: Stopped PostgreSQL RDBMS. #停用了数据库
[i] No network service running
[i] No configuration file found
输出信息最后两行表示既没有运行的网络服务,也没有检查到配置文件。
如果只使用msfdb start命令启用数据库,而没有使用msfdb init命令初始化数据库,查看服务状态时将显示如下信息:
root@daxueba:~# msfdb status
输出信息如下:
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled;
vendor preset: disabled)
Active: active (exited) since Tue 2018-04-03 15:33:03 CST; 2s ago
Process: 6845 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 6845 (code=exited, status=0/SUCCESS)
4月 03 15:33:03 daxueba systemd[1]: Starting PostgreSQL RDBMS...
4月 03 15:33:03 daxueba systemd[1]:Started PostgreSQL RDBMS. #启用了数据库
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 6811 postgres 3u IPv6 117845 0t0 TCP localhost:5432 (LISTEN)
postgres 6811 postgres 6u IPv4 117846 0t0 TCP localhost:5432 (LISTEN)
UID PID PPID C STIME TTY STAT TIME CMD
postgres 6811 1 0 15:32 ? S 0:00 /usr/lib/postgresql/9.6/bin/postgres -D /
[i] No configuration file found
输出信息可以看到此时的数据库是启用的,最后一行信息表示没有发现配置文件,说明此时没有进行初始化数据库。
初始化数据库以后,再次查看服务状态,最后一行信息如下:
[+] Detected configuration file (/usr/share/metasploit-framework/config/database.yml)
(5)直接启动Metasploit
初始化数据库以后就可以启动数据库,并运行Metasploit了。执行命令如下:
root@daxueba:~# msfdb run
[i] Database already started
_---------.
.' ####### ;."
.---,. ;@ @@`; .---,..
." @@@@@'.,'@@ @@@@@',.'@@@@ ".
'-.@@@@@@@@@@@@@ @@@@@@@@@@@@@ @;
`.@@@@@@@@@@@@ @@@@@@@@@@@@@@ .'
"--'.@@@ -.@ @ ,'- .'--"
".@' ; @ @ `. ;'
|@@@@ @@@ @ .
' @@@ @@ @@ ,
`.@@@@ @@ .
',@@ @ ; _____________
( 3 C ) /|___ / Metasploit! \
;@'. __*__,." \|--- \_____________/
'(.,...."/
=[ metasploit v5.0.1-dev ]
+ -- --=[ 1851 exploits - 1046 auxiliary - 321 post ]
+ -- --=[ 541 payloads - 44 encoders - 10 nops ]
+ -- --=[ 2 evasion ]
+ -- --=[ ** This is Metasploit 5 development branch ** ]
msf5 >
3、连接PostgreSQL数据库
除了使用msfdb命令,也可以在Metasploit中直接连接数据库。操作过程如下:
(1)查看数据库状态
在连接数据库之前,需要先了解当前的数据库处于什么状态,可以使用Metasploit子命令db_status来查看数据库状态。
1)启动Metasploit,执行命令如下:
root@daxueba:~# msfconsole
msf5 >
2)查看数据库状态,执行命令如下:
msf5 > db_status
[*] postgresql selected, no connection
输出信息显示,Metasploit默认选择的是PostgreSQL数据库服务,但是还没有连接到任何数据库。
(2)连接数据库
此时,就可以使用Metasploit子命令db_connect连接到现有的数据库了。其语法格式有以下两种:
第一种:
db_connect <user:pass>@<host:port>/<database>
其中,user表示用户名,pass表示密码,host表示PostgreSQL服务所在的主机IP,port表示监听的端口号,database表示数据库名。
第二种:
db_connect -y [path/to/database.yml]
其中,-y表示指定配置文件,path/to/database.yml表示配置文件。
通过配置文件可以看到数据库的相关信息如下:
production:
adapter: postgresql
database: msf
username: msf
password: 8CpuBLruzRZ/UrWU5lHeK3142yAmeCh3JQhxXlVM4oQ=
host: localhost
port: 5432
pool: 5
timeout: 5
根据数据库信息,使用db_connect命令连接数据库,执行命令如下:
msf5 > db_connect msf:8CpuBLruzRZ/UrWU5lHeK3142yAmeCh3JQhxXlVM4oQ=@127.
0.0.1:5432/msf
Connected to Postgres data service: 127.0.0.1/msf
从输出的信息可以看到,已连接到Postgres数据库服务。
3)再次查看数据库状态,执行命令如下:
msf5 > db_status
[*] Connected to msf. Connection type: postgresql. Connection name: wqX77aje.
输出信息表示Metasploit已经成功地连接上了PostgreSQL的msf数据库。
(3)断开数据库连接
当用户不再需要与当前的数据库连接时,可以使用数据库命令db_disconnect断开连接。
1)断开与当前数据库的连接,直接执行命令如下:
msf5 > db_disconnect
Successfully disconnected from the data service: local_db_service.
从输出的信息可以看到,已经成功断开了与本地数据库服务的连接。
2)查看数据库状态,执行命令如下:
msf5 > db_status
[*] postgresql selected, no connection
输出信息表示已成功地断开了连接。
4、手动创建Metasploit专有用户/数据库
进行数据库初始化时,会默认创建msf和msf_test数据库,并且保存在配置文件database.yml中。如果用户不想查找该文件或该文件丢失了,还可以手动创建数据库账户。
1)启动PostgreSQL数据库服务,执行命令如下:
root@daxueba:~# msfdb start
[+] Starting database
2)切换到postgre账户,执行命令如下:
root@daxueba:~# su postgres
postgres@daxueba:/root$
输出信息表示成功切换为postgre账户。
3)创建数据库账户。例如,创建名为msf2的数据库账户。执行命令如下:
postgres@daxueba:/root$ createuser msf2 -P
为新角色输入的口令:#需要手动输出密码
再输入一遍:#再次输出密码
输出信息时需要输入数据库账户msf2的密码,这里使用的密码为123456。
4)创建数据库,执行命令如下:
postgres@daxueba:/root$ createdb --owner=msf2 msf6
其中,owner参数指定数据库所有者,这里为msf2;msf6表示数据库名。
5)启动Metasploit,执行命令如下:
root@daxueba:~# msfconsole
msf5 >
6)建立连接,执行命令如下:
msf5 > db_connect msf2:123456@127.0.0.1/msf6
Connected to Postgres data service: 127.0.0.1/msf6
输出信息表示已经连接到数据库msf6。
微信公众号:计算机与网络安全
ID:Computer-network