1)简介:以下情况中会出现 Header Manipulation 漏洞:

1. 数据通过一个不可信赖的数据源进入 Web 应用程序,最常见的是 HTTP 请求。

2. 数据包含在一个 HTTP 响应头文件里,未经验证就发送给了 Web 用户。

如同许多软件安全漏洞一样,Header Manipulation 只是通向终端的一个途径,它本身并不是终端。从本质上看,这些漏洞是显而易见的:一个攻击者将恶意数据传送到易受攻击的应用程序,且该应用程序将数据包含在 HTTP 响应头文件中。

其中最常见的一种 Header Manipulation 攻击是 HTTP Response Splitting。为了成功地实施 HTTP Response Splitting 盗取,应用程序必须允许将那些包含 CR(回车,由 %0d 或 \r 指定)和 LF(换行,由 %0a 或 \n 指定)的字符输入到头文件中。攻击者利用这些字符不仅可以控制应用程序要发送的响应剩余头文件和正文,还可以创建完全受其控制的其他响应。

如今的许多现代应用程序服务器可以防止 HTTP 头文件感染恶意字符。例如,如果尝试使用被禁用的字符设置头文件,最新版本的 Apache Tomcat 会抛IllegalArgumentException。如果您的应用程序服务器能够防止设置带有换行符的头文件,则其具备对 HTTP Response Splitting 的防御能力。然而,单纯地过滤换行符可能无法保证应用程序不受 Cookie Manipulation 或 Open Redirects 的攻击,因此必须在设置带有用户输入的 HTTP 头文件时采取措施。

示例:下列代码片段会从 HTTP 请求中读取网络日志项的作者名字 author,并将其置于一个 HTTP 响应的 cookie 头文件中。

String author = request.getParameter(AUTHOR_PARAM);

...

Cookie cookie = new Cookie(""author"", author);

cookie.setMaxAge(cookieExpiration);

response.addCookie(cookie);

假设在请求中提交了一个字符串,该字符串由标准的字母数字字符组成,如“Jane Smith”,那么包含该 cookie 的 HTTP 响应可能表现为以下形式:

HTTP/1.1 200 OK

...

Set-Cookie: author=Jane Smith

...

然而,因为 cookie 值来源于未经校验的用户输入,所以仅当提交给 AUTHOR_PARAM 的值不包含任何 CR 和 LF 字符时,响应才会保留这种形式。如果攻击者提交的是一个恶意字符串,比如“Wiley Hacker\r\nHTTP/1.1 200 OK\r\n...”,那么 HTTP 响应就会被分割成以下形式的两个响应:

HTTP/1.1 200 OK

...

Set-Cookie: author=Wiley Hacker

HTTP/1.1 200 OK

...

显然,第二个响应已完全由攻击者控制,攻击者可以用所需的头文件和正文内容构建该响应。攻击者可以构建任意 HTTP 响应,从而发起多种形式的攻击,包括:cross-user defacement、网络和浏览器缓存中毒、cross-site scripting 和 page hijacking。

用户信息涂改:攻击者可以向一个易受攻击的服务器发出一个请求,导致服务器创建两个响应,其中第二个响应可能会被曲解为对其他请求的响应,而这一请求很可能是与服务器共享相同 TCP 连接的另一用户发出的。这种攻击可以通过以下方式实现:攻击者诱骗用户,让他们自己提交恶意请求;或在远程情况下,攻击者与用户共享同一个连接到服务器(如共享代理服务器)的 TCP 连接。最理想的情况是,攻击者只能通过这种做法让用户相信自己的应用程序已经遭受了黑客攻击,进而对应用程序的安全性失去信心。最糟糕的情况是,攻击者可能提供经特殊技术处理的内容,这些内容旨在模仿应用程序的执行方式,但会重定向用户的私人信息(如帐号和密码),将这些信息发送给攻击者。

缓存中毒: 如果多用户 Web 缓存或者单用户浏览器缓存将恶意构建的响应缓存起来,该响应的破坏力会更大。如果响应缓存在共享的 Web 缓存(如在代理服务器中常见的缓存)中,那么使用该缓存的所有用户都会不断收到恶意内容,直到清除该缓存项为止。同样,如果响应缓存在单个用户的浏览器中,那么在清除该缓存项以前,该用户会不断收到恶意内容。然而,影响仅局限于本地浏览器的用户。

跨站脚本攻击:一旦攻击者控制了应用程序传送的响应,就可以选择多种恶意内容来传播给用户。Cross-Site Scripting 是最常见的攻击形式,这种攻击在响应中包含了恶意的 JavaScript 或其他代码,并在用户的浏览器中执行。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。对于易受攻击的应用程序用户,最常见且最危险的攻击就是使用 JavaScript 将会话和 authentication 信息返回给攻击者,而后攻击者就可以完全控制受害者的帐号了。

网页劫持:除了利用一个易受攻击的应用程序向用户传输恶意内容,还可以利用相同的根漏洞,将服务器生成的供用户使用的敏感内容重定向,转而供攻击者使用。攻击者通过提交一个会导致两个响应的请求,即服务器做出的预期响应和攻击者创建的响应,致使某个中间节点(如共享的代理服务器)误导服务器所生成的响应,将本来应传送给用户的响应错误地传给攻击者。因为攻击者创建的请求产生了两个响应,第一个被解析为针对攻击者请求做出的响应,第二个则被忽略。当用户通过同一 TCP 连接发出合法请求时,攻击者的请求已经在此处等候,并被解析为针对受害者这一请求的响应。这时,攻击者将第二个请求发送给服务器,代理服务器利用针对受害者(用户)的、由该服务器产生的这一请求对服务器做出响应,因此,针对受害者的这一响应中会包含所有头文件或正文中的敏感信息。

