渗透测试实战流程详解

前言

公众号断更一段时间了,前几天有读者加上了我,觉得我的文章对他很有帮助,希望我继续更新,同时也希望出一些基础点的教程,毕竟很多读者都是刚入门。我收到这样的反馈,说实话,比较感动,觉得写文章的意义不就是这样吗?只要对别人有帮助,它就是有意义的,这就是我更新的动力。

好了,下面开始正文

之前的一篇文章 如何入门渗透测试 对怎样入门进行了介绍,可以先看这篇文章再看本文,本文将先建立一个系统思维,对实战中怎样通过渗透拿下一个网站的思路(也是黑客的攻击方式)进行讲解,并对其中用到的技术进行简单介绍,后面的文章再对每项技术进行实战讲解,也就是总分结构。

希望通过这篇文章能给读者建立一个系统思维,知道要去掌握哪些知识点,即使在我更新巨慢(哈哈,请原谅我拖更)的情况下,也能自己搜索相应的知识点去学习,自行成长。

树立正确的价值观

在学习渗透测试前,有必要说一下我心中对渗透测试的理解,学会渗透测试,你确实可以像电影里面的黑客那样,拿着个电脑,坐在某个咖啡厅里面敲着键盘就把一个网站挂上黑页或者把数据窃走。这看着很帅,很酷,但在现实中,这是违法行为,是绝对不可取的。

每个技术有它的双面性,我们要利用好它为客户、为公司去发现漏洞,修复漏洞,维护网络安全,而不是去干违法的事,这是每个渗透测试工程师的职业操守,如果做不到,就不要学下去。

为避免有读者走弯路,虽然强调过很多遍,但在开始前,我还是要强调一次:不要未授权测试!不要未授权测试!不要未授权测试!重要的事情说三遍,后果请查看《网络安全法》。

实战流程

在说实战流程前,先看看PTES上的流程

http://www.pentest-standard.org/index.php/Main_Page

上面把渗透测试的流程分为以下部分

  • Pre-engagement Interactions 前期准备 (准备各种工具)
  • Intelligence Gathering 信息收集 (收集各种资产信息)
  • Threat Modeling 威胁建模 (分析攻击面,可能存在的薄弱的地方)
  • Vulnerability Analysis 漏洞分析(找漏洞,找突破口)
  • Exploitation 漏洞利用 (对找到的漏洞进行利用,成功突破)
  • Post Exploitation 后渗透 (对应内网渗透,权限维持)
  • Reporting 报告 (把发现的漏洞写成报告)

PTES 上面的流程相对比较复杂,在实际渗透测试中,往往是把其中一些过程省略或者合并,我简化为以下版本

特定目标的版本:

信息收集-》找漏洞-》验证漏洞-》写报告

图片

只对一个网站渗透的版本:

找漏洞-》验证漏洞-》写报告

图片

以上是工作中最常见的两种版本,因为大多数情况下是给定一些网址,对这些网址进行渗透测试,并不需要进行内网渗透,或者给定一个目标,自行去收集资产,然后进行漏洞发现,拿下权限即可,不允许进行内网渗透。

接下来展开说说每个步骤涉及到的一些操作

收集资产

收集资产出现在给定目标名称的情况下,如XX公司,或给定一个主域名,如 xxx.com 。这时需要我们自行去找到所有这个公司的资产,这一阶段也称作信息收集,本质是收集可以访问的资产,然后找到这些资产的漏洞进行漏洞利用,从而成功获取系统权限。

此阶段你需要的是使用谷歌搜索去尽可能地找到多的资产,也就是使用 google hack ,如果实在不会怎样能用上谷歌,你可以用必应,百度是下策。

信息收集的思维导图网上有不少,可以直接参考,这里就不重复造轮子了

https://github.com/Acczdy/Information-gathering_xmind

简单来说要收集的清单如下:

图片
  • 企业股权结构:用于查找更多的资产,如成立的子公司。
  • 子域名:通过公司的主域名,可以用工具获取尽可能多的子域名,扩大攻击面,我另一篇文章 信息收集系列(一)——域名收集 中有介绍。
  • 备案信息:通过备案信息,可以看公司是否注册了其它官网外的域名。
  • 公众号、小程序、APP:有交互功能的公众号、小程序、APP也是常见的突破口。
  • IP资产:除了域名,企业也会直接使用 IP 访问一些系统,我们可能通过网络空间搜索引擎来获取这些资产,同时通过一些手段获取真实IP,再对C段的IP进行扫描。
  • github或 gitee 码云源码:github或 gitee 码云上存放的项目源码,有些是缺乏安全意识的员工上传的内部系统源码,在以往的工作中,就存在通过在 github中获取到VPN账号密码登录进企业内网的案例。
  • 网盘信息泄露:通过网盘搜索,尝试搜索一些员工分享到网盘上的敏感信息,如密码本、通讯录等。
  • 登录入口:可能通过google hack的方式直接快速获取具有登录入口的网站。
  • 员工信息收集:获得登录入口后,账号可能是需要员工号或者邮箱登录的,所以需要收集员工信息,也是通过google hack的方式进行收集。这一点也可以等到需要时再收集。

在实战中,通过收集上面的信息,已经足够了,然后可以进入下一步。

找漏洞 & 漏洞利用

在收集到资产后会有一个个的网站、小程序、APP、公众号,或者直接就是给定了一个网站,我们就进入到找漏洞阶段。这个阶段也是最重要的,面对一个网站,我们可以按步骤来找漏洞,找到漏洞后,再进行利用。网上也有一些详细的思维导图,如:

https://github.com/naozibuhao/Mind-Map-1

大概流程如下:

图片

端口扫描

