提升漏洞挖掘效率与撰写高质量报告指南
在漏洞挖掘领域,要想成为一名成功的漏洞猎人并非易事。这需要知识、观察和毅力各占三分之一,深入挖掘应用程序并进行全面测试是关键,但识别其中的差异需要经验的积累。当完成初步侦察并对所能找到的功能进行全面测试后,我们可以通过以下几种方法让漏洞搜索更加高效。
自动化工作
自动化工作是节省时间的有效方法。虽然在之前的工作中使用过一些自动化工具,但大部分技术还是手动操作,这受限于时间。为了突破时间限制,可以让计算机辅助进行漏洞挖掘。例如,Rojan Rijal 在发现 Shopify 子域名上线五分钟后就披露了一个漏洞,这得益于他对 Shopify 侦察工作的自动化。虽然自动化黑客技术不在本文详细讨论范围内,且不使用它也能成为成功的漏洞赏金猎人,但这确实是黑客增加收入的一种方式。可以从自动化侦察开始,例如自动化以下任务:
- 子域名暴力破解
- 端口扫描
- 可视化侦察
关注移动应用
除了网页应用,移动应用也提供了大量发现漏洞的机会。可以通过两种方式对移动应用进行漏洞挖掘:直接测试应用程序代码或测试应用交互的 API。由于测试 API 与网页黑客技术相似,并且可以专注于 IDOR、SQLi、RCE 等漏洞类型,因此这里主要关注 API 测试。要开始测试移动应用 API,需要通过 Burp 代理手机流量,这样就能查看并操作 HTTP 调用。但有些应用使用 SSL 固定,即不识别或使用 Burp 的 SSL 证书,导致无法代理应用流量。绕过 SSL 固定、代理手机流量以及一般的移动黑客技术虽然不在本文讨论范围内,但它们是很好的学习方向。
识别新功能
关注应用程序新增的功能也是发现漏洞的重要途径。Philippe Harewood 是掌握这一技能的典范,作为 Facebook 项目排名靠前的黑客,他在自己的网站(https://philippeharewood.com/)上公开分享发现的漏洞。他能快速识别新功能,从而比其他人更早发现漏洞。Frans Rosen 在 Detectify 博客(https://blog.detectify.com/)上分享了识别新功能的方法。为了跟踪所测试网站的新功能,可以采取以下措施:
- 阅读所测网站的工程博客
- 监控其工程 Twitter 动态
- 订阅其时事通讯
跟踪 JavaScript 文件
跟踪 JavaScript 文件也有助于发现网站的新功能。当网站依赖前端 JavaScript 框架渲染内容时,这种方法尤为有效。因为应用程序使用的大部分 HTTP 端点通常包含在 JavaScript 文件中,文件的变化可能代表着可测试的新功能或更改后的功能。Jobert Abma、Brett Buerhaus 和 Ben Sadeghipour 曾讨论过跟踪 JavaScript 文件的方法,可以通过在谷歌搜索他们的名字和“reconnaissance”找到相关文章。
付费获取新功能访问权限
虽然在通过赏金赚钱时付费获取功能似乎有悖常理,但这也是一种有效的方法。Frans Rosen 和 Ron Chan 都分享了付费获取新功能访问权限并取得成功的经验。例如,Ron Chan 支付了几千美元测试一个应用程序,发现了大量漏洞,使投资非常值得。为产品、订阅服务付费可以扩大测试范围,而且由于其他人不太可能为不使用的网站功能付费,这些功能可能存在更多未被发现的漏洞。
深入学习相关技术
了解公司使用的技术、库和软件的详细工作原理,有助于发现应用程序中的漏洞。例如,发现 ImageMagick 漏洞需要了解 ImageMagick 及其定义的文件类型的工作方式。通过研究与 ImageMagick 等库相关的其他技术,可能会发现更多漏洞。Tavis Ormandy 在披露 Ghostscript 额外漏洞时就采用了这种方法,相关信息可在 https://www.openwall.com/lists/oss-security/2018/08/21/2 查看。FileDescriptor 通过阅读网页功能的 RFC 并关注安全考虑因素,深入了解技术的预期工作方式和实际实现方式,他对 OAuth 的深入了解就是一个很好的例子。
在漏洞挖掘过程中,有许多工具可以帮助我们更轻松地完成工作,如 Burp、ZAP、Nmap 和 Gowitness 等。当常规的漏洞搜索途径用尽后,可以通过深入研究移动应用和所测网站的新功能来提高漏洞搜索的成功率。
以下是一个简单的流程图,展示了提升漏洞挖掘效率的步骤:
graph LR
A[完成侦察与功能测试] --> B[自动化工作]
A --> C[关注移动应用]
A --> D[识别新功能]
A --> E[跟踪 JavaScript 文件]
A --> F[付费获取新功能访问权限]
A --> G[深入学习相关技术]
B --> H[提高效率]
C --> H
D --> H
E --> H
F --> H
G --> H
同时,为了更清晰地展示不同方法的特点,我们可以列出以下表格:
| 方法 | 优点 | 挑战 |
| ---- | ---- | ---- |
| 自动化工作 | 节省时间,可快速发现漏洞 | 需要一定的技术基础来实现自动化 |
| 关注移动应用 | 提供新的漏洞发现机会 | 可能遇到 SSL 固定等问题 |
| 识别新功能 | 能提前发现潜在漏洞 | 需要持续关注和跟踪 |
| 跟踪 JavaScript 文件 | 有助于发现网站新功能 | 分析文件变化需要一定技巧 |
| 付费获取新功能访问权限 | 扩大测试范围,发现更多漏洞 | 需要一定的资金投入 |
| 深入学习相关技术 | 增加发现漏洞的可能性 | 需要花费时间和精力学习 |
提升漏洞挖掘效率与撰写高质量报告指南
当你成功发现第一个漏洞时,这无疑是一个值得庆祝的时刻。但此时千万不能掉以轻心,接下来撰写一份高质量的漏洞报告至关重要。以下将为你详细介绍撰写漏洞报告的要点。
阅读项目政策
在提交漏洞之前,务必仔细审查项目政策。每个参与漏洞赏金平台的公司都会提供一份政策文档,其中通常会列出排除的漏洞类型以及项目范围。在进行漏洞挖掘之前,一定要阅读公司的政策,避免浪费时间去寻找已知问题或公司要求不报告的漏洞。
曾经有这样一个惨痛的教训,有人在 Shopify 发现了一个漏洞,当在其文本编辑器中提交格式错误的 HTML 时,Shopify 的解析器会纠正它并存储 XSS。发现者兴奋不已,迫不及待地提交了报告,满心期待着至少 500 美元的赏金。然而,提交报告后仅仅五分钟,项目方就礼貌地告知该漏洞已被知晓,研究人员被要求不要提交此类报告。最终,报告被判定为无效,发现者还失去了五个信誉点。所以,一定要从这个错误中吸取教训,认真阅读政策。
详细描述漏洞
在确认可以报告漏洞后,就需要撰写报告了。为了让公司认真对待你的报告,需要提供以下详细信息:
-
漏洞复现所需的 URL 和受影响参数
:明确指出漏洞出现的具体位置和相关参数,以便公司能够准确复现漏洞。
-
浏览器、操作系统和应用版本(如适用)
:说明测试时使用的环境,有助于公司排查是否与特定环境有关。
-
漏洞描述
:清晰地阐述漏洞的性质和表现。
-
复现步骤
:详细列出如何重现该漏洞的每一个步骤,确保公司能够按照步骤复现问题。
-
影响说明
:解释漏洞可能带来的危害,以及如何被利用。
-
修复建议
:提供解决该漏洞的建议,展示你的专业能力和诚意。
此外,建议以截图或不超过两分钟的短视频形式提供漏洞的证明材料。这些材料不仅可以记录你的发现,还能在演示如何复现漏洞时提供帮助。同时,在准备报告时,要考虑漏洞的潜在影响。例如,Twitter 上的存储型 XSS 是一个严重问题,因为它是一家上市公司,拥有大量用户,且用户对该平台高度信任。相比之下,一个没有用户账户的网站可能认为存储型 XSS 的严重性较低。而在一个托管个人健康记录的敏感网站上,隐私泄露问题可能比 Twitter 上更为重要,因为 Twitter 上的大部分用户信息已经公开。
再次确认漏洞
在阅读完公司政策、起草好报告并包含了证明材料后,花点时间思考一下你所报告的是否真的是一个漏洞。例如,如果你因为在 HTTP 请求体中未看到令牌而报告 CSRF 漏洞,要检查该参数是否可能作为请求头传递。
2016 年 3 月,Mathias Karlsson 写了一篇关于发现同源策略(SOP)绕过漏洞的精彩博客文章(https://labs.detectify.com/2016/03/17/bypassing-sop-and-shouting-hello-before-you-cross-the-pond/)。但他最终没有获得奖励,他在博客中用瑞典谚语“不要在过河前就打招呼”来形容自己的经历,意思是在确定成功之前不要庆祝。Karlsson 在测试 Firefox 时发现,在 macOS 上该浏览器会接受格式错误的主机名。例如,URL http://example.com.. 会加载 example.com 但在主机头中发送 example.com.. 。他尝试访问 http://example.com…evil.com 也得到了相同的结果。他认为这意味着可以绕过 SOP,因为 Flash 会将 http://example.com..evil.com 视为属于 *.evil.com 域。他检查了 Alexa 排名前 10000 的网站,发现 7% 的网站可能会受到攻击,包括 yahoo.com。他写好了漏洞报告,但决定与同事再次确认该问题。他们用另一台计算机重现了该漏洞,更新 Firefox 后仍然确认了漏洞。他还发了一条关于该漏洞的推文。然而,他后来意识到自己的错误,原来他没有更新操作系统。更新后,漏洞就消失了。显然,他注意到的问题在六个月前就已经被报告并修复了。即使是像 Karlsson 这样优秀的漏洞赏金猎人也差点犯了尴尬的错误,所以在报告漏洞之前一定要确认。否则,以为发现了重大漏洞,却发现误解了应用程序并提交了无效报告,那将是非常令人沮丧的。
维护个人信誉
每当考虑提交漏洞时,要退后一步,问问自己是否会为公开披露该报告而感到骄傲。
在开始漏洞挖掘时,有些人会提交大量报告,希望能有所帮助并登上排行榜,但实际上只是写了无效报告,浪费了大家的时间。不要犯同样的错误。
你可能不在乎自己的信誉,或者认为公司可以从大量的报告中筛选出有价值的漏洞。但在所有漏洞赏金平台上,你的统计数据很重要。这些数据会被跟踪,公司会根据它们来决定是否邀请你参加私人项目。私人项目通常对黑客来说更有利可图,因为参与的黑客较少,竞争也较小。
例如,有人曾被邀请参加一个私人项目,一天内就发现了八个漏洞。但当晚他向另一个项目提交了一份报告,结果被评为 N/A,这降低了他在 HackerOne 上的统计数据。第二天,当他想向另一个私人项目报告一个漏洞时,被告知统计数据太低,需要等待 30 天才能报告。等待的这 30 天并不好受,他很幸运,没有人在这段时间内发现这个漏洞。这个错误的后果让他学会了珍惜在所有平台上的信誉。
尊重公司立场
要记住,并非所有公司都有足够的资源立即响应报告或集成漏洞修复。在撰写报告或跟进时,要考虑公司的立场。
当公司推出新的公开漏洞赏金计划时,会收到大量需要分类处理的报告。在开始询问更新情况之前,给公司一些时间回复。有些公司的政策中包含服务级别协议,并承诺在给定的时间内响应报告。要克制自己的兴奋,考虑公司的工作量。对于新报告,通常预计在五个工作日内得到回复。之后,你可以礼貌地留言确认报告的状态。大多数情况下,公司会回复并告知情况。如果他们没有回复,应该再给他们几天时间,然后再尝试或向平台升级问题。
另一方面,如果公司已经确认了报告中的漏洞并进行了分类,你可以询问修复的预计时间以及是否会得到更新。你也可以询问是否可以在一两个月后再次询问。开放的沟通是你希望继续合作的项目的一个指标;如果公司没有响应,最好转向另一个项目。
在与 HackerOne 前首席赏金官 Adam Bacchus 的交流中了解到,漏洞赏金计划虽然在不断改进,但会收到很多无效报告,尤其是在公开项目中,这被称为“噪音”。报告噪音会给项目分类人员增加不必要的工作,可能会延迟对有效报告的响应。赏金计划需要在漏洞修复和现有开发任务之间找到平衡。当收到大量报告或多人报告同一漏洞时,确定修复优先级是一个特别大的挑战,尤其是对于低或中等严重程度的漏洞。在复杂系统中验证报告需要时间,因此清晰地描述和提供复现步骤非常重要。当分类人员需要向你请求额外信息来验证和复现漏洞时,会延迟漏洞修复和你的奖励支付。并非所有公司都有专门的安全人员来运行全职的赏金计划,小公司可能会让员工在管理计划和其他开发职责之间分配时间。因此,有些公司可能需要更长时间来响应报告和跟踪漏洞修复。修复漏洞需要时间,特别是如果公司要经历完整的开发生命周期。为了集成修复,公司可能需要经过调试、编写测试和进行阶段性部署等步骤。当在客户依赖的系统中发现低影响漏洞时,这些过程会进一步减慢修复速度。项目可能需要比你预期更长的时间来确定正确的修复方法,因此清晰的沟通和相互尊重非常重要。如果担心快速获得报酬,可以专注于在分类时就支付报酬的项目。漏洞赏金计划希望黑客能够再次参与,因为 HackerOne 指出,随着黑客向单个项目提交更多漏洞,他们报告的漏洞严重程度通常会增加,这被称为在项目上“深入挖掘”。同时,负面报道是真实存在的风险,项目可能会错误地驳回漏洞、修复时间过长或给予黑客认为过低的赏金。此外,当黑客认为出现这些情况时,他们会在社交媒体和传统媒体上公开批评项目,这些风险会影响分类人员的工作和他们与黑客的关系。所以,在撰写报告时,黑客和项目需要共同理解这些挑战,携手合作,以改善双方的处境。
申诉赏金奖励
如果你向支付赏金的公司提交了漏洞,要尊重公司对奖励金额的决定,但也不要害怕与公司沟通。在 Quora 上,HackerOne 的联合创始人 Jobert Abma 分享了关于赏金分歧的看法(https://www.quora.com/How-do-I-become-a-successful-Bug-bounty-hunter/):如果你对收到的金额有异议,可以讨论为什么你认为应该获得更高的奖励。避免在没有说明理由的情况下要求另一份奖励。作为回报,公司应该尊重你的时间和价值。
当对报告的奖励金额有疑问时,可以礼貌地询问原因。例如,可以使用以下话术:“非常感谢您给予的赏金,我真的很感激。我很好奇这个金额是如何确定的。我原本期望是 $X,但您给了 $Y。我认为这个漏洞可以用于 [利用 Z],这可能会对您的 [系统/用户] 产生重大影响。我希望您能帮助我理解,以便我未来能更专注于对您最重要的事情。”
公司可能会有以下几种回应:
-
解释影响低于预期但不改变金额
:说明报告的影响比你认为的要低,但不改变奖励金额。
-
承认误解并增加金额
:同意他们误解了你的报告,并增加奖励金额。
-
纠正分类并增加金额
:承认他们对报告的分类有误,在纠正后增加奖励金额。
如果公司披露了涉及与你预期赏金一致的相同类型漏洞或类似影响的报告,你也可以在沟通中提及。
以下是一个撰写漏洞报告的流程图:
graph LR
A[发现漏洞] --> B[阅读项目政策]
B --> C[详细描述漏洞]
C --> D[再次确认漏洞]
D --> E[维护个人信誉]
E --> F[尊重公司立场]
F --> G[提交报告]
G --> H{公司反馈}
H -->|有分歧| I[申诉赏金奖励]
H -->|无分歧| J[结束流程]
I --> J
同时,为了更清晰地展示撰写漏洞报告各要点的重要性和作用,我们列出以下表格:
| 要点 | 重要性 | 作用 |
| ---- | ---- | ---- |
| 阅读项目政策 | 高 | 避免提交无效报告,节省时间和精力 |
| 详细描述漏洞 | 高 | 让公司准确理解漏洞,提高报告通过率 |
| 再次确认漏洞 | 高 | 确保报告的准确性,维护个人信誉 |
| 维护个人信誉 | 高 | 增加被邀请参加私人项目的机会 |
| 尊重公司立场 | 中 | 建立良好合作关系,促进问题解决 |
| 申诉赏金奖励 | 低 | 合理争取应得的奖励 |
通过遵循上述提升漏洞挖掘效率的方法和撰写高质量漏洞报告的要点,你将在漏洞挖掘的道路上取得更好的成果,同时也能与公司建立良好的合作关系,实现互利共赢。
超级会员免费看
1232

被折叠的 条评论
为什么被折叠?



