vlambda博客
学习文章列表

CSRF基础教程(靶场实战)

0x00 简介


OWASP对CSRF的概述(原文):

Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they’re currently authenticated. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker’s choosing. If the victim is a normal user, a successful CSRF attack can force the user to perform state changing requests like transferring funds, changing their email address, and so forth. If the victim is an administrative account, CSRF can compromise the entire web application.

简单点说就是攻击者通过伪装成受信任的用户,来向网站发起请求的的一种恶意攻击。听起来和XSS有些类似不过CSRF更注重对用户和系统进行欺骗。

本文将从CSRF的利用和防御两个方面入手,借助pikachu靶场中的CSRF部分为大家带来CSRF的几个经典场景。


0x01 靶场安装

参考:

https://mp.weixin.qq.com/s/VVVL6-jwUXEdQ8UvPvF9ng



安装成功后访问:

http://pikachu.top/vul/csrf/csrf.php

靶场作者对CSRF解释的很详细,点赞。


0x02 实战演练

2.1 GET

配置Burpsuite,进入GET型CSRF

CSRF基础教程(靶场实战)

点击提示

CSRF基础教程(靶场实战)

任选一组账号登录,本次演示使用的用户名均为vince

CSRF基础教程(靶场实战)

点击修改个人信息

CSRF基础教程(靶场实战)

开启BP截断,随便改一改,点击submit

CSRF基础教程(靶场实战)

根据请求参数构造恶意页面

注:本次测试将sex参数值修改为girl,其余不变

CSRF基础教程(靶场实战)

访问页面

CSRF基础教程(靶场实战)

点击恶意链接

CSRF基础教程(靶场实战)

成功修改个人信息,此时我们退出登录

CSRF基础教程(靶场实战)

将页面sex参数值为boy后再次点击

CSRF基础教程(靶场实战)

CSRF基础教程(靶场实战)CSRF基础教程(靶场实战)

登录账号查看个人信息

CSRF基础教程(靶场实战)

依然是girl,说明此处必须要合法的用户凭据才能操作成功。

2.2 POST

和GET一样,使用vince账号登录后在修改个人信息处抓包

CSRF基础教程(靶场实战)

不同的是,这次修改信息的数据包为POST类型,由于a标签仅支持GET型请求,POST请求需要通过表单或者ajax实现。

不过,如果我们对每一个数据包进行CSRF测试都要自己构造表单的话工作量不可谓不大,好在BP已经为我们提供了CSRF POC生成器

CSRF基础教程(靶场实战)

CSRF基础教程(靶场实战)

快不快?还有更舒服的,在BP中快速可视化修改参数值为boy后直接点击“在浏览器测试”

CSRF基础教程(靶场实战)

复制生成的URL在浏览器打开

CSRF基础教程(靶场实战)

直接省去了创建文件的时间,点击提交请求

.CSRF基础教程(靶场实战)

信息成功修改

2.3 Token

本节的流程稍有不同,先开启截断再点击修改信息

CSRF基础教程(靶场实战)

CSRF基础教程(靶场实战)

可以看到系统额外增加了HTTP请求(请各位同学自行对比前两节的数据包),发送至Repeater查看

CSRF基础教程(靶场实战)

可以看到表单中额外增加一个隐藏项且每次请求都会刷新(不信的小伙伴可以多发送几次看看),此外题目有提示

CSRF基础教程(靶场实战)

祭出源码

打开文件分析代码

可以看到系统会校验token值和会话中的token值是否相同,也就是说请求中的token必须和先前HTTP请求的中的token完全一致才可以通过。这样一来即便不小心点到了恶意链接,由于token不匹配请求会被拒绝,有效的防止了CSRF攻击。

小伙伴们可以尝试突破该关…


0x03 防御CSRF

目前来说,防御CSRF的主要方法有:

  • 二次验证(例如验证码)

  • 使用token验证


注:Referer验证属于防君子不防小人,效果不是很显著


0x04 END

理清CSRF和XSS的区别和联系。