暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Metasploit渗透测试:安装及连接PostgreSQL数据库服务

计算机与网络安全 2020-01-31
1390

一次性付费进群,长期免费索取教程,没有付费教程。

微信群回复公众号:微信群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


【推荐书籍】
文章转载自计算机与网络安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论