CSRF全称是Cross site request forgery ,翻译过来就是跨站请求伪造。

CSRF是指利用受害者尚未失效的身份认证信息(cookie,会话信息),诱骗其点击恶意链接或者访问包含攻击代码的页面,

在受害人不知情的情况下,以受害人的身份向(身份信息所对应的)服务器发送请求,从而完成非法操作,比如转账,改密码。

CSRF和XSS攻击的区别

CSRF没有盗取用户的cookie信息,而是直接利用用户cookie;相比之下,XSS是盗取用户的cookie信息。

Low级别

首先我用burp suite抓了一下这个改密码的数据包提交的参数有哪些。

http://www.dvwa.com/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change

可以发现,这个改密码的接口直接使用GET方法传参。我们在另一个网站(www.a.com)。伪造一个网页在网页中嵌入恶意链接。网页代码

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>恶意修改密码</title>
  8. </head>
  9. <body>
  10. <h1>当你打开这个网页的时候,你在DVWA网站的密码可能已经修改了</h1>
  11. <img src=" http://www.dvwa.com/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change"/>
  12. </body>
  13. </html>

关闭DVWA的标签页后访问,www.a.com站点

之后,打开DVWA的网站,退出登录(按照理论上讲,修改密码的接口应该清除之前的session会话,等待新密码重新建立会话,但是这里并没有)

重新使用之前的密码登陆,已经无法登陆

使用hack这个密码可以正常登陆。

分析一下,这个链接太过明显了,如果是我不小心打开了这个页面,我的密码被改了,那么很简单,我看一下这个网页的源码,

发现原来密码是hack,我再改回来不就行了,其实不是这样的,真正的CSRF攻击不会有这么明显的纰漏,可以伪造这个链接。

我这里的长链是本地的,所以无法生成在线的短链。

大家可以使用上边的短网址生成工具。将链接伪造一下。实测一下。百度》输入关键字》百度云盘》回车》cp长链》生成新浪短网址

访问新浪短网址,这个短链的效果和长链是一样的。

这样的话,就很难定位是哪个假链接修改了密码。

medium级别

在这个级别中检查了保留变量HTTP_REFERER(来源地址)中是否包含SERVER_NAME(包括HOST参数和访问的主机名)。

我抓了一下此级别下正常修改密码的报文和伪造的修改的密码报文做比较

正常的修改密码的数据包。

伪造的修改密码的数据包。

通过比较这俩个数据包,明显的referer不一样,Cookie信息也一样,由此可见,如果不检查referer这个信息,就会被当成合法的操作。

int eregi(string pattern, string string)

大家首先了解一下这个PHP函数,这个函数使用了匹配字符串的,如果在string这个字符中出现了字符串pattern,则返回true,否则返回false。

在这个级别中,就是通过这个函数检查cookie的。所以,我们只需要在我们的主机名中伪造这样一个字符串就可以了。

我在伪造网站上建立一个目录,并将我们伪造的网页放进去。

现在我的伪造的网页地址是

www.a.com/httpwww.dvwa.comvulnerabilitiescsrf/index.html

密码被成功修改(这里就不截图了,大家可以自行测试)

High级别

在High级别中加入了Anti-CSRF token验证机制,用户每次访问一个页面,都会返回一个随机的token,向服务器提交修改密码请求需要提交token,

服务器收到请求会优先检测token,token通过才会执行修改密码。

要想在这一步中成功修改密码需要拿到用户的token,

按照正常的思路应该是,伪造一个页面,诱骗用户打开这个页面,在这个页面偷偷加载一个iframe到修改密码的页面,然后获取这个页面的token,然后执行修改密码的操作。

但其实这个涉及另一个问题,iframe属于跨域操作,所以这个页面没有权限获取iframe框架中的token。除非是iframe中主动发送token出来。

这种情况下只能使用别的方法了,查看其它页面的是否存在XSS注入,通过注入的XSS恶意代码,获取token之后再执行修改密码的操作(XSRF攻击)

