原理:http数据包通过\r\n\r\n来分开http header何http body

实现:首先这种攻击发生在应用层,且发生在服务器返回给我们的http reponse没有经过敏感字符的过滤,我们能够构造攻击语句来控制服务器的http响应.以下为例子:

1、Twitter的HTTP响应拆分

难度:高

厂商:https://twitter.com/

报告地址:https://hackerone.com/reports/52042

报告日期:2015年4月21日

奖金:$3,500

2015年的4月,Twitter收到了一个漏洞报告,报告称黑客可以通过该漏洞在用户向Twitter发起的请求数据中**任意cookie值。

用户在访问https://twitter.com/i/safety/report_story(用户可以在这里举报广告)地址时,服务器会获取参数reported_tweet_id的值,并将其设置到cookie中,最后导致了漏洞。

实际上Twitter是有进行校验的,它会禁止用户提交换行符0x0a(%0a)。但Twitter在处理过程中,会先验证是否提交了禁止的字符,之后如果提交的数据是UTF-8编码过的,则会将其转为原始的unicode码后去掉一些无用字符后再取剩下的字节,正是因为这样的逻辑导致了绕过。

比如说用户提交的是:%E5%98%8A,这个不包含换行符所以不会被拦截,服务器接收到后将其转成原始的unicode码:U+560A,最后取了0A,这时候就变成换行符了。

绕过了CRLF拦截后,通过javascript语句来执行xss攻击效果会更好!比如如下链接:

https://twitter.com/login?redirect_after_login=https://twitter.com:21/%E5%98%8A%E5%98%8Dcontent-type:text/html%E5%98%8A%E5%98%8Dlocation:%E5%98%8A%E5%98%8D%E5%98%8A%E5%98%8D%E5%98%BCsvg/onload=alert%28innerHTML%28%29%E5%98%BE

注意上面的%E5%E98%8A,会经过服务器处理后返回的数据就会变成下面的html响应的形式:

https://twitter.com/login?redirect_after_login=https://twitter.com:21/(CRLF)
content-type:text/html(CRLF)
location:<svg/onload=alert(innerHTML)>

在换行符后,添加了可执行的javascript,最后可盗取用户的会话数据。

小贴士:对渗透测试而言,观察能力和良好的技能都是缺一不可的。

2、v.shopify.com响应拆分

难度:中

厂商:https://v.shopify.com/

报告地址:https://hackerone.com/reports/1064272

报告日期:2015年12月22日

奖金:$500

shopify会在后台中记录你上次访问的是哪一个商店,然后将其放置在cookie中,通过这个方式:/last_shop?SITENAME.shopify.com。

然后在2015年的12月份,漏洞提交者发现Shopify没有对参数进行校验,以至于白帽通过Burp Suite抓包提交%0d%0a就能造成CRLF漏洞,部分链接为:

/last_shop?xxx.shopify.com%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>deface</html>

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" alt="" data-original="//w5.sanwen8.cn/mmbiz_png/XMKba2f6gFGI38LdoYOnDOve58gfoQvyWFyHrLsXN8fibYFmPN1NgXORcU2marYDFHSvLUiaMJtCHf3xhibtUibKPQ/640?wx_fmt=png" data-w="504" />

在上面的链接中,%20是空格,%0d%0a是换行字符。结果,浏览器收到了两个头部并选择渲染了后者,最后可导致各种漏洞,比如xss。

小贴士:要十分细心观察我们提交了哪些参数,然后是否将数据放到了响应头部中。在这个例子中,shopify从链接中获取参数last_shop的值并将其放在了cookie里,这才导致了CRLF漏洞。

 总结:

  对渗透测试而言,观察能力和良好的技能都是缺一不可的。知道字符的编码方式以及可能造成的漏洞是非常重要的一个渗透测试技巧。%0D%0A可以被用来测试服务器是否存在CRLF漏洞,如果存在漏洞,那就想办法深入一下,通过和xss联用来扩大战果。另一方面,如果服务器会对%0D%0A进行处理,那么你就需要思考一下你可以怎么对这些数据进行编码,然后测试服务器是否会对数据进行双重解码。

