欢迎来到【血梦博客】 今天是:2020年07月06日 星期一
站长联系QQ:635948183
当前位置: 网站首页> 渗透测试> 渗透测试技术研究(二)信息收集 + 漏洞评估

渗透测试技术研究(二)信息收集 + 漏洞评估

作者:血梦 日期:2020-06-23 浏览:49分类: 渗透测试 已提交百度收录

系列文章内容纲要

第一章 渗透测试简介

第二章 前期交互

第三章 信息收集

第四章 漏洞识别

第五章 社会工程学

第六章 有线/无线网络利用

第七章 基于应用的漏洞利用

第八章 基于本地主机和物理的利用

第九章 后-利用 技术

第十章 渗透测试工具集介绍

第十一章 渗透报告

第三章 信息收集

接到渗透测试任务,首先要做的就是信息收集(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设备经常被利用进行攻击。所以要根据实际状况综合做扫描策略配置。

扫描结果分析

以下一些组织/机构所提供的内容对漏洞结果分析可能会有帮助

US-CERT

NIST

CAPEC

CVE

CWE

针对扫描结果,建议可以用以下原则进行优先级分析

优先级1:标准协议漏洞(因为这是比较好验证的)

优先级2:重要的系统上的漏洞

优先级3:影响范围广的漏洞

我对漏洞识别的想法

这个“漏洞识别”过程叫法多种多样,漏洞分析,漏洞识别,漏洞挖掘,漏洞评估,脆弱点评估等等。

我更偏好这个过程叫脆弱点评估(Vulnerability Assessment)。

根据PTES流程,信息收集后是威胁建模,接下来才是脆弱点评估。而根据Pentest+流程,信息收集后是漏洞识别。

怎么理解这个脆弱点也很重要,以下面场景为例:

一个目标系统对外开放3306端口,mysql服务,但是账户密码是高强度,可暴破但是无法成功,这就算是一个脆弱点,这个脆弱点我们给它评分为低危

该系统另外又对外开放了xxx服务,探测发现可以通过该服务获取一些特殊名字的信息,这也算是一个脆弱点。这个脆弱点我们也给它评分为低危或者信息。

假设一个场景是通过xxx服务获取到的信息作为mysql的密码去暴破,如果能认证成功,那么就是一个高危甚至是严重的漏洞。

所以你别看一个脆弱点好像是低危无关紧要,如果把一些漏洞串联起来利用,可能可以造成极大破坏。

用一张简单的抽象图来说明我对脆弱点评估的理解

我把测试目标/系统抽象为一个圆圈,圆圈之外是与系统交互的用户,黑圈及内部的白色区块代表系统的处理流程和资产。脆弱点评估的任务就是找出脆弱点

我们一个一个来分析,点A是脆弱点比较明确,但是有些人只测了纵向,所以给出低危,而有些人测了横向,给出高危。点B好像也是脆弱点,但事实上这个点上有做了加固,应该是没什么问题,报脆弱点也是可以的,最好是报一个Info(信息)。点C就没那么清晰了,从上帝视角看,这里确实是脆弱点。点D直通内部系统,但是因为暴露口较小,不太容易被发现。

再谈谈自动化,对于甲方而言,完全依赖人工渗透,无论是自己雇佣人员充当红队进行渗透测试,还是花钱请乙方测试,成本都是挺高的,而且覆盖面非常有限。所有如果能有效的利用免费/商业的扫描器进行系统性/周期性扫描,效果也可以做得非常好。精心选择一些合适的扫描器及扫描策略,开展周期性的自动化扫描,再安排一些人力去分析扫描报告。每半年/一年再让红队/第三方团队进行人工渗透测试是比较理想的渗透测试执行策略。

我的观点是安全做到顶级是培养一种安全文化,以无形胜有形,无招胜有招,SDLC就好比法律,是通过机制去推动和约束,而安全文化就好比道德,是靠内心意识推动和约束。

最后,引用Bruce Lee的名言结束本文

以无法为有法,以无限为有限 — 李小龙

由于笔者水平有限,文章难免会有错误的,欢迎读者批评指正。笔者个人邮箱:kafrocyang@gmail.com

参考文献

[1] CompTIA Pentest+ Cert Guide

关灯