CSRF手工测试方法

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click
attack/session
riding,缩写为:CSRF/XSRF。一般来说,CSRF是除XSS外最常见一种漏洞,也是一大刷分利器。 有关CSRF的具体利用,CEO早在
08年就给我们详细介绍了,大家可以去膜拜下:

文章链接http://blog.csdn.net/lake2/Article/details/2245754

下面分享下我个人在测CSRF漏洞时绕过防御的一些主要经验,希望能和大家一起交流下。目前腾讯百度等站点防御CSRF漏洞的主要方法是添加
token(一般参数名为g_tk,bdtoken)与referer验证,相信大家在很多时候抓包一看有token或者删除referer重新发包报错
了就会觉得这里不会有csrf漏洞了,可实际情况可不一定。还有一种常见情况就是使用验证码,这种情况我暂时没找到什么方法,查阅了一些网络资料,目前识
别验证码的方法都无法直接利用到绕过CSRF防御上来,所以不考虑用户体验的话,验证码是防御CSRF攻击的最有效的方法。如果有大牛有其它思路绕过的话
希望能分享给大家一起讨论下。

情况A:

无token无referer验证这种情况现在比较少了,一般出现在一些新上线的业务。我一般测试时都是用Firefox的Live
Http
Headers插件先抓取一个正常请求的数据包,如果没token的话,先去掉referer字段再重新提交看返回值。如果没报错的话,那就可以直接写一
个表单(POST型)或者构造个链接(GET型)重新测试了,一般都会成功;但有些通过ajax提交的是行不通的,因为ajax无法跨域。

如下图1:

情况B: 

无token有referer验证这种情况比较常见,也许我们抓包发现无token正庆幸时,删除referer重新提交一看发现报错了,难道就这样放弃了么?当然NO。。。

一.我们可以试试空referer:即删除header中的referer的值,如果服务器只是验证了是否存在referer没验证referer值
的话,我们重新提交会发现一个CSRF漏洞又被发现了~因为所有跨协议传递的请求都是不会送referer的,如https->http,(这个利
用成本有点高)还有javascript->http,data->http.如下面两个例子: 

1.javascript->http <img
src=http://hiphotos.baidu.com/aullik5/pic/item/b2cdb444a5ea4402cffca317.jpeg
/> <script> window.sc="<img
src=‘http://www.businessinfo.co.uk/labs/hackvertor/images/logo.gif?"+Math.random()+"‘>"; </script> <iframe
src="javascript:parent.sc"></iframe> 2.data->http
< iframe src="data:text/html;
base64,PGltZyBzcmM9aHR0cDovL2hpcGhvdG9zLmJhaWR1LmNvbS9hdWxsaWs1L3BpYy9pdGVtL2IyY2RiNDQ0YTVlYTQ0MDJjZmZjYTMxNy5qcGVnIC8+" ></iframe> //base64
加密的部分实际上就是我们构造的CSRF链接

