系列文章内容纲要
第三章 信息收集
第四章 漏洞识别
第五章 社会工程学
第六章 有线/无线网络利用
第七章 基于应用的漏洞利用
第八章 基于本地主机和物理的利用
第九章 后-利用 技术
第十章 渗透测试工具集介绍
第十一章 渗透报告
第三章 信息收集
接到渗透测试任务,首先要做的就是信息收集(Information Gathering)或者说是侦查(Reconnaissance)。
信息收集可以分为 被动信息收集(Passive Reconnaissance)和主动信息收集(Active Reconnaissance)两种。下文将从这两个方向分别展开介绍。
被动信息收集
所谓被动信息收集,是指收集信息的方式不通过直接和测试目标交互。简单而言就是测试目标不知道你在收集信息。就好像你喜欢一个女生,不直接向她索要联系方式,而是向她的同学/朋友盘敲侧击打听出联系方式。
被动信息收集一些常见方法如:
域名枚举
搜索引擎(Google,shodan)
包嗅探
数据包查看
OSINT(Open Source Intellegence)
Recon-ng
域名枚举
使用google搜索引擎的”site:”来搜索子域名,比如搜索”site:example.com”
还可以使用DNSdumpster,dig,nsloopup,sublist3r等工具进行收集
数据包嗅探/查看
可以通过wireshark,tcpdump来嗅探数据包
嗅探的原理是把本机网卡的混杂模式打开,嗅探工具把网卡接收到的数据包呈现出来。
网络嗅探一个很有用的工具是 hub,hub的所有端口都在同一个冲突域,区别于交换机每个端口一个冲突域,所以接在同一个hub上的机器能接收到所有设备的数据包。
无线网络数据包的嗅探需要特定的无线网卡支持,比如Intel 3945ABG。
注:冲突域是指连接在同一导线上的所有工作站的集-合,或者说是同一物理网段上所有节点的集-合或以太网上竞争同一带宽的节点集-合。
OSINT
OSINT是指Open Source Intelligence,可以简单理解为互联网上开源的信息。我们经常听到人肉搜索,有一部分内容就是利用OSINT来搜索目标的信息。比如社交账户,id等。
recon-ng
recon-ng和msfconfole的操作非常像,新版本kali集成了recon-ng这个工具,不过默认是没安装模块
非常基础的演示过程如下,(有些模块需要用到API key,这些需要再进行配置才可正常使用)
[recon-ng][default] > marketplace refresh
[recon-ng][default] > marketplace search shodan
[recon-ng][default] > marketplace search hackertarget
[recon-ng][default] > marketplace install recon/domains-hosts/hackertarget
[recon-ng][default] > modules load recon/domains-hosts/hackertarget
[recon-ng][default][hackertarget] > options list
[recon-ng][default][hackertarget] > info
[recon-ng][default][hackertarget] > options set SOURCE example.com
[recon-ng][default][hackertarget] > run
-----------
EXAMPLE.COM
-----------
[*] [host] example.com (93.184.216.34)
[*] [host] www.example.com (93.184.216.34)
-------
SUMMARY
-------
[*] 2 total (2 new) hosts found.
主动信息收集
主动信息收集是指收集信息的方式直接和测试目标交互。测试目标理论上能知道你在收集信息。就好像你喜欢一个女生,直接过去和她打招呼索要联系方式。
主动信息收集一些常见方法如:
主机枚举
网络枚举
用户枚举
组枚举
网络共享枚举
Web页面枚举
应用枚举
服务枚举
包伪造
nmap扫描
nmap是主动信息收集的“瑞士军-刀”,这个工具集成了非常多主动收集功能,还提供多种多样的插件。
nmap的一些常见的选项如下
-O 操作系统探测
-T[0-5] 枚举时间(时间越大枚举速度越快)
-p 指定扫描的端口(比如-p22, -p1-65535)
-v 打印扫描过程信息
-sS syn扫描
-sT tcp扫描 (完整的tcp握手,比syn效率低,在nmap没有root权限时,可以使用tcp扫描)
-sU udp扫描
-sF Fin扫描
-sn ping扫描
-Pn 不使用ping扫描
使用nmap脚本, 在nmap安装目录下,有个scripts目录, 这个目录下有很多nse文件,这些就是nmap的脚本插件,这些插件是用lua语言编写的。
比如利用nmap使用插件smb-enum-users来执行smb用户枚举
nmap --script smb-enum-users.nse -p445 <host>
有些脚本还带有参加,比如使用smb进行进程枚举,就需要smb的账户密码作为参数
nmap --script smb-enum-processes.nse --script-args smbusername=<user>,smbpass=<pass> -p445 <host>
Scapy 网络包构造
Scapy是一款强大的交互式数据包处理工具、数据包生成器、网络扫描器、网络发现工具和包嗅探工具。它提供多种类别的交互式生成数据包或数据包集-合、对 数据包进行操作、发送数据包、包嗅探、应答和反馈匹配等等功能。
Scapy提供开发库,也可使用交互式模式,下面将介绍几个利用交互式scapy进行扫描的例子
使用root权限打开scapy
# 发送一个ICMP包
>>> send(IP(dst="192.168.1.2")/ICMP()/"testpacket")
# 发送一个TCP SYN包
>>>ans,unans=sr(IP(dst="192.168.1.2")/TCP(dport=445,flag="S"))
# 方式一个TCP ACK包
>>>ans,unans=sr(IP(dst="192.168.1.2")/TCP(dport=445, flag="A"))
发送一个UDP ping包
>>>ans,unans=sr(IP(dst="192.168.1.2")/UDP(dport=0))
其他主动信息收集工具
Masscan
Nikto
第四章 漏洞识别
Pentest+针对漏洞识别的内容相当比较简单,只介绍了几类漏洞扫描方式,不涉及人工漏洞评估。
自动化扫描分类
漏洞自动化扫描大体可分为:非凭证扫描,凭证扫描,发现扫描,全量扫描,秘密扫描,兼容性扫描
非凭证扫描是指黑盒扫描,一般就是指定一个ip或域名,扫描器进行端口,服务探测,根据banner,指纹判断服务版本,并利用一些一直poc去遍历服务,以此发现一些漏洞。
凭证扫描是指提供扫描器系统root权限的登录凭证,比如提供ssh/telnet账户密码等信息,扫描器可以通过凭证进入被扫描系统内部。如果条件允许建议使用此类扫描,因为这类扫描会相对准确且覆盖面会比较全面。
发现扫描类似于nmap,不停的在探测,然后匹配数据库,目标是发现主机,端口,服务,版本,web路径等。
全量扫描典型例子如Nessus,Nessus可以配置策略,比如跑所有的插件,但事实上很多插件不适用是可以裁剪掉,以加快扫描速度。
被动扫描就是可以实现秘密扫描,把正常用户访问的流程端口镜像到扫描器,扫描器根据信息建立网络拓扑结构,并判断是否存在安全漏洞。秘密扫描的目的是不想让目标发现扫描痕迹。
兼容性扫描比如GDPR扫描器,等保2.0扫描器,HIPAA扫描器等,针对特定的规则进行扫描测试,检测目标设备是否符合标准,不过很多时候还是需要人工参与评测。
漏洞扫描的挑战
扫描时间的选择
一方面在业务繁忙的时候扫描可能对网络/业务造成影响,另一方面扫描过程可能造成设备宕机等服务异常。
扫描协议确认
如果目前设备支持udp和tcp,那么对扫描选项进行配置时,应该tcp,udp都要配置,否则可能造成漏扫。
网络拓扑
尽量不要跨多个网络对目标进行扫描,这样可能造成一些额外的不确定影响。最好是扫描器和目标设备配置在同一个网络,比如都部署在DMZ中。
带宽限制
在扫描时,要考虑带宽限制,一方面减小对网络其他设备的影响,另一方面是避免因为带宽达到上限影响扫描进度和结果。
其他资源限制
排除带宽原因,可能有其他因素会造成扫描瓶颈,比如多线程导致目标设备异常等等,扫描配置时也要考虑这个因素。
脆弱的系统扫描
比如对打印机,IoT设备这类脆弱性系统,要选择性扫描,甚至直接豁免扫描。但事实上这类设备也可能增加风险,特别是近几年IoT设备经常被利用进行攻击。所以要根据实际状况综合做扫描策略配置。
扫描结果分析
以下一些组织/机构所提供的内容对漏洞结果分析可能会有帮助
针对扫描结果,建议可以用以下原则进行优先级分析
优先级1:标准协议漏洞(因为这是比较好验证的)
优先级2:重要的系统上的漏洞
优先级3:影响范围广的漏洞
我对漏洞识别的想法
这个“漏洞识别”过程叫法多种多样,漏洞分析,漏洞识别,漏洞挖掘,漏洞评估,脆弱点评估等等。
我更偏好这个过程叫脆弱点评估(Vulnerability Assessment)。
根据PTES流程,信息收集后是威胁建模,接下来才是脆弱点评估。而根据Pentest+流程,信息收集后是漏洞识别。
怎么理解这个脆弱点也很重要,以下面场景为例:
一个目标系统对外开放3306端口,mysql服务,但是账户密码是高强度,可暴破但是无法成功,这就算是一个脆弱点,这个脆弱点我们给它评分为低危
该系统另外又对外开放了xxx服务,探测发现可以通过该服务获取一些特殊名字的信息,这也算是一个脆弱点。这个脆弱点我们也给它评分为低危或者信息。
假设一个场景是通过xxx服务获取到的信息作为mysql的密码去暴破,如果能认证成功,那么就是一个高危甚至是严重的漏洞。
所以你别看一个脆弱点好像是低危无关紧要,如果把一些漏洞串联起来利用,可能可以造成极大破坏。
用一张简单的抽象图来说明我对脆弱点评估的理解
我把测试目标/系统抽象为一个圆圈,圆圈之外是与系统交互的用户,黑圈及内部的白色区块代表系统的处理流程和资产。脆弱点评估的任务就是找出脆弱点
我们一个一个来分析,点A是脆弱点比较明确,但是有些人只测了纵向,所以给出低危,而有些人测了横向,给出高危。点B好像也是脆弱点,但事实上这个点上有做了加固,应该是没什么问题,报脆弱点也是可以的,最好是报一个Info(信息)。点C就没那么清晰了,从上帝视角看,这里确实是脆弱点。点D直通内部系统,但是因为暴露口较小,不太容易被发现。
再谈谈自动化,对于甲方而言,完全依赖人工渗透,无论是自己雇佣人员充当红队进行渗透测试,还是花钱请乙方测试,成本都是挺高的,而且覆盖面非常有限。所有如果能有效的利用免费/商业的扫描器进行系统性/周期性扫描,效果也可以做得非常好。精心选择一些合适的扫描器及扫描策略,开展周期性的自动化扫描,再安排一些人力去分析扫描报告。每半年/一年再让红队/第三方团队进行人工渗透测试是比较理想的渗透测试执行策略。
我的观点是安全做到顶级是培养一种安全文化,以无形胜有形,无招胜有招,SDLC就好比法律,是通过机制去推动和约束,而安全文化就好比道德,是靠内心意识推动和约束。
最后,引用Bruce Lee的名言结束本文
以无法为有法,以无限为有限 — 李小龙
由于笔者水平有限,文章难免会有错误的,欢迎读者批评指正。笔者个人邮箱:[email protected]
参考文献
[1] CompTIA Pentest+ Cert Guide
*本文作者:nobodyshome,转载请注明来自FreeBuf.COM
来源:freebuf.com 2020-06-04 09:30:01 by: nobodyshome
请登录后发表评论
注册