端口扫描一般是第一步,可以通过端口扫描发现这个网站对应IP开放了哪些服务,再根据这些服务的名称,到网上查找可利用的漏洞。用到的工具是 nmap 和 masscan,可以两个结合使用,如果只有少数IP时,可以只用 nmap,如果有大量IP,可以用masscan快速扫描开放的端口,再通过nmap来扫描这些端口获取指定版本号等信息。

目录扫描

目录扫描可以扫描网站上的敏感文件(备份文件、源码)、网站后台。为方便,我一般是直接使用burpsuite 工具的 Turbo Intruder 直接加载字典来扫描目录,速度非常快,具体可以参考我之前的文章  Turbo Intruder 使用 – 拥抱十亿请求攻击

指纹识别

指纹识别是指识别出这个网站使用的一些组件,再识别出版本号,然后再在网上查找这些组件的漏洞来测试是否存在。在这里,可以使用 burpsuite 工具作为代理,查看网站服务器使用的中间件版本、网站源码中的 cms 版本号、Cookie中包含的版本信息等,还可以通过浏览器插件 FindSomething 快速遍历网站所有 javascript 文件,识别出所有接口,根据接口判断使用的组件,识别出的接口也可以作为字典直接粘贴到 burpsuite 的 intruder 模块进行遍历。

暴力破解账号

通过以上方式还没找到漏洞的情况下,如果找到网站的登录入口,我们可以通过注册的方式获取账号,如果无法注册,就需要通过暴力破解的方式获取账号,技巧就是先固定个弱口令如123456,通过 burpsuite 的 intruder 模块加载常用账号字典,横向爆破一次。如果没成功,可以尝试通过用户名枚举漏洞,枚举出系统中存在的账号,然后针对这些账号,使用top 100 弱口令字典进行针对性爆破。如果没枚举出来,用 admin 账号来爆破也行,这个账号一般会存在。还可以根据这些账号,使用弱口令生成工具,生成一些特定后缀的密码来测试。暴力破解账号是一门艺术,后面的文章再进行详细写。

工具扫描常规漏洞

无论是否登录进系统,都可以通过工具扫描网站的漏洞,可以直接 burpsuite 自带的扫描功能,也可以使用一些常见的扫描工具,如appscan、awvs、 xray,goby等。需要注意时,尽量不要在登录状态下进行扫描,很容易插入脏数据,本质上是不要对保存数据、修改数据的请求进行扫描,可以通过 burpsuite 对那些查询请求进行扫描。

手动测试漏洞

手动测试漏洞是最考验知识储备的,需要对每个功能可能存在的漏洞进行测试,判断是否存在漏洞,使用到的核心工具还是 burpsuite。对于经验丰富的渗透老手,一般在看到功能点时,就知道可能存在哪些漏洞,对于新手,最好是准备一个 checklist,一个个漏洞去测试,不存在就打勾,存在漏洞就尝试利用,扩大战果,然后写进报告。

checklist 可以参考这个

https://owasp.org/www-project-web-security-testing-guide/stable

常见的漏洞有文件上传、任意文件读取、SQL注入、XSS、越权、暴力破解、用户名枚举、弱口令、反序列化漏洞、SSRF、XXE、任意密码重置、短信轰炸、未授权访问。

在手动测试漏洞的过程中,其实也会穿插着漏洞利用,如通过某个工具测试到存在反序列化漏洞,就可以直接通过这个工具来利用漏洞执行系统命令。

报告

发现漏洞后,需要编写渗透测试报告,一般来说,每个安全公司都会有自己的渗透测试模板,但在对每个漏洞的报告编写都是有些共通的地方的,如漏洞名称、漏洞URL、漏洞风险等级、漏洞描述、测试过程、修复建议

下面以写个SQL注入的漏洞报告为例:

漏洞名称SQL注入
漏洞等级高危
漏洞URLhttps://www.xxx.com/list.php?id=1
漏洞描述网站通过拼接SQL语句的方式查询数据,由于用户的输入,也是SQL语句的一部分,所以攻击者可以利用这部分可以控制的内容,注入自己定义的语句,改变SQL语句执行逻辑,让数据库执行任意自己需要的指令。通过控制部分SQL语句,攻击者可以查询数据库中任何自己需要的数据,利用数据库的一些特性,可以直接获取数据库服务器的系统权限。
测试过程在XX功能点发送下面请求,其中id 参数存在SQL注入:https://www.xxx.com/list.php?id=1
使用 sqlmap 进行验证:python sqlmap.py –dbs -u https://www.xxx.com/list.php?id=1
【sqlmap运行结果截图】

成功获取数据库列表
修复建议1. 禁止采用SQL语句拼接查询数据,应使用预处理执行SQL语句,对所有传入SQL语句中的变量进行绑定。2. 添加健壮的SQL全局过滤器,对用户输入的恶意SQL字符、语句进行拦截过滤。

一个好的漏洞报告,一定是测试过程清晰的,要写成开发能看懂的报告,步骤尽量详细,需要换位思考,如果你是开发,你看着测试过程,能不能了解到哪里存在漏洞。同时,修复建议也至关重要,尽量定详细的修复方案,站在开发的视角去写。修复建议不能出错,如果修复错误,等于没修复。下面是一些写得很差的例子:测试过程只有一张截图,让开发去悟修复建议只有一句话,如你懂的、添加认证、进行过滤。

结语

渗透测试流程详解就说到这里,这篇文章是给初学者对渗透测试的流程有个大概认识,形成一个系统思维,然后去对每个点如何操作去搜索教程。至于更深入的内网渗透、红队、APT等高阶知识,相信初学者在掌握前面说到的知识后,也有能力去自学了。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/419971.html

联系我们
联系我们
分享本页
返回顶部