您现在的位置是:焦点 >>正文
springboot检测到目标url存在http host头攻击漏洞
焦点8172人已围观
简介上周三凌晨两点,我盯着屏幕上的Burp Suite扫描报告,一行红字扎眼得很:“HTTP Host Header Attack”。目标是个刚上线的Spring Boot电商后台,用的还是默认的Tomc ...
上周三凌晨两点,检测我盯着屏幕上的到目Burp Suite扫描报告,一行红字扎眼得很:“HTTP Host Header Attack”。攻击目标是漏洞个刚上线的Spring Boot电商后台,用的检测还是默认的Tomcat 9.0.45。当时第一反应是到目——这玩意儿不是老掉牙的漏洞吗?结果复现的时候,还真让我后背发凉。攻击
漏洞触发点简单得离谱。漏洞系统里有个“找回密码”接口,检测用户提交邮箱后,到目后端生成重置链接,攻击链接的漏洞域名部分直接取了request.getHeader("Host")。我随手用curl把Host头改成evil.com,检测收到的到目邮件里重置链接就变成了http://evil.com/reset?token=xxx。攻击者只要在公共WiFi下抓个包,攻击把Host一改,用户点进去,token就直接送到攻击者服务器上了。
Spring Boot为什么容易踩这个坑
Spring Boot默认内嵌Tomcat,而Tomcat从某个版本开始,对Host头的校验其实做了限制——但仅限于server.tomcat.remote-ip-header和server.tomcat.protocol-header这些配置开启的时候。大部分项目压根没动过这些参数,Tomcat就默认信任任何Host头。更麻烦的是,Spring MVC里@RequestMapping拿到请求后,ServletUriComponentsBuilder.fromRequestUri(request)这类工具方法会直接拼接Host,开发者根本意识不到自己写的代码已经埋了雷。
我见过一个更隐蔽的案例。某金融App的Spring Cloud Gateway配置了动态路由,路由断言里用了Host头做匹配。攻击者伪造Host为内部服务名internal-admin,网关直接把请求转发到了内网管理接口。这种漏洞在微服务架构里比传统单体应用危险十倍——因为内网服务通常没有二次鉴权。
别指望Spring Security自动兜底
很多人觉得加了Spring Security就万事大吉。实测下来,Spring Security 5.x的StrictHttpFirewall默认会拦截带%0d%0a的Host头,但对纯域名伪造毫无办法。我试过把Host改成attacker.com,请求照样进Controller,日志里打印出来的request.getRequestURL()已经变成了攻击者的域名。安全框架管的是认证授权,Host头校验属于传输层信任问题,两码事。
有个取巧的验证方法:在application.properties里加一行server.tomcat.use-relative-redirects=true,然后写个测试用例,用MockMvc发请求时手动设置.header("Host", "fake.com")。如果返回的重定向Location里出现了fake.com,恭喜你,中招了。
修复方案得从三个层面下手
第一层,Tomcat配置硬校验。在server.tomcat下加allowed-hosts=yourdomain.com,www.yourdomain.com(Spring Boot 2.7+支持),或者自定义Valve继承RemoteHostValve,重写invoke方法比对Host白名单。注意别用server.address,那个绑的是网卡IP,跟Host头没关系。
第二层,代码里别偷懒。所有需要拼接绝对URL的地方,比如邮件链接、支付回调、OAuth重定向,统统用配置项写死域名。我习惯在application.yml里定义app.base-url: https://api.mysite.com,然后用@Value注入。千万别用request.getScheme() + "://" + request.getServerName()这种写法,getServerName()返回的就是Host头里的值。
第三层,反向代理别帮倒忙。Nginx做前端时,proxy_set_header Host $host这行配置本身没问题,但如果Nginx没做Host白名单过滤,攻击者直接访问Nginx的IP,Host头照样能伪造。建议在Nginx里加if ($host !~ ^(yourdomain\.com|www\.yourdomain\.com)$) { return 444; },直接掐断连接。
最后说个真实教训。去年帮朋友排查一个Spring Boot博客系统,他发现后台总有人尝试重置管理员密码,但邮件却发到了自己邮箱。查了半天才发现,攻击者把Host改成localhost,系统生成的重置链接指向了本地,而管理员恰好在本机点开了链接——token就这么泄露了。Host头攻击有时候不需要多高深的技术,就赌你开发时少写一行校验。
Tags:
上一篇:ftp服务器外网访问
下一篇:中山市公安
相关文章
目录标题怎么跳转内容
焦点目录标题跳转内容,核心就一句话:给标题一个身份证,再给跳转按钮一个指向这个身份证的箭头。HTML里身份证叫id,箭头叫href="#id值"。就这么简单,但很多人栽在细节上。 去年我帮朋友改一个产品说 ...
【焦点】
阅读更多天猫删差评链接
焦点打开淘宝搜"删差评",跳出来的商品链接能翻几十页。标价从5块到200块不等,封面图清一色写着"专业技术""内部渠道""不成功退款"。我随手点进一家销量过千的店铺,客服秒回:"亲,哪个订单?把差评链接发 ...
【焦点】
阅读更多kali渗透常用命令
焦点拿到一台Kali,第一件事不是急着扫端口,而是搞清楚自己手上有什么牌。`ip a`看一眼网卡,`ip r`确认路由,这俩命令比图形界面靠谱得多。我见过太多人一上来就`nmap -sS`,结果发现目标根 ...
【焦点】
阅读更多