目录结构说明:
脚本 generate-directories.py 从 GitHub 获取当前最新版本的 VRT 结构,并创建任何缺失的目录。不会根据从 VRT 中移除的项目来删除或重命名目录。
脚本遵循标准条目名称,并保留 VRT id 字段提供的下划线 / 大小写。
此仓库启用了“受保护的主分支(Protected Master)”;这意味着只有项目管理员才能通过 Pull Request 提交到 master 分支。所有更新都需要通过 pull request 来进行,以确保完整性。
以下内容假定 SSH 访问已正确配置。
首先,检出 master 分支:
git clone [email protected]:bugcrowd/templates.git ## n.b. using SSH aliases can make this much simpler
在系统上拥有 master 后,你需要为即将进行的工作创建一个分支:
git checkout -b <branch-name>
示例分支名称可以是 XXE-templates、XSS-templates 之类的,用来表示这批工作的内容。这些分支应保持小而精,最好只包含一组模板,而不要包含更多内容。请经常提交和推送!
git commit -am "Comments about what you changed go here" 会将你的更改保存到 本地 git 仓库中。始终留下描述性的提交信息。
完成模板后,你可以将它们推送到仓库。这些更改仍将位于自己的分支上,但当你推送时,linter 将运行并根据一组规则验证 Markdown。如果你遵循了示例模板并不过多偏离,模板应该能通过。
git push --set-upstream origin <branch-name> 这将在 origin 服务器(github)上创建分支并推送你的更改。对于该分支,此操作只需执行一次,之后对分支的推送可以使用 git push 完成。
一旦 linter 成功运行,你就可以创建 Pull Request(PR)。
在 GitHub 界面中选择该分支。你应该会在代码上方看到一个“Pull request”按钮。
点击该按钮,然后填写一些关于更改内容的详细信息以供项目管理员审阅,然后点击“Create pull request”。
到这一步,你就完成了!我们将审阅 PR,并酌情合并或拒绝。
一旦 PR 被接受,你就可以删除该分支:
git branch -d <branch-name>
下面是一个示例模板。所有部分都应更新为包含正确的信息。
## Overview of the Vulnerability
Provide a 1-2 sentence description of the vulnerability.
This format is a good guide:
[VULNTYPE] in [COMPONENT] in [APPLICATION] allows [ATTACKER] to [IMPACT] via [VECTOR]
## Business Impact
Provide an example of the impact to the business. This could be reputational damage, financial loss, a loss in customer trust, etc.
## Steps to Reproduce
Provide a step-by-step walkthrough on how to access the vulnerable injection point, and how to exploit the vulnerability.
Example:
1. Login to in-scope asset at <www.bugcrowd.com/login>
1. Browse to account page
1. Modify ID token to add single quote
1. View error which states 'SQL Syntax Error'
1. Replace ID value with `1' waitfor delay '00:00:10'; `
## Proof of Concept (PoC)
Your submission must include evidence of the vulnerability and not be theoretical in nature.
You may present your evidence as output from a tool, such as SQLMap, unless the program forbids the use of these tools. Evidence may also be in the format of terminal output, screenshots, or video.
Use this section to demonstrate clearly the effect of the vulnerability. However, do not access Personally Identifiable Information (PII).
这是一个示例模板:
# Reflected Cross-Site Scripting (Non-self)
## Overview of the Vulnerability
Reflected Cross-Site Scripting (XSS) is a type of injection attack where malicious JavaScript code is injected into a website. When a user visits the affected web page, the JavaScript code executes and its input is reflected in the user’s browser. Reflected XSS can be found on this domain which allows an attacker to create a crafted URL. When opened by a user, this URL will execute arbitrary Javascript within that user’s browser in the context of this domain.
When an attacker can control code that is executed within a user’s browser, they are able to carry out any actions that the user is able to perform, including accessing any of the user's data and modifying information within the user’s permissions. This can result in modification, deletion, or theft of data, including accessing or deleting files, or stealing session cookies which an attacker could use to hijack a user’s session.
## Business Impact
Reflected XSS could lead to data theft through the attacker’s ability to manipulate data through their access to the application, and their ability to interact with other users, including performing other malicious attacks, which would appear to originate from a legitimate user. These malicious actions could also result in reputational damage for the business through the impact to customers’ trust.
## Steps to Reproduce
1. Enable a HTTP interception proxy, such as Burp Suite or OWASP ZAP
1. Use a browser to navigate to: {{URL}}
1. Forward the following request to the endpoint:
```HTTP Request
{{request}}
```
1. Observe the JavaScript payload being executed
## Proof of Concept (PoC)
Below is a screenshot demonstrating the injected JavaScript executing at the vulnerable endpoint:
{{screenshot}}
尽可能使用被动语态。例如:
正确:
在 Web 应用程序中发现了一个 SQL 注入漏洞。
错误:
我在 Web 应用程序中发现了一个 SQL 注入漏洞。
错误:
Bugcrowd 在 Web 应用程序中发现了一个 SQL 注入漏洞。
错误:
我们在 Web 应用程序中发现了一个 SQL 注入漏洞。
错误:
在整个参与过程中,在 Web 应用程序(<www.example.com>)中发现了一个严重级别的 SQL 注入,攻击者可以利用它从后端数据库中窃取个人身份信息。
正确:
在 <www.example.com> 中发现了一个 SQL 注入,使恶意攻击者能够窃取个人身份信息。
错误:
在 <www.example.com> 中发现了一个 SQL 注入,使恶意攻击者能够窃取个人身份信息,包括电子邮件地址,这将被视为违反 GDPR,并构成相当大的业务风险。
正确:
在 <www.example.com> 中发现了一个 SQL 注入,使恶意攻击者能够窃取个人身份信息。可检索的数据包括密码、电子邮件地址和全名。这构成了违反 GDPR 和相当大的业务风险。
使用缩写词时,务必先写出完整版本,并在括号中注明缩写。一旦完整拼写出来,后续使用只需使用缩写即可。
例如:
跨站脚本(XSS)是一种客户端攻击,允许恶意攻击者在受害者的浏览器中执行 JavaScript。当用户输入未经编码直接反射回浏览器时,就会发生 XSS。
在 example.com 中发现了跨站请求伪造(CSRF)。此 CSRF 允许你在受害者不知情的情况下更新受害用户的地址。
正确:Bugcrowd 错误:BugCrowd、bugcrowd、Bug Crowd、Bug crowd 和 bug crowd。
正确:pentest(如果语法需要,也可写成 Pentest) 错误:pen test、PenTest、Pen Test
当下一个单词以辅音音素开头时,应使用“An”。否则,应使用“A”。
正确:
错误:
使用的语言应始终不带感情色彩且公正。
示例:
{{target}}:计划页面上列出的范围内目标名称(例如,*.bugcrowd.com){{application}}:目标内的特定应用程序(例如,Acme Inc. Employee Portal){{type}}:计划页面上目标旁边列出的测试类型(例如网站测试、API 测试、移动应用测试、硬件测试等){{url}}:URL 的占位符(例如,https://bugcrowd.com/vulnerability-rating-taxonomy){{version}}:所测试软件的具体版本号(例如,13.3.7){{program}}:计划名称(例如,Bugcrowd){{screenshot}}:显示已执行概念验证的照片或视频证据。{{action}}:恶意攻击者利用漏洞后可执行的操作(例如,窃取会话令牌、完全控制管理账户、转储 PII 等){{parameter}}:一种从客户端向服务器传输数据的变量,可存储不同类型的数据。其处理方式由服务器端代码决定。(例如 id=1337){{hardware}}:用于利用 IoT 或汽车资产的一件特定硬件此仓库包含 bugcrowd_templates gem。该 gem 用于根据 VRT 选择获取提交描述和方法学笔记的 templates。它由 Bugcrowd Engineering 使用和维护。
在你的应用 Gemfile 中添加这行:
gem 'bugcrowd_templates'
为了方便开发,我们提供了一个实用工具,用于快速搭建一个可供你体验该 gem 的游乐场(playground)。你可以通过以下命令调用它:
bin/console
下面是一个调用 BugcrowdTemplates 获取提交描述和方法学笔记字段中 templates 的示例。
BugcrowdTemplates.get(
type: 'any_value', # type can be submissions or methodologies
field: 'any_value', # field name of the type
category: 'any_value', # any category name from VRT option
subcategory: 'any_value', # any subcategory name from VRT option
item: 'any_value', # any item name from VRT option
file_name: 'any_value' # file_name can be 'template' or 'guidance'
)
下面是一个调用 BugcrowdTemplates 获取提交描述字段中 template 的示例。
BugcrowdTemplates.get(
type: 'submissions',
field: 'description', # field name of the submissions
category: 'server_security_misconfiguration', # category name from VRT option
subcategory: 'clickjacking', # subcategory name from VRT option
item: 'non_sensitive_action', # item name from VRT option
file_name: 'template' # template
)
=> '# Clickjacking on a non-sensitive action\n\n## Overview\n\n' # template fetched from templates path
获取 guidance 模板的示例
BugcrowdTemplates.get(
type: 'submissions',
field: 'description',
category: 'using_components_with_known_vulnerabilities',
subcategory: 'outdated_software_version',
file_name: 'guidance'
)
下面是一个调用 BugcrowdTemplates 获取方法学笔记字段中 templates 的示例。
BugcrowdTemplates.get(
type: 'methodology',
field: 'notes', # field name of the methodologies
category: 'website_testing',
file_name: 'information'
)
=> '# Information gathering and Reconnaisance\n\n##' # template fetched from templates path
{{software}}:用于利用资产的特定软件(例如 burp、nessus、nikto 等){{payload}}:在资产上执行的命令或有效载荷{{value}}:特定的度量值(秒、毫秒、频率等)