impossible级别

修改密码需要提供原密码,在不知道原密码的情况下就放弃吧。

DVWA之跨站请求伪造(CSRF)的更多相关文章

  1. PHP安全编程:跨站请求伪造CSRF的防御(转)

    跨站请求伪造(CSRF)是一种允许攻击者通过受害者发送任意HTTP请求的一类攻击方法.此处所指的受害者是一个不知情的同谋,所有的伪造请求都由他发起,而不是攻击者.这样,很你就很难确定哪些请求是属于跨站 ...

  2. 跨站请求伪造(CSRF)-简述

    跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...

  3. 跨站请求伪造(CSRF)攻击原理解析:比你所想的更危险

    跨站请求伪造(CSRF)攻击原理解析:比你所想的更危险 跨站请求伪造(Cross-Site Request Forgery)或许是最令人难以理解的一种攻击方式了,但也正因如此,它的危险性也被人们所低估 ...

  4. django之跨站请求伪造csrf

    目录 跨站请求伪造 csrf 钓鱼网站 模拟实现 针对form表单 ajax请求 csrf相关的两个装饰器 跨站请求伪造 csrf 钓鱼网站 就类似于你搭建了一个跟银行一模一样的web页面 , 用户在 ...

  5. 跨站请求伪造 CSRF / XSRF<一:介绍>

    跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一 ...

  6. 跨站请求伪造CSRF(Cross-site request forgery)

    CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站 ...

  7. 跨站请求伪造(csrf)中间件整理

    一. CSRF中间件 字面意思跨站请求伪造; 即模仿个请求朝服务器发送,django中对跨站伪造的请求有相应的校验 from django.views.decorators.csrf import c ...

  8. 跨站请求伪造(csrf)的防护手段

    CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求. 造成的问题:个人隐私泄露以及财产安全. CS ...

  9. 跨站请求伪造CSRF:攻击与防御

    CSRF是什么         (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为&quo ...

随机推荐

  1. C++日志之获取函数的名字,行号,文件名

    在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名.行号.函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__ 先介绍几个编译器内置的宏定 ...

  2. Linux线程退出、资源回收、资源清理的方法

    首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...

  3. SecureCRT rz上传文件失败

    SecureCRT 将 Windows 上的文件传至 Linux 端,小的文件没有问题能够正常上传,但是对于几百M的文件往往上传过程中失败. 解决办法:使用 rz -be,并且去掉对话框中" ...

  4. web面试常见问题补充

    jquery Ajax $ajax({ Url:”test.html”,-----发送请求的地址 Async:true;------异步操作 Cache:true,-----可以从缓冲中加载 Type ...

  5. CF-807B

    B. T-Shirt Hunt time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. 查看python 3中的内置函数列表,以及函数功能描述

    >>> dir(__builtins__)//查看内置函数(BIF)列表 ['ArithmeticError', 'AssertionError', 'AttributeError' ...

  7. fetch + async await 使用原生JS发送网络请求

    由于现在主流浏览器支持Fetch API,无需引用其他库就能实现AJAX,一行代码就搞定,可以说是非常方便了. export default { name: 'HelloWorld', data() ...

  8. JQuery onload、ready 加载顺序

    // ready 这个方法只是在页面所有的DOM加载完毕后就会触发 // 方式1 $(function(){ // do something }); // 方式2 $(document).ready( ...

  9. memcached连接说明

    memcached 客户端与服务器端通信使用的基于文本的协议,不是二进制,可通过Telnet进行互交

  10. bzoj 1901: Zju2112 Dynamic Rankings【整体二分+树状数组||主席树+树状数组】

    整体二分: 对于每一个修改操作,标记为1,并且加一个标记为-1的这个位置原来值,并且对于a数列每个点都当成修改操作 然后整体二分,扫当前操作区间lr,把在值域区间标记为1和-1的操作都在树状数组对应位 ...