Cookie Manipulation:当与类似 Cross-Site Request Forgery 的攻击相结合时,攻击者就可以篡改、添加、甚至覆盖合法用户的 cookie。

打开重定向:如果允许未验证的输入来控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。

2)解决方案:过滤掉特殊字符。

注意事项:将文件名转为utf-8格式后,含有特殊字符“%”。所以需将文件名转为ISO-8859-1格式后替换特殊字符串,谷歌和火狐浏览器可采用下列方式修改,IE待验证。

修改前:

filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");

response.setHeader("Content-Disposition", "attachment; filename="+filename);

修改后:

filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");

String regex = "[`~!@#$%^&*()\\+\\=\\{}|:\"?><【】\\/r\\/n]";

Pattern pa = Pattern.compile(regex);

Matcher ma = pa.matcher(filename);

if(ma.find()){

filename = ma.replaceAll("");

}

response.setHeader("Content-Disposition", "attachment; filename="+filename);

.Header Manipulation漏洞相关推荐

  1. header manipulation 漏洞_【资讯】HPE 修补了两个关键的远程可利用漏洞

    Hewlett Packard Enterprise发布了针对两个关键漏洞的补丁程序,一个漏洞在StoreServ管理控制台中被确认,另一个漏洞则影响了BlueData EPIC软件平台和Ezmera ...

  2. 记录一次header manipulation的解决

    如题,最近在进行系统安全测试的时候,文件下载出了点问题,fortify扫描出了header manipulation漏洞.因为接手的是别人的代码,很疑惑他当时为什么要用控制响应头的方法去进行文件下载传 ...

  3. Host header attack漏洞验证测试

    目录 1.前言 2.Host header attack漏洞介绍 (1)密码重置 (2)缓存污染 3.Host header attack漏洞验证

  4. clickjacking:X-frame-options header missing 漏洞解决办法

    Apache配置X-Frame-Options   ,httpd.conf 添加Header always append X-Frame-Options SAMEORIGIN 2.在项目里添加过滤器: ...

  5. java web项目请求控制及简单漏洞防范

    背景:当时项目没用什么框架,过滤器,请求限制等都需要自己手写. 1.请求加时间戳 在后台过滤器中可以加判断,如果请求时间戳与服务器时间相差太大,可以返回异常,具体情况可以具体使用. 请求中加时间戳的示 ...

  6. Tailwind Sidebar

    侧边栏 sidebar https://codepen.io/junchow/pen/GRoJPeo?editors=1000 <link href="https://unpkg.co ...

  7. Find-Sec-Bugs 漏洞范例

    第一章 Find-sec-bugs简介 插件介绍: Find-Sec-Bugs 是一款本地 bug 扫描插件 "FindBugs-IDEA" 的 Java 安全漏洞规则扩展库,它支 ...

  8. fortify扫描java_亲测有效的几种fortify扫描安全漏洞的解决方案

    1.Header Manipulation:过滤请求头中的参数 public static String getFilePath(String path){ String regex = " ...

  9. 4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战

    Apache Shiro是一个Java安全框架,执行身份验证.授权.密码和会话管理.2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞.尽管该漏洞已经曝光几年,但是在实战中仍然比较实用.花了点 ...

最新文章

  1. HDU1892(二维树状数组)
  2. linux开始时间and结束时间,Linux NTP configure and Hangcheck-time
  3. 人工智能听了很多遍,都应用在哪些领域了你知道吗?
  4. leetcode 376. 摆动序列(dp)
  5. PointNet++详解与代码
  6. 揭秘!业界创新的代码仓库加密技术
  7. easyui 添加下拉框数据_功能更新:熟用仪表盘这个功能,你可以少建90%的数据报表...
  8. linux中的权限对于文件和目录的重要性
  9. 1775. [国家集训队2010]小Z的袜子
  10. 主进程退出后子进程还会存在吗?_[docker]从一个实例,一窥docker进程管理
  11. “贵人”相助,亚马逊云科技APN成员乘风破浪
  12. Why Would I Ever
  13. mx250 计算能力_mx250显卡性能怎么样,mx250显卡性能相当于GTX多少
  14. excel 批量生成条码
  15. Linux内核中的IPSEC实现(3) ---转载
  16. 3GPP TS 23501-g51 中英文对照 | 5.2.4 Authorisation
  17. npm查看一个包的版本信息
  18. 2021年全新Java学习路线图
  19. Nagios配合飞信发短信
  20. python学习笔记:负数的取整和取余运算

热门文章

  1. #千锋逆战班,拼搏永向前#
  2. 我电脑感染了一种奇怪的病毒,它点中了我的笑穴!
  3. 几个常见的B端推广渠道
  4. C语言学习第008课——内存和指针
  5. 达达博客项目-学习笔记,B站达内项目实战
  6. 异常:getReader() has already been called for this request
  7. linux系统访问NAS网络存储
  8. 1Curiosity--NASA's Mission to Mars 2019/11/05F450KLG2H
  9. 锐评:泡沫中的token和被冷落的联盟链
  10. aarch64-poky-linux-ld: unrecognized option ‘-Wl,-O1‘