CRLF注入攻击的更多相关文章

  1. WEB安全第五篇--其他注入的奇技淫巧:XML注入、Xpath注入、Json注入、CRLF注入

    零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...

  2. crlf注入攻击

    1.crlf 注入攻击. 原理:http数据包通过\r\n\r\n来分开http header何http body 实现:首先这种攻击发生在应用层,且发生在服务器返回给我们的http reponse没 ...

  3. 【网络安全】SQL注入、XML注入、JSON注入和CRLF注入科普文

    目录 SQL注入 一些寻找SQL漏洞的方法 防御SQL注入 SQL注入相关的优秀博客 XML注入 什么是XML注入 预防XML注入 JSON注入 什么是JSON注入 JSON注入的防御 CRLF注入 ...

  4. WEB服务端安全---注入攻击

    注入攻击是web领域最为常见的攻击方式,其本质是把用户输入的数据当做代码执行,主要原因是违背了数据与代码分离原则,其发生的两个条件:用户可以控制数据输入:代码拼接了用户输入的数据,把数据当做代码执行了 ...

  5. (二)CRLF注入

    01 漏洞描述 在<HTTP | HTTP报文>一文中,我们介绍了HTTP报文的结构:状态行和首部中的每行以CRLF结束,首部与主体之间由一空行分隔.或者理解为首部最后一个字段有两个CRL ...

  6. CRLF注入漏洞 -配置错误

    漏洞分析参考 https://i-beta.cnblogs.com/posts/edit 什么是CRLF? CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII ...

  7. CRLF注入

    CRLF注入 Title: [CVE-2019-9740] Python urllib CRLF injection vulnerability Category: security Stage: r ...

  8. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  9. 实例讲解 SQL 注入攻击

    这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...

随机推荐

  1. Repeater控件最后一笔记录高亮显示

    Insus.NET以前有写过 <Repeater控件第前10笔记录高亮显示> 不过,现在有一个想法,就是最后一笔记录高亮显示,怎样实现? 技术要求,就是获取最后一笔的索引即可.可以从数据源 ...

  2. mac的idea不能编辑问题

    在安装的时候,因为在选择插件的时候,把IDEAVim这个玩意儿选上了.所以,编辑模式就跟命令行里面的Vim一样.输入时,需要先输入i, 进入insert模式下,然后才可以编辑.彻底解决办法就是进入Pr ...

  3. 内容可循环重用的ScrollView

    UIScrollView是iOS中最常用的交互控件之一,本文讨论当设定为翻页模式,内容页很多的时候,如果给每个页面都创建一个新View,会导致资源爆表.比较好的做法是参考UITableViewCell ...

  4. Xgboost的sklearn接口参数说明

    from xgboost.sklearn import XGBClassifier model=XGBClassifier(base_score=0.5, booster='gbtree', cols ...

  5. 用python面向对象的方法实现欧拉算法和龙格库塔算法

    #!/bin/python3 # -*-coding:utf-8 -*- import math import numpy as np #定义一个欧拉算法的类,从而实现不同步长的引用 class Eu ...

  6. Plexus容器学习笔记

    1. Plexus引入 Plexus是什么?它是一个IoC容器,由codehaus在管理的一个开源项目.和Spring框架不同,它并不是一个完整的,拥有各种组件的大型框架,仅仅是一个纯粹的IoC容器. ...

  7. java枚举enum equal与==

    原文链接:https://www.cnblogs.com/xiohao/p/7405423.html 问题 我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类,当去比较两个枚举的时候, ...

  8. CF352A Jeff and Digits

    Jeff's got n cards, each card contains either digit 0, or digit 5. Jeff can choose several cards and ...

  9. PXE刷机,存储节点失败

    最近刚刚帮客户对一台满配的X6-2刷机初始化,尝试了下PXE方式,但刷完机后,发现计算节点的imagehistory输出的状态都是成功的,而所有的存储节点状态都为failure,具体如下: [root ...

  10. 10-排序5 PAT Judge (25 分)

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...