漏洞描述

因为Web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符。

攻击者一旦向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段报文主体
并在响应中输出,所以又称为 HTTP响应拆分漏洞(HTTP Response Splitting)

CRLF是“回车+换行”(\r\n)的简称, 概念源自打字机,表明行的结束,计算机出现后沿用了这个概念。
其十六进制编码分别为0x0d和0x0a。
回车符(CR Carriage Return,ASCII 13,转义字符 \r,%0d) :光标移到行首,
换行符(LF  Linefeed,ASCII  10,转义字符 \n,%0a) :光标垂直移到下行键盘上的回车键(Enter)就可以执行该操作。但是不同的操作系统,行的结束符是不一样的。Windows:使用CRLF表示行的结束Linux/Unix:使用LF表示行的结束MacOS:早期使用CR表示,现在好像也用LF表示行的结束所以同一文件在不同操作系统中打开,内容格式可能会出现差异,这是行结束符不一致导致的。在HTTP协议  报文的结构中,
-状态行和首部中的每行以CRLF结束-首部与主体之间由一空行分隔。
HTTP header首部与HTTP Body主体是用两个CRLF分隔的,理解为首部最后一个字段有两个CRLF
浏览器根据这两个CRLF来获取HTTP内容并显示。浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。
所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,
这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在Location与Set-cookie消息头中。

漏洞检测

CRLF注入漏洞的本质和XSS有点相似,
攻击者将恶意数据发送给易受攻击的Web应用程序,
Web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在主体中)

所以CRLF注入漏洞的检测也和XSS漏洞的检测差不多。
通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出

找到输入点,构造恶意的CRLF字符

正常请求

抓包,在请求行的url参数中加入特殊构造的CRLF字符

 查看恶意数据是否在响应头中输出

将修改后的请求包提交给服务器端,查看服务器端的响应。
发现响应首部中多了个Set-Cookie字段。
这就证实了该系统存在CRLF注入漏洞,因为我们输入的恶意数据,作为响应首部字段返回给了客户端。

 请求包写入的恶意数据,怎么就被当成响应首部字段输出


当条件满足时,将请求包中的url参数值拼接到Location字符串中,并设置成响应头发送给客户端。

此时服务器端接收到的url参数值是我们修改后的

 http://itsecgames.blogspot.com%0d%0aSet-Cookie:crlf=true

在url参数值拼接到Location字符串中,设置成响应头后,响应包

%0d和%0a分别是CR和LF的URL编码。
HTTP规范中,行以CRLF结束。
所以当检测到%0d%0a后,
就认为Location首部字段这行结束了,Set-Cookie就会被认为是下一行

而我们构造的Set-Cookie字符在HTTP中是一个设置Cookie的首部字段,
这个时候就会将crlf=true设置成Cookie


重新请求,抓包,发现Cookie中多了crlf=true。

测试的用例大家可能会觉得这漏洞没什么危害性,
但试想一下:利用漏洞,
注入一个CRLF控制用户的Cookie,或者注入两个CRLF,控制返回给客户端的主体,
该漏洞的危害不亚于XSS

漏洞修复

过滤 \r 、\n 之类的行结束符,避免输入的数据污染其他 HTTP 首部字段。

