clrf注入攻击

1.clrf 注入攻击.

原理: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>,以下是截图:

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

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

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

时间: 2024-12-14 18:06:01

clrf注入攻击的相关文章

Web脚本攻击之注入攻击

注入攻击的概念和原理 注入漏洞是Web服务器中广泛存在的漏洞类型,其基本原理是Web程序对用户输入请求中包含的非法数据检查过滤不严,使Web程序将用户的异常输入字符当做正常代码执行,从而使用户在未授权的情况下非法获取Web服务器的信息. 利用注入漏洞发起的攻击称为注入攻击,它是Web安全领域最为常见威胁也是最大的攻击,注入攻击包括SQL注入.代码注入.命令注入.LDAP注入.XPath注入等.实现注入攻击要具备两个关键条件,第一是用户能够自主编写输入的数据,第二是Web程序的执行代码被拼接了用户

web前端安全之SQL注入攻击

一.SQL注入攻击的原理攻击者在HTTP请求中注入恶意的SQL代码,并在服务端执行.比如用户登录,输入用户名camille,密码 ' or '1'='1 ,如果此时使用参数构造的方式,就会出现 select * from user where name = 'camille' and password = '' or '1'='1' 不管用户名和密码是什么,查询出来的用户列表都不为空,这样可以随意看其他用户的信息. 二.SQL注入攻击的防御1.客户端 限制字符串输入的长度: 有效性检验. //过

白帽子讲WEB安全 第七章 注入攻击

一.SQL注入: 1.注入攻击的本质:把用户输入的数据当代码执行. 攻击的关键点:1.用户能够控制输入: 2.原本程序要执行的代码, 2.盲注(Blind Injection):在服务器没有错误回显时完成的注入攻击. 3.时序攻击(Timing Attack):利用BENCHMARK()函数(mysql中用于测试函数性能的函数),可以让同一个函数执行若干次,使得结果返回的时间比平时要长:通过时间长短的变化,可以判断出注入语句是否执行成功.这是一种边信道攻击. 边信道攻击(side channel

【渗透攻防Web篇】SQL注入攻击高级

前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 5.1.大小写变种 5.2.URL编码 5.3.SQL注释 5.4.空字节 5.5.二阶SQL注入 第六节 探讨SQL注入防御技巧 6.1.输入验证 6.2.编码输出 正文 第五节 避开过滤方法总结 Web应用为了防御包括SQL注入在内的攻击,常常使用输入过滤器,这些过滤器可以在应用的代码中,也可以

使用SQLMAP对网站和数据库进行SQL注入攻击

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等.SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL

网络攻防之SQL注入攻击

SQL注入攻击的根源是因为SQL规范的漏洞,但是,因为规范的长期存在以及使用,几乎已经不太可能去修改规范了,只能够从开发者本身去避免攻击,虽然SQL注入之前很严重,但现在相对控制的很好,这里仅仅作为一种学习的内容. 测试过程如下: 1:搭建PHP,mysql开发环境,可以详见我的另一篇博客自定义开发PHP环境 2:添加数据库,表,以及表内容. 3:分别测试 万能密码,万能用户名 数字注入 测试如下: 万能密码:password ' or 1='1 (password可以任意的填写,注:这里如果粘

Web安全篇之SQL注入攻击

在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问题~ 大家早上好!今天由我给大家带来<web安全之SQL注入篇>系列晨讲,首先对课程进行简单介绍,SQL注入篇一共分为三讲:       第一讲:"纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入原理.":       第二讲:"实战演练:我们要在互联网上

参数化登陆防止SQL注入攻击

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace _01参数化登陆防止SQL注入攻击 { public

JDBC-sql注入攻击

10 SQL注入攻击 -- 早年登录逻辑,就是把用户在表单中输入的用户名和密码 带入如下sql语句. 如果查询出结果,那么 认为登录成功. SELECT * FROM USER WHERE NAME='' AND PASSWORD='xxx'; -- sql注入: 请尝试以下 用户名和密码. /* 用户名: 密码: xxx*/-- 将用户名和密码带入sql语句, 如下: SELECT * FROM USER WHERE NAME='xxx' OR 1=1 -- ' and password='x