二.我们可以试试修改referer值:如果原referer值为Referer: t.qq.com/xxxx
话,我们可以试试修改为Referer:
t.qq.com.baidu.com/xxx。如果服务器只是验证了referer是否存在qq.com或者t.qq.com等关键词的话,争对前一种
情况,我们可以在腾讯某子站点(http://xx.qq.com)发个帖子将图片地址修改为我们构造的csrf链接或者写好CSRF表单后将地址发布在
微博上等待其它用户点击,针对后一种情况我们可以建立个t.qq.com.yourdomain.com的域名存放CSRF表单来绕过REFERER检
测; 
三.伪造referer(具体方法我也没测试过,可自行百度) 

如下图2,图3:

时间: 2024-11-05 13:58:24

CSRF手工测试方法的相关文章

Python自动单元测试框架(摘要笔记)

规范Python单元测试 原文:https://www.ibm.com/developerworks/cn/linux/l-pyunit/ 测试是一个贯穿于整个开发过程的连续过程,从某个意义上说,软件开发的过程实际上就是测试过程.正如Martin Fowler所说的"在你不知道如何测试代码之前,就不该编写程序.而一旦你完成了程序,测试代码也应该完成.除非测试成功,你不能认为你编写出了可以工作的程序." 测试最基本的原理就是比较预期结果是否与实际执行结果相同,如果相同则测试成功,否则测试

Mock+Proxy在SDK项目的自动化测试实战

项目背景 广告SDK项目是为应用程序APP开发人员提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - 错误日志打点 - 反作弊 团队现状 在项目推进的过程中,逐渐暴露了一些问题: 1. 项目团队分为上海团队(服务端)和北京团队(客户端),由于信息同步,人力资源等其他原因,服务端与客户端的开发进度很难保持同步,经常出现客户端等着和服务端联调的情况 2. 接口文档不稳定,理解有偏差 3. 协议变化频

提高云计算中的软件质量

? Gavlin Pather在俄罗斯的KZN长大,在那里他学习信息技术并开始了作为一名开发者的职业生涯,后来他又成了测试领域的一名黑盒测试员,接着又转向白盒测试,最终是自动化测试.在测试专业领域近6年并在测试实验室中进行测试,自然而然地,他逐渐开始对云产生兴趣. ? 计算机和软件在我们的日常生活中越来越常见.现代社会中随着我们对技术越来越依赖,不可避免地就需求它们变得更快,更好.更快,更好的需求提高了,就需要更高质量的软件.要做到这一点,就不能只依靠手工测试,我们需要进入一个自动化的测试时代.

[转] Python自动单元测试框架

一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状态开始,随着新的功能不断地加入,程序逐渐地失去了原有的结构,最终变成了一团乱麻(其实最初的"很好的状态"得加个问号).测试的目的说起来其实很简单也极具吸引力,那就是写出高质量的软件并解决软件熵这一问题. 可惜的是,软件开发人员很少能在编码

Python的单元测试框架

一.软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施.正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状态开始,随着新的功能不断地加入,程序逐渐地失去了原有的结构,最终变成了一团乱麻(其实最初的"很好的状态"得加个问号).测试的目的说起来其实很简单也极具吸引力,那就是写出高质量的软件并解决软件熵这一问题. 可惜的是,软件开发人员很少能在编码

CVE: 2014-6271 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis

目录 1. 漏洞的起因 2. 漏洞原理分析 3. 漏洞的影响范围 4. 漏洞的POC.测试方法 5. 漏洞的修复Patch 1. 漏洞的起因 这个漏洞的起因源自于Bash(Bourne Again SHell)的ENV指令 http://ss64.com/bash/env.html env: Display, set, or remove environment variables, Run a command in a modified environment. Syntax env [OPT

Python自动单元测试框架

原文链接:http://www.ibm.com/developerworks/cn/linux/l-pyunit/ 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员在编写软件时自己加入一些用于测试的代码,使测试过程自动化呢?在软件工程中,这一技术称为自动单元测试,本文介绍在用Python开发软件时如何实现这一目标. 一.软件测试 大型软件系统的开发是一个很复杂的过

转:初学者,手工注入测试方法小节 (出处:: 51Testing软件测试网--jie)

1.加入单引号 ’提交, 结果:如果出现错误提示,则该网站可能就存在注入漏洞. 2.数字型判断是否有注入; 语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型) 结果:分别返回不同的页面,说明存在注入漏洞. 分析:and 的意思是“和”如果没有过滤我们的语句,and 1=1就会被代入SQL查询语句进行查询, 如果and前后的两条语句都是真的话就不会出错,但如果前后语句有一个为假的话,程序就会暴错. 也就表明程序有注入漏洞 防注入解决办法: 1>使用or 2>1 ;

web测试方法总结

一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符"~!@#¥%--&*?[]{}"特别要注意单引号和&符号.禁止直接输入特殊字符时,使用"粘贴.拷贝"功能尝试输入. (2)长度检查:最小长度.最大长度.最小长度-1.最大长度+1.输入超工字符比如把整个文章拷贝过去. (3)空格检查:输入的字符间有空格.字符前有空格.字符后有空格.字符前后有空格 (4)多行文本框输入:允许回车换行.保存后再显示能够保存