前言
近期笔者在学习 web 渗透测试的相关内容,主要是为了公司之后的安全产品服务。渗透测试本身在学习过程中还是很有意思的,有一种学习到了之前想学但是没学的黑客技术的感觉,并且对笔者已掌握的许多知识做了有益的补充。要学习渗透测试,首先需要明白什么是渗透测试,以及如何进行渗透测试,这其中很多资料可以在网上找到。
什么是渗透测试
渗透测试是一项在计算机系统上进行的授权模拟攻击,旨在对其安全性进行评估。渗透测试人员使用与攻击者相同的工具、技术和流程,来查找和展示系统弱点对业务带来的影响。
渗透测试通常会模拟各种可能威胁您业务的攻击。渗透测试可以检查系统是否足够稳定,能否抵抗来自经过认证和未经认证的攻击,以及一系列系统角色发起的攻击。在合适的范围内,针对您需要评估的系统的任何方面,渗透测试都可以深入其中。
如何进行渗透测试
根据渗透测试的具体目标,组织针对目标系统向测试者提供不同级别的信息或访问权限。有时,渗透测试团队会在开始时设置一种方法并一直坚持下去。有时,测试团队会随着在渗透测试期间对系统认识的加深而改进其策略。在本行业中,我们讨论了三种类型的渗透测试:
- 黑盒。 团队对目标系统的内部结构一无所知。他们充当黑客,探寻任何可从外部发起攻击的弱点。
- 灰盒。 团队对一套或多套凭证有一定了解。他们还了解目标的内部数据结构、代码和算法。渗透测 试人员可以根据详细的设计文档(如目标系统的架构图),构建测试用例。
- 白盒。 对于白盒测试,渗透测试人员可以访问系统和系统工件:源代码、二进制文件、容器,有时甚至是运行系统的服务器。白盒方法可在最短的时间内提供最高水平的安全保证。
渗透测试阶段
渗透测试人员意在模拟怀有动机的对手发起的攻击。为此,他们遵循的方案通常包含以下步骤:
- 侦察。从公共和专用来源收集尽可能多的目标相关信息,以制定攻击策略。这些来源包括互联网搜索、域注册信息检索、社会工程、非侵入式网络扫描,有时甚至是搜索垃圾箱。这些信息有助于渗透测试人员破解出目标的攻击面和潜在漏洞。侦察可能因渗透测试的范围和目标不同而有所差异,可能简单到打个电话即可了解系统的功能。
- 扫描。渗透测试人员使用工具检查目标网站或系统是否存在弱点,包括开放服务、应用安全问题和开源漏洞。渗透测试人员根据在侦察和测试期间的发现来使用各种工具。
- 获得访问权限。攻击者可能怀有各种动机,可能是窃取、更改或删除数据,可能是转移资金,也可能仅仅是要损害您的声誉。在执行每个测试案例时,渗透测试人员都必须确定访问系统的最佳工具和技术,无论是利用弱点(如 SQL 注入),还是通过恶意软件、社会工程或其他方式。
- 维护访问权限。一旦渗透测试人员取得目标的访问权限,其模拟攻击必须保持足够长时间的连接,以达成其目标:提取数据、修改数据或滥用功能。目标是展示潜在的影响。
渗透测试工具
渗透测试没有通用的解决方案。而是不同的目标需要使用不同的工具套件进行端口扫描、应用扫描、Wi-Fi 侵入或网络直接渗透。但一般而言,渗透测试工具的类型分为五个类别:
- 用于发现网络主机和开放端口的侦察工具
- 用于发现网络服务、Web 应用和 API 问题的漏洞扫描器
- 代理工具(例如,专用网络代理或通用中间人代理)
- 用于到达系统或访问资产的利用工具
- 用于在利用之后与系统交互、维护和扩展访问权限以及实现攻击目标的工具
本文介绍的 BurpSuite 便是一款非常使用的渗透测试应用资产收集(所谓资产收集,主要就算收集目标站点有哪些接口、页面、静态资源等)工具。
BurpSuite 下载
BurpSuite 的版本很多,网上的很多资料介绍的版本都比较老旧,这边笔者推荐安装这个 2021 的汉化版本。另外因为 BurpSuite 是一款基于 Java 的工具,要安装使用需要电脑先安装 Java 环境。
- 官网下载安装:https://portswigger.net/burp
- 推荐安装版本:https://www.aliyundrive.com/s/wC2vPcNLEGd 提取码: 8it0 (已解压,压缩包不知道为什么无法分享,原文件下载自多多软件站)
BurpSuite 常用功能详解
BurpSuite 是一款基于 Java 的用于攻击Web应用程序的集合平台。常用来做渗透测试。BurpSuite 内置了很多实用的渗透测试工具。
-
新版本的 BurpSuite (笔者使用的是 2021.12.1 版本的汉化版 BurpSuite)可不需要配置代理,直接访问内置的 chromuim 浏览器(chrome 浏览器的引擎,开源版本),在内置浏览器中访问目标网站即可进行抓包
-
抓包功能,BurpSuite 的抓包功能在使用上其实和 WireShark 差不多,但是 WireShark 使用起来其实还要更麻烦一些,主要是因为现在的网站基本都是使用 https 协议进行数据传输,WireShark 在没有额外配置的情况下是读取不到 https 协议的内容的。旧版本的 BurpSuite 在抓包时也需要配置,但是新版本不需要了,只需要打开内置的浏览器对目标站点访问即可,然后在 Proxy -> HTTP history 中查看捕获的 http 请求
- Proxy -> WebScokets history, 抓取 websocket 请求
- 请求拦截功能,一般也是指 http 请求的拦截,这里需要注意的是查看 BurpSuite 目前的拦截状态
- 关闭请求拦截不会有什么事情发生,而当打开了拦截请求后,默认所有的配置了 BurpSuite 代理的浏览器或其内置浏览器访问所有 web 站点时,请求都不会直接发送到服务端,需要点击“发送”按钮,http 请求才会发送
- 重放器(Repeater),Repeater 在实际的渗透测试中非常常用,主要就是在抓取对应的 http 请求包后,将该请求发送到 Repeater 模块,在 Repeater 中可对原请求的请求头和请求内容进行修改,修改了之后重新发起该请求(所以被翻译为重放器)
- web 站点资产收集。Target -> Site map 下列举了我们通过内置浏览器(配置了 BurpSuite 代理的浏览器,下同)访问的站点记录,另外我们可以通过鼠标右键选择“主动选择扫描此主机”,“被动扫描这台主机”来开启扫描任务。扫描任务可在 Dashboard 中查看到。
- 任务面板 Dashboard 可以查看所有任务,包括未开始 已开始 已完成的任务。该 tab 记录了完整的任务执行日志和问题活动报告。
- 主动扫描 web 站点和被动扫描 web 站点的区别:
- 主动扫描(Active Scanning)
当使用主动扫描模式时,BurpSuite 会向应用发送新的请求并通过payload验证漏洞。这种模式下的操作,会产生大量的请求和应答数据,直接影响系统的性能,通常使用在非生产环境。它对下列的两类漏洞有很好的扫描效果:
- 客户端的漏洞,像XSS、Http头注入、操作重定向;
- 服务端的漏洞,像SQL注入、命令行注入、文件遍历。
对于第一类漏洞,BurpSuite 在检测时,会提交一下 input 域,然后根据应答的数据进行解析。在检测过程中,BurpSuite 会对基础的请求信息进行修改,即根据漏洞的特征对参数进行修改,模拟人的行为,以达到检测漏洞的目的。 对于第二类漏洞,一般来说检测比较困难,因为是发生在服务器侧。比如说 SQL 注入,有可能是返回数据库错误提示信息,也有可能是什么也不反馈。BurpSuite 在检测过程中,采用各个技术来验证漏洞是否存在,比如诱导时间延迟、强制修改 Boolean 值,与模糊测试的结果进行比较,已达到高准确性的漏洞扫描报告。
- 被动扫描(Passive Scanning)
当使用被动扫描模式时,BurpSuite 不会重新发送新的请求,它只是对已经存在的请求和应答进行分析,这对系统的检测比较安全,尤其在你授权访问的许可下进行的,通常适用于生成环境的检测。一般来说,下列这些漏洞在被动模式中容易被检测出来:
- 提交的密码为未加密的明文。
- 不安全的 Cookie 的属性,比如缺少的 HttpOnly 和安全标志。
- cookie 的范围缺失。
- 跨域脚本包含和站点引用泄漏。
- 表单值自动填充,尤其是密码。
- SSL 保护的内容缓存。
- 目录列表。
- 提交密码后应答延迟。
- session 令牌的不安全传输。
- 敏感信息泄露,像内部IP地址,电子邮件地址,堆栈跟踪等信息泄漏。
- 不安全的 ViewState 的配置。
- 错误或者不规范的 Content-type 指令。
虽然被动扫描模式相比于主动模式有很多的不足,但同时也具有主动模式不具备的优点,除了前文说的对系统的检测在我们授权的范围内比较安全外,当某种业务场景的测试,每测试一次都会导致业务的某方面问题时,我们也可以使用被动扫描模式,去验证问题是否存在,减少测试的风险。
- 一般笔者在进行资产收集的时候,回把两种扫描方式结合起来使用
- 另外一个笔者使用到的功能是解码器,Decoder , 这个模块主要集成了一些编码的解码,比如 Base64, ASCII 码等
参考:
https://t0data.gitbooks.io/burpsuite/content/chapter7.html
https://github.com/ffffffff0x/1earn/blob/master/1earn/Security/%E5%AE%89%E5%85%A8%E5%B7%A5%E5%85%B7/BurpSuite.md
https://www.synopsys.com/zh-cn/glossary/what-is-penetration-testing.html#C