渗透测试-CRLF注入/HTTP响应拆分漏洞(HTTP Response Splitting)相关推荐

  1. crlf注入漏洞 java解决办法_HTTP响应拆分漏洞(CRLF注入攻击)解决办法

    HTTP响应拆分漏洞(也叫CRLF注入攻击)解决办法.出现HTTP响应拆分漏洞的网站攻击者可能注入自定义HTTP头.例如,攻击者可以注入会话cookie或HTML代码.这可能会进行类似的XSS(跨站点 ...

  2. 渗透测试该如何全面检测网站漏洞

    昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅参考给有授权渗透测试的正规安全检测的客户 ...

  3. 渗透测试SQL注入——Sqlilabs关卡详解

    目录 报错函数floor的利用 利用select into outfile写一句话木马 利用load_file 读敏感文件 利用sqlmap探测 sql盲注 get基于时间的盲注应用 post基于时间 ...

  4. 完整的渗透测试实战纪实,低危漏洞组合成高危利用!

    0x00一份好的报告标题也很重要哦 PS:原谅下图重码,此漏洞还没修复 报告详情 漏洞标题某国内大厂招聘系统测试 漏洞url* 0x01本次渗透流程 我们一步一步来, 首先我们从忘记密码那里开始,这里 ...

  5. 渗透测试——sql注入进阶/基于时间的盲注/一看就会/

    目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...

  6. web渗透测试----12、HTTP主机标头漏洞

    文章目录 一.HTTP Host请求 1.什么是HTTP Host 请求头? 2.HTTP Host标头的目的是什么? 3.HTTP Host标头如何解决此问题? 二.HTTP Host 攻击 1.什 ...

  7. 渗透测试必知必会—Web漏洞

    https://as.h5con.cn/articles/129985?spm=cnblog 0x00前言 本文为对 WEB漏洞研究系列的开篇,日后会针对这些漏洞一一研究,敬请期待 0x01 目录 0 ...

  8. (13)web安全|渗透测试|网络安全 注入/跨库查询/文件读写/常见的防护原理 详细图解

    目录 高权限注入及低权限注入 跨库查询: 文件读写操作 流程: 找路径: 方法一: 方法二: 方法三: 方法四: 方法五: 方法六: 方法七: 知道路径后,再执行文件的读写操作 文件的写入: 可能遇到 ...

  9. 渗透测试-SQL注入之Fuzz绕过WAF

    WAF绕过原理之Fuzz绕过 文章目录 WAF绕过原理之Fuzz绕过 前言 一.什么是Fuzz 二.利用Fuzz绕过WAF获取数据库信息 1.Fuzz绕过方法 2.利用Fuzz绕过WAF获取数据库信息 ...

最新文章

  1. 无路可逃java攻略_生化危机2重制版无路可逃怎么过_100丧尸模式幽灵生还者无路可逃流程攻略_3DM单机...
  2. JavaSE—集合框架
  3. java.sql.SQLException: ORA-00923: FROM keyword not
  4. [HOW TO]-官网拉取Trusty-TEE的代码
  5. 上顿号符号_标点符号常见错误,读后涨知识了
  6. 机器学习中的不平衡分类方法(part1)--绪论
  7. 低代码能做什么?这家服务商用钉钉宜搭打造了智慧医院管理应用
  8. 友元(友元函数、友元类和友元成员函数) C++
  9. OpenStack安装CentOS镜像:Device eth0 does not seem to be present, delaying initialization
  10. 将iPad,iPhone或eReader的PDF电子书转换为ePub格式
  11. 简述计算机硬件,简述计算机硬件的组成部分
  12. codeforces E. Placing Rooks
  13. Android 直播RTMP流
  14. 光通量发光强度照度亮度关系_照度、亮度、光通量和发光强度的关系
  15. 等保三级认证备案证明是哪个机构颁发?一般要多久?
  16. 记录:macbook 下剪切快捷键
  17. Microsoft Visual Studio 的下载与安装
  18. c语言贴粘,挖坟贴,多年前发的一个如何学习C语言的帖子
  19. 中山大学计算机学院选课要求,39所985高校3+1+2选科要求汇总! 报考必看!
  20. 分析当下最流行的思维框架,思维模型。

热门文章

  1. php 比对两张图片,Python+Opencv识别两张相似图片
  2. python数据查询教程_Python数据可视化教程之基础篇
  3. Start My JS Road
  4. App Inventor 下载时提示有风险
  5. 打印机连接出现0x0000011b错误代码无法共享打印
  6. 华为OD机试 -Excel 单元格数值统计(Python) | 机试题+算法思路+考点+代码解析 【2023】
  7. element-ui中el-select下拉框实现拼音、首字母、汉字等模糊搜索
  8. WZOI-313甲流病人初筛
  9. OSChina 周日乱弹 —— 这个颜色从不让人失望
  10. 独立产品灵感周刊 DecoHack #030 - iOS16正式发布