引言
在本实验中,你将学习使用 Burp Suite 拦截和修改 Web 流量的基础知识。Burp Suite 是最流行的 Web 应用程序安全测试工具之一。拦截 HTTP 请求、在请求到达服务器前修改其内容,然后观察响应的能力,是发现各种漏洞(例如参数篡改和不安全的直接对象引用)的基础技能。
你将使用 Burp Proxy 捕获来自浏览器的请求,动态修改 URL 参数,然后将其转发到一个本地运行的简单 Web 应用程序。这个实践练习将演示如何使用代理来操纵客户端和服务器之间的通信。
在 Proxy 选项卡中启用拦截模式
在此步骤中,你将启动 Burp Suite 并启用其拦截流量的核心功能。Burp Proxy 在你的浏览器和目标 Web 服务器之间充当中间人,允许你查看和修改所有通过它的流量。
首先,打开桌面左上角的应用程序启动器,然后启动 Burp Suite。
- 点击 **"Temporary project"**,然后点击 **"Next"**。
- 选择 **"Use Burp defaults"**,然后点击 **"Start Burp"**。
Burp Suite 打开后,导航到 Proxy 选项卡。这是你控制 HTTP 流量拦截的地方。
在 Proxy 选项卡内,你将看到几个子选项卡。确保你位于 Intercept 子选项卡。在这里,你会找到一个用于开启和关闭拦截的按钮。默认情况下,它可能是关闭的。
点击显示 "Intercept is off" 的按钮以启用它。按钮的文本将变为 **"Intercept is on"**,并且它会显示为被按下状态。
现在,Burp Proxy 正在积极等待捕获在此实验环境中预配置的浏览器发出的下一个 HTTP 请求。
拦截来自浏览器的请求
在此步骤中,你将从 Web 浏览器生成一个 HTTP 请求,并在 Burp Suite 中捕获它。由于拦截模式已开启,Burp 将会持有该请求,阻止其到达服务器,直到你决定如何处理它。
打开实验环境中提供的 Web 浏览器。该浏览器已配置为通过运行在 127.0.0.1:8080 上的 Burp Proxy 发送其流量。
在浏览器的地址栏中,导航到由设置脚本启动的简单 Web 应用程序。输入以下 URL 并按 Enter:
http://127.0.0.1:5000/search?q=books
你会注意到浏览器标签页显示一个加载图标,并且页面没有加载。这是预期行为。它表明 Burp Proxy 已成功拦截了请求,并正在等待你的操作。
现在,切换回 Burp Suite 窗口。在 Proxy -> Intercept 选项卡中,你将看到你的浏览器刚刚发送的 HTTP 请求的原始内容。
GET /search?q=books HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
...
你现在已经成功捕获了一个 HTTP 请求,并在它到达目标之前进行了拦截。
在 'Raw' 请求视图中更改参数值
在此步骤中,你将修改拦截到的 HTTP 请求。这是即时篡改请求的核心。你可以更改请求的任何部分,包括方法、路径、标头或正文。在本实验中,你将更改一个 URL 参数。
在 Proxy -> Intercept 选项卡中显示请求时,请确保你处于 Raw 视图。此视图显示请求的纯文本,方便直接编辑。
找到请求的第一行:
GET /search?q=books HTTP/1.1
q=books 部分是一个 URL 参数。服务器端应用程序使用 q 的值(当前为 books)来生成其响应。
现在,直接在文本区域编辑此值。点击进入 Raw 视图并将 books 更改为 dvds。
修改后的第一行现在应如下所示:
GET /search?q=dvds HTTP/1.1
你已成功在传输过程中更改了请求数据。浏览器对此更改一无所知;它仍然认为它请求了带有 q=books 的页面。服务器尚未收到任何请求。
转发修改后的请求
在此步骤中,你将释放修改后的请求,使其能够继续发送到 Web 服务器。
在 Intercept 选项卡中编辑请求后,你需要决定如何处理它。你可以通过视图顶部的按钮选择三个主要选项:
- Forward: 将请求(以其当前状态,可能已修改)发送到服务器。
- Drop: 完全丢弃该请求。浏览器最终会超时。
- Action: 提供一个菜单,包含其他操作,例如将请求发送到其他 Burp 工具。
要将你修改后的请求发送到服务器,请点击 Forward 按钮。
转发请求后,Burp 将在同一选项卡中显示服务器的响应。你可以通过再次点击 Forward 将此响应转发回浏览器。
为了避免拦截后续请求(例如获取 favicon),在你处理完你关心的请求后,最好关闭拦截。点击 "Intercept is on" 按钮将其切换回 **"Intercept is off"**。这将允许所有其他流量自由流动。
观察服务器对修改后请求的响应
在此步骤中,你将在浏览器和 Burp Suite 的历史记录中观察到你操作的结果。这证实了服务器处理了修改后的数据。
首先,切换回你的 Web 浏览器。之前卡住加载的页面现在应该已完全加载。查看页面上显示的内容。它应该显示:
You searched for: dvds
这证实了服务器收到了并处理了修改后的参数值(dvds),而不是原始值(books)。你成功地欺骗了服务器显示了不同的内容。
接下来,回到 Burp Suite 以获得更详细的视图。点击 Proxy 选项卡,然后点击 HTTP history 子选项卡。此选项卡记录了所有通过代理的请求和响应。你应该会看到一个 GET /search?q=dvds 的条目。点击它以查看你发送的完整请求以及服务器返回的相应响应,从而提供交互的完整记录。
这个简单的练习展示了一个强大的概念:永远不要信任来自客户端的数据,因为攻击者可以使用像 Burp Suite 这样的代理工具轻松地操纵它。
总结
在此实验中,你已学会使用 Burp Proxy 实时修改 HTTP 请求的基本技能。
你成功地:
- 在 Burp Proxy 中启用了拦截模式。
- 捕获了来自浏览器的实时 HTTP 请求。
- 在原始请求视图中修改了 URL 参数。
- 将篡改后的请求转发给了 Web 服务器。
- 观察到服务器的响应是基于你修改后的数据。
这项技术是 Web 应用程序安全测试的基础,它使你能够通过操纵客户端 - 服务器通信来探测各种漏洞。
