扫码领资料
获入门教程
免费&进群
暑假的时候翻某安全公众号时发现的一个骚思路。
有些网站开发者会提取request包里的host头来获取域名信息,但是host头可以被修改,是不可信的。于是攻击者可以通过构造host头来进行投毒攻击。
例如发送包含受害者网站域名链接的功能,像是密码找回、发送验证链接等,只要业务上利用了类似于域名提取的功能,都可以尝试利用该攻击方法。这里以密码找回为例,进行一次host头投毒攻击。
之后放行数据包,会提示找回密码邮件发送成功的信息,此时受害者邮箱会收到一封邮件:
可以看到,域名已经改成了我们在host头填写的服务器地址。这时受害者如果访问该链接,则会在我们的服务器上留下一条记录:
在把原域名和日志抓取到的url拼接一下,就能得到受害人的密码重置链接了。
GET /web HTTP/1.1
Host:www.xxxx.com
伴随云和虚拟主机的普及,单个Web服务器可以托管多个网站或应用程序。尽管这些网站都有各自不同的域名,但很有可能共享服务器同一个IP地址,这种情况下就需要通过Host头来进行区分了。
而这种漏洞可以造成包括:
Web缓存中毒、特定功能的业务逻辑缺陷、基于路由的SSRF、SQL注入等
1.忽略端口的检验
某些过滤检查只验证域名,会忽略Host头中的端口。如果我们可以在Host头中写入非数字端口,就可以通过端口注入恶意Payload。
GET /example HTTP/1.1
Host:Website.com:bad-stuff-here
2.允许任意子域
如果应用系统允许其域名下任意的子域通过,在这种情况下,可以通过子域来绕过验证。
GET /example HTTP/1.1
Host:hacked-subdomain.Website.com
3.注入重复的Host头
有的时候我们可以添加多个Host头,而且一般开发者并没有预料到这种情况而没有设置任何处理措施,这就可能导致某个Host头会覆盖掉另一个Host头的值
GET /exampleHTTP/1.1
Host:Website.com
Host:bad-stuff-here
如果服务器端将第二个Host头优先于第一个Host头,就会覆盖掉它的值,然后中转组件会因为第一个Host头指定了正确的目标而照常转发这个请求包,这样就能绕过中间组件将Payload传递给服务器。
4.提供绝对URL
正常情况下,"GET"的请求航采用的是相对地址,但是也允许使用绝对地址,就是将原本Host的值拼接到相对地址前面构成绝对地址,这样就可以利用Host头进行注入。
GET http://Website.com/ HTTP/1.1
Host:bad-stuff-here
5.添加换行
有时候还可以通过使用空格字符缩进HTTP头来进行混淆,因为有些服务器会将缩进的标头理解为换行,而将其视为前面头值的一部分,有些服务器会完全忽略缩进的HTTP头,因此不同系统处理HTTP头可能会存在不一致的现象。
GET /example HTTP/1.1
Host:bad-stuff-here
Host:Website.com
如果前端忽略缩进的头部,这个请求会被作为普通请求来处理。假设后端忽略前导空格优先考虑第一个Host头,这种不一致性会导致Payload的注入。
6.利用可覆盖Host的请求头
有一些请求头的值是可以覆盖Host的值的,比如X-Forwarded-Host,当我们发出这样的请求时就会触发覆盖
GET /exampleHTTP/1.1
Host:Website.com
X-Forwarded-Host:bad-stuff-here
可以达到相同目的的还有这些头
X-Host
X-Forwarded-Server
X-HTTP-Host-Override
Forwarded
1.保护绝对URL
2.验证Host头
3.不支持Host覆盖头
4.白名单允许的域
5.小心使用仅限内部访问的虚拟主机
转自博客:https://k1nm0com
HACK学习呀
作者:洞爷湖
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
(hack视频资料及工具)
(部分展示)
往期推荐
【精选】SRC快速入门+上分小秘籍+实战指南
爬取免费代理,拥有自己的代理池
漏洞挖掘|密码找回中的套路
渗透测试岗位面试题(重点:渗透思路)
漏洞挖掘 | 通用型漏洞挖掘思路技巧
干货|列了几种均能过安全狗的方法!
一名大学生的黑客成长史到入狱的自述
攻防演练|红队手段之将蓝队逼到关站!