引言
在本实验中,你将学习一项 Web 应用安全测试中的基础技术:使用 Burp Suite 生成跨站请求伪造 (CSRF) 概念验证 (PoC)。CSRF 是一种攻击类型,它会诱骗受害者提交一个恶意请求。Burp Suite 提供了一个强大的功能来自动创建 PoC,可用于展示漏洞的影响。
你将使用 Burp Suite 的代理来拦截一个会改变应用状态的请求(例如更新电子邮件地址),然后使用其“Engagement tools”来生成一个重现此请求的 HTML 表单。这个实践练习将加深你对 CSRF 攻击是如何被构造和测试的理解。
查找状态变更请求(例如,更新电子邮件)在代理历史记录中
在此步骤中,你将启动 Burp Suite,使用其内置浏览器在目标网站上执行操作,然后找到代理历史记录中的相应请求。“状态变更请求”是指任何修改服务器上数据的请求,例如更改密码、提交评论或更新个人资料信息。
首先,让我们启动 Burp Suite。
- 点击屏幕左上角的 Applications 菜单。
- 转到 Web 并选择 Burp Suite Community Edition。
- 将出现一个对话框。保留默认设置(
Temporary project),然后点击 Next。 - 在下一个屏幕上,选择
Use Burp defaults并点击 Start Burp。
Burp Suite 运行后,打开其内置浏览器。
- 转到
Proxy选项卡,然后是Intercept子选项卡。 - 点击
Open Browser按钮。一个新的 Chromium 浏览器窗口将打开,它已预先配置为通过 Burp Suite 代理流量。
现在,让我们执行一个要捕获的操作。在本实验中,我们将使用 PortSwigger 的一个测试网站。
- 在 Burp 浏览器中,导航到以下 URL:
https://portswigger.net/web-security/csrf/lab-no-defenses - 点击
Access the lab。你将被重定向到一个博客网站。 - 使用凭据
wiener:peter登录应用程序。你可以在页面上的实验描述中找到这些凭据。 - 登录后,你将看到一个“Update email”表单。输入一个新的电子邮件地址,例如
test@example.com,然后点击Update email。
最后,让我们在 Burp Suite 中找到该请求。
- 返回 Burp Suite 窗口。
- 导航到
Proxy选项卡,然后是HTTP history子选项卡。 - 浏览请求列表。你应该会看到一个
POST /my-account/change-email请求。这是我们要定位的状态变更请求。点击它以在下方面板中查看其详细信息。
POST /my-account/change-email HTTP/2
Host: your-lab-id.web-security-academy.net
...
email=test%40example.com
你现在已成功拦截并识别了一个状态变更请求。
右键单击请求
在此步骤中,你将使用 Burp Suite 的上下文菜单来访问其高级功能。上下文菜单是 Burp Suite 工作流程的核心部分,它提供了对可应用于所选请求的各种工具的快速访问。
在 Proxy > HTTP history 选项卡中,仍然选中 POST /my-account/change-email 请求,执行以下操作:
- 将鼠标光标移到选中的请求行上。
- 右键单击该请求。
这将打开一个包含许多选项的大型上下文菜单。此菜单是上下文敏感的,意味着可用的选项可能会根据你点击的位置而变化。通过右键单击请求,你可以获得一系列可以对该特定请求执行的操作,例如将其发送到其他 Burp 工具,如 Repeater、Intruder,或者在本例中,发送到 CSRF PoC 生成器。
花点时间查看可用选项,熟悉一下这些可能性。
转到 Engagement tools > Generate CSRF PoC
在此步骤中,你将通过上下文菜单导航以查找并启动 CSRF PoC 生成器。此工具归类于“Engagement tools”(参与工具)下,这些功能旨在帮助演示和报告漏洞。
在上一步右键单击请求后,上下文菜单现在可见。请按照以下步骤生成 PoC:
- 在上下文菜单中,找到 Engagement tools 选项并将其鼠标悬停在其上。这将显示一个子菜单。
- 在出现的子菜单中,点击 Generate CSRF PoC。
一个标题为“Generate CSRF PoC”的新窗口将打开。Burp Suite 已自动分析你选择的 POST 请求,并生成了一个简单的 HTML 页面,该页面在提交时将重放相同的请求。这是 CSRF 攻击的核心:诱使用户的浏览器向他们已登录的网站提交请求。
查看生成的 HTML 表单
在此步骤中,你将检查 Burp Suite 生成的 HTML 代码。理解这段代码对于理解 CSRF 攻击的工作原理至关重要。
在“Generate CSRF PoC”窗口中,你将看到一段 HTML 代码。它应该与以下内容类似:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>
history.pushState("", "", "/");
</script>
<form
action="https://your-lab-id.web-security-academy.net/my-account/change-email"
method="POST"
>
<input type="hidden" name="email" value="test@example.com" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
让我们分解一下这个 HTML 的关键组成部分:
<form action="..." method="POST">: 这定义了一个 HTML 表单。action属性指定了表单数据将被发送到的 URL——在本例中,是用于更改电子邮件地址的相同端点。method="POST"与原始请求的方法相匹配。<input type="hidden" name="email" value="...">: 这是一个隐藏的表单字段。它包含服务器执行操作所需的参数。这里是email参数,值为test@example.com。由于它是隐藏的,访问此页面的受害者将看不到它。<input type="submit" value="Submit request" />: 这创建了一个按钮,受害者需要点击该按钮才能触发攻击。在更高级的攻击中,可以使用 JavaScript 自动触发此提交。
这个简单的 HTML 页面是 CSRF 漏洞的一个功能性概念验证(Proof of Concept)。
使用“Test in browser”功能验证 PoC
在此步骤中,你将使用生成的 PoC 来确认 CSRF 漏洞。Burp Suite 通过内置的测试功能使此过程变得简单。
在“Generate CSRF PoC”窗口中,你将找到一个标有 Test in browser 的按钮。此功能允许你在已登录目标应用程序的同一浏览器会话中直接测试 PoC。
- 点击 Test in browser 按钮。
- Burp Suite 会提供一个唯一的 URL。点击 Copy 按钮将此 URL 复制到剪贴板。
- 返回 Burp 的内置浏览器(Chromium 窗口)。
- 将复制的 URL 粘贴到地址栏并按 Enter。
一个新页面将加载,仅显示一个“Submit request”按钮。这就是你正在运行的 PoC。
- 点击 Submit request 按钮。
浏览器会将 POST 请求发送到 Web 应用程序。由于你已登录(你的浏览器拥有会话 cookie),应用程序将像你合法发起请求一样处理该请求。
要确认攻击成功:
- 导航回带有博客应用程序的标签页。
- 刷新页面或点击“My account”链接。
- 你应该会看到电子邮件已更新为
test@example.com(或你的 PoC 中的任何值)。实验(Lab)也应该显示“Congratulations, you solved the lab!”消息。
这证实了 CSRF PoC 有效,并且应用程序存在漏洞。
总结
在本实验(Lab)中,你已成功学会如何使用 Burp Suite 生成和测试跨站请求伪造(CSRF)概念验证(PoC)。
你实践了完成此任务的完整工作流程:
- 使用 Burp 的代理(proxy)拦截状态更改请求。
- 使用上下文菜单访问
Engagement tools。 - 一键生成 CSRF PoC。
- 分析生成的 HTML 以理解攻击机制。
- 在浏览器中测试 PoC 以确认漏洞。
这项技能对于任何 Web 应用程序安全专业人员来说都至关重要,因为它提供了一种清晰有效的方式,可以向开发人员和利益相关者展示 CSRF 缺陷的实际影响。
