• HTTP协议头注射漏洞实例


    HTTP 响应头文件中包含未经验证的数据会引发 cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。

    HTTP协议头注射漏洞原理

    以下情况中会出现 HTTP协议头注射漏洞: 1. 数据通过一个不可信赖的数据源进入 Web 应用程序,最常见的是 HTTP 请求。 2. 数据包含在一个 HTTP 响应头文件里,未经验证就发送给了 Web 用户。

    其中最常见的一种 Header Manipulation 攻击是 HTTP Response Splitting。 为了成功地实施 Http Response Splitting 盗取,应用程序必须允许将那些包含 CR(回车,由 %0d 或 指定)和 LF(换行,由 %0a 或 指定)的字符输入到头文件中。

    攻击者利用这些字符不仅可以控制应用程序要发送的响应剩余头文件和正文,还可以创建完全受其控制的其他响应。

    HTTP协议头注射漏洞实例

    1 <?php
    2     $location = $_GET['some_location'];
    3     header("location: $location");
    4 ?>

    假设在请求中提交了一个由标准的字母和数字字符组成的字符串,如 "index.html",那么包含此 cookie 的 HTTP 响应可能表现为以下形式:

    HTTP/1.1 200 OK
    ...
    location: index.html
    ...

    然而,因为该位置的值由未经验证的用户输入组成,所以仅当提交给 some_location 的值不包含任何 CR 和 LF 字符时,响应才会保留这种形式。

    如果攻击者提交的是一个恶意字符串,比如 :

    "index.html
    HTTP/1.1 200 OK
    ..."

    那么此 HTTP 响应就会被分割成以下形式的两个响应:

    HTTP/1.1 200 OK
    location: index.html
    HTTP/1.1 200 OK
    ...

    显 然,第二个响应已完全由攻击者控制,攻击者可以用所需的头文件和正文内容构建该响应。攻击者可以构建任意 HTTP 响应,从而发起多种形式的攻击。

    HTTP协议头注射漏洞解决方案

    如今的许多现代应用程序服务器可以防止 HTTP 头文件感染恶意字符。

    例如,当新行传递到 header() 函数时,最新版本的 PHP 将生成一个警告并停止创建头文件。 如果您的 PHP 版本能够阻止设置带有换行符的头文件,则其具备对 HTTP Response Splitting 的防御能力。

    代码层面常见的解决方案:

    1. 严格检查变量是否已经初始化
    2. 在设置HTTP响应头的代码中,过滤回车换行(%0d%0a、%0D%0A)字符
    3. 禁止header()函数中的参数外界可控
  • 相关阅读:
    Python中if __name__ == '__main__':的作用
    Java集合面试题及答案总结(2020版)
    Java多线程面试题及答案(2020版)
    poi: 如何获取cell的行号对应的字母
    gogs: 进入Docker实例并修改MySQL帐号
    多音源多声卡背景音乐播放系统,可在一台电脑上同时播放10种音乐
    弱电图纸中敷设方式符号表示大全
    HashMap集合详解----源码分析--之--高级篇
    正则表达式总结及主要事项
    使用接口进行form表单提交
  • 原文地址:https://www.cnblogs.com/cyjaysun/p/4392867.html
Copyright © 2020-2023  润新知