原理: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. 提取pfx证书公钥和私钥

    从pfx提取密钥信息,并转换为key格式(pfx使用pkcs12模式补足) 1.提取密钥对(如果pfx证书已加密,会提示输入密码.) openssl pkcs12 -in 1.pfx -nocerts ...

  2. [CentOS7] 设置语言环境

    博主想要将英文环境(en_US.UTF-8)改为中文环境(zh_CN.UTF-8),有两种解决方法 一.临时解决方法 使用LANG=“zh_CN.UTF-8”,这个命令来实现,不过在重新登录的时候又会 ...

  3. 【转】oracle远程导入数据库

    源地址:http://blog.chinaunix.net/uid-20980141-id-447996.html

  4. 【谁知道C#字段为什么用属性封装?】

    源地址:https://zhidao.baidu.com/question/1174413218458798139.html 我们知道,类成员包括变量和方法.如果希望其他类能够访问成员变量的值,就必须 ...

  5. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

    智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...

  6. 亿级PV请求的三种负载均衡技术(转)

    http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml       目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...

  7. 关于MVC模型的NSNotification用法

    对于iOS开发开发者, Model View Controller 模型能帮你快速理清开发思路,最近在使用Model给Controller传递数据时候了解了关于 NSNotification的一些用法 ...

  8. 基础线程机制--Daemon,sleep(),yield()

    Daemon   守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分,当所有非守护进程执行完成时,程序也就终止,同时会杀死所有的守护进程.main()属于非守护线程.可以使用setD ...

  9. mysql8.0的新特性

    https://www.cnblogs.com/kevingrace/p/10482469.html MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 ...

  10. vim与vi操作

    vim是vi发展而来的文本编辑器: vi是最原始的文本编辑器: vi/vim的使用: 有三种模式:命令模式.输入模式.底线命令模式 命令模式: 输入 i 会进入输入模式 输入: 会进入底线命令模式 输 ...