为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段,但是这个Host字段值是不可信赖的(可通过HTTP代理工具篡改),如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入
漏洞描述:
- HTTP报文中的Host首部字段旨在告知服务器,客户端请求的主机名和端口号,主要用来实现虚拟主机技术,单个主机运行多个站点
- 通常情况下Host字段值是不可信赖的,攻击者可通过HTTP代理工具篡改,如果应用程序没有对Host字段值进行处理,可能造成恶意代码的传入
- 当Host字段被修改为攻击者构造的恶意地址,将可能触发恶意请求,危害网站的运行安全、系统安全和数据安全
检测
抓包-->修改Host字段值-->提交-->查看响应中是否包含修改后的Host字段值
- 正常请求,响应302,Location首部字段指明跳转的地址,其中Location字段值为Host字段指定的地址
- 将请求包的Host字段值修改为<www.baidu.com>提交,响应包中的Location地址也被更改为<www.baidu.com>
- 正常请求,正常响应,将Host字段值拼接到标签属性值中
- 将请求包的Host字段值修改为<www.baidu.com>提交,响应包中服务器将<www.baidu.com>拼接到了script标签的src属性值中
修复
- 对Host字段进行检测。
- Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测
- Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项
- Tomcat,修改server.xml文件,配置Host的name属性
MS08067安全实验室
Frieza