CTF实战10 CSRF跨站请求伪造漏洞

重要声明

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

(不是有同学问XSS弹个框框有啥用咩?这时候你就可以有用了~)
我们今天开始学习新的内容
CSRF概述

CSRFCross Site Request Forgery的缩写(也缩写为XSRF

直译过来就是<跨站请求伪造>的意思,也就是在用户会话下对某个CGI做一些<GET/POST>的事情

也可以将CSRF理解成为高级的XSS

网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个标识其身份的cookie,只要不关闭浏览器或者退出登录,以后访问 这个网站会带上这个cookie

如果这期间浏览器被人控制着请求了这个网站的url,可能就会执行一些用户不想做的功能(比如修改个人资料)

这个请求并不是用户真正想发出的请求,这就是所谓的<请求伪造>

因为这些请求也是可以从第三方网站提交的,所以前面加上<跨站>二字

CSRF例子

比如我们打算攻击一个存在问题的Blog,那就先去目标Blog留言,留下一个网址,诱其Blog的主人点击(当然,这是一种方法,也可以使用我们上节课讲的XSS),然后构造个HTML表单提交些数据过去。

多窗口浏览器便捷的同时也带来了一些问题,因为多窗口浏览器新开的窗口是具有当前所有会话的

即我用Firefox登陆了我的Blog,然后我想看新闻了,又运行一个Firefox窗口进程(不是打开一个新的标签页,而是重新点击一遍Firefox打开另一个浏览器)

这个时候两个Firefox窗口的会话是彼此独立的,从看新闻的Firefox发送请求到Blog不会有我登录的cookie

但是多窗口浏览器(意指在同一个浏览器进程中打开一个新的标签页)永远都只有一个进程,各窗口的会话是通用的,即看新闻的窗口发请求到Blog是会带上我在Blog登录的cookie(当然,现在的浏览器安全性比以前高很多了,一般不会发生这种事~)

攻击的条件

要进行CSRF攻击

被攻击的受害者必须依次完成以下两个步骤:

  • 用户已经完成身份认证
  • 新请求的提交不需要重新身份认证或确认机制
  • 攻击者必须了解Web APP请求的参数构造
  • 用户会被吸引去点击链接

几种常见的CSRF方式

  • <img>标签属性
  • <iframe>标签属性
  • <script>标签属性
  • JavaScript方法:Image对象、XMLHTTP对象
这里大概简单的用OWASP演示一下CSRF

简单的演示

我们打开OWASP里面关于CSRF的界面

这里题目的大概意思是这样的:

你的目标是向newsgroup发送一个email,其中email中包含URL指向恶意请求的图像

尝试包含网址的1x1像素图片

然后将该URL应该指向CSRF课程页面,并带有一个额外的参数<transferFunds=4000>

您可以从左侧菜单中复制快捷方式,方法是右键单击左侧菜单并选择复制快捷方式

无论谁收到这封电子邮件并恰好在那个时候进行认证,他的资金都将被转移

当您认为攻击成功时,刷新页面,您会在左侧菜单中找到绿色检查

这个攻击思路可以很传统了,而且题目已经提示我们可以加<transferFunds=4000>来进行攻击,也省去了我们分析我们希望被攻击者执行哪个链接的操作

假设现在我们用某宝来做例子

我们在发送给马粑粑的一个email中的<img>属性中包含了一个以恶意的URL,这个URL指向的是一个某宝商品

马粑粑一天没事,用自己账户余额3亿的的某宝账户登录某宝随便逛逛,然后打开邮件查看新的邮件

就在他打开邮件的时候,我们的隐藏在<img>中的代码就执行,瞬间就把马粑粑账户转了5000过来

那我们就来试试这个攻击思路

我们构造如下的Payload

之后我们假设我们现在成了马粑粑

在自己的邮箱里面发现了这个新邮件,然后好奇,打开来看看

在点击这个链接的时候,我们用BurpSuite来截包看看

这是第一个Request

可以看到,我们的第一个Request是要去打开这个邮件

网站返回了一个Response之后,我们下一个Request也就是第二个Request就是这样的

这个流量的逻辑意义是要去加载我们的那个<img>图片,但是这个图片是不存在的,而且我们还在这个地址上加了一个希望马粑粑执行的&transferFunds=5000

也就是让马粑粑给我们转了5000的意思

之后当然会出来一个404error,因为这个图片并不存在

然后我们可以来看看这个加载之后的页面

<img>因为是不存在的,所以是不会显示的

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2018-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

cyclictest 简介

1. cyclictest 简介以及安装 1.1 cyclictest 简介       cyclictest 是什么? 看名字应该就能大致猜出来它是一种 te...

73740
来自专栏Golang语言社区

几种服务器端IO模型的简单介绍及实现(下)

5、使用事件驱动库libevent的服务器模型 Libevent 是一种高性能事件循环/事件驱动库。 为了实际处理每个请求,libevent 库提供一种事件机制...

29970
来自专栏Golang语言社区

几种服务器端IO模型的简单介绍及实现(下)

5、使用事件驱动库libevent的服务器模型 Libevent 是一种高性能事件循环/事件驱动库。 为了实际处理每个请求,libevent 库提供一种事件机制...

38490
来自专栏我是东东强

Linux内核调优参数对比与解释

本文介绍了Linux系统性能优化点常见的内核参数含义及其调优方式,以供学习参考。

1.3K10
来自专栏用户2442861的专栏

操作系统内存管理——分区、页式、段式管理

内存管理主要包括虚地址、地址变换、内存分配和回收、内存扩充、内存共享和保护等功能。

21510
来自专栏linux驱动个人学习

Linux CFS调度器之唤醒抢占--Linux进程的管理与调度(三十)

table th:nth-of-type(1){ width: 20%; } table th:nth-of-type(2){ width: 20% ; }

31930
来自专栏Java技术分享

dubbo工作原理,集群容错,负载均衡

dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制。 RPC:一个远程过程调...

45160
来自专栏Django中文社区

拓展 User 模型

Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息。对于 Django 内置的 User 模型, 仅包含以下一些主...

36850
来自专栏java初学

memcached

32060
来自专栏用户2442861的专栏

操作系统八内存管理

      CPU可以在一个cpu时钟内执行一个或多个其内置寄存器的指令。而访问内存需多个cpu时钟。由于内存频繁访问,可以再cpu与内存之间增加高速缓存

11310

扫码关注云+社区

领取腾讯云代金券