Pikachu-CSRF模块
一、概述
Cross-site request forgery 简称为"CSRF",在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
--对敏感信息的操作增加安全的token;
--对敏感信息的操作增加安全的验证码;
--对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。
二、CSRF(get类型)
漏洞利用:
第一步:用户登陆

第二步:修改一下个人信息并提交,同时利用BurpSuite抓包查看修改个人信息的请求内容:

从提交的请求来看,后台没做CSRF token,同时也是通过GET请求来提交修改信息,我们拿到这个,修改一下,然后让lucy点击就好,我们构造的URL中把地址add改为hacker。lucy一点击就修改了地址。
http://192.168.5.100/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345678922&add=hack&email=lucy%40pikachu.com&submit=submit HTTP/1.1

这个看似很厉害,但是实际上满足条件比较严苛,比如lucy必须是登陆状态,而且防范意识较低,才可以。
另外这个与反射型的XSS也不同,反射型XSS可以获取用户cookie得到了shell,而get型CSRF并没有得到用户的shell。
三、CSRF(post)
登陆之后修改信息,发现post型并没有显示url中,抓包发现是以form表单的请求体提交:


漏洞利用:
思路:这里的攻击方式跟XSS中POST类型是类似的,攻击者可以搭建一个站点,在站点上做一个表单,诱导lucy点击这个链接,当用户点击时,就会自动向存在CSRF的服务器提交POST请求修改个人信息。
第一步:把攻击网页放在服务器上,诱骗受害者点击链接:
192.168.5.100/pikachu/pkxss/csrf/post.html

第二步:发现信息已经更改:

四、CSRF防范之token防御
CSRF的主要问题是敏感操作容易被伪造,我们可以加入Token让请求不容易被伪造
每次请求,都增加一个随机码(需要够随机,不容易被伪造),后台每次对这个随机码进行验证
我们进入Pikachu平台的CSRF(token)页面并登录,我们可以看一下这个GET请求

看下控制台源码,看下这个表单,每次点击修改个人信息 都会去访问 token_get_edit_.php 这个文件,这个文件就会生成一个token,value就是后端发过来的,type是隐藏的额,在前端看不到,但是在源码中能看到。每次点提交,token也会被提交到后台,后台会对token进行验证,如果和当前session里面的token相等,才会让你提交。
五、其他防范措施
1、增加token验证(常用的做法)
对关键操作增加token参数,token值必须是随机的,每次都不一样
2、关于安全的会话管理(避免会话被利用)
(1)不要再客户端保存敏感信息(比如身份认证信息);
(2)测试直接关闭,退出时的会话过期机制;
(3)设置会话国企机制,比如几分钟内误操作,自动登陆超时。
3、访问控制安全管理
(1)敏感信息的修改时需要对身份进行二次认证,例如:修改账号时,需要验证旧的密码。
(2)敏感信息的修改使用POST,而不是GET
(3)通过http投不中的referer来限制原页面。
4、增加验证码:
一般用在登陆(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性)
Pikachu-CSRF模块的更多相关文章
- pikachu CSRF
CSRF简介 CSRF 是 Cross Site Request Forgery 的 简称,中文名为跨域请求伪造在CSRF的攻击场景中,攻击者会伪造一个请求(一般是一个链接)然后欺骗目标用户进行点击, ...
- vue与django中预防CSRF
一.环境: vue2.0.django 1.10.x.iview 二.django后台处理 1.将django的setting的MIDDLEWARE中加入django.middleware.csrf. ...
- 利用django中间件CsrfViewMiddleware防止csrf攻击
一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项 ...
- CSRF靶场练习
实验目的 了解CSRF跨站伪造请求实验 实验原理 CSRF的原理 CSRF(Cross-site Request Forgery)是指跨站点请求伪造,也就是跨站漏洞攻击,通常用来指 WEB 网站的这一 ...
- spring security源码分析之web包分析
Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案.一般来说,Web 应用的安全性包括 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- django 的 安全机制
xss 保护: xss攻击允许用户注入客户端脚本到其他用户的服务器上.通常通过存储恶意脚本到数据库,其他用户通过数据库获取恶意脚本,并在浏览器上呈现:或是使用户点击会引起攻击者javascirpt脚本 ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- Node.js安全清单
前言 安全性,总是一个不可忽视的问题.许多人都承认这点,但是却很少有人真的认真地对待它.所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查. 以下列出的安全项, ...
- DVWA之Insecure Captcha
Insecure CAPTCHA Insecure CAPTCHA,意思是不安全的验证码,CAPTCHA是Completely Automated Public Turing Test to Tell ...
随机推荐
- mysql 深度解析auto-increment自增列"Duliplicate key"问题
转载自:https://cloud.tencent.com/developer/article/1367681 问题描述 近期,线上有个重要Mysql客户的表在从5.6升级到5.7后master上插入 ...
- 6 shell内置命令
知识点1:什么是shell内建命令? Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件. 内建命令与普通命令的性质是不一样的,内建命令并不是某个外部文件,只要在 ...
- mongodb的基本命令与常规操作
1. 查看当前数据库的版本号:db.version()2. 查看当前所在数据库:db 默认是test数据库3. 查看当前数据库的连接地址:db.getMongo()4. 查看所有数据库:show da ...
- 每日单词 —— cut to the chase
cut to the chase: 词面意思--切奶酪 是美国俚语--开门见山:直奔主题 看一看相关的例句或者电影读白吧! 1. - 嫌疑人:Shall we cut to the chase ? 侦 ...
- LVGL|lvgl中文手册(lvgl中文文档教程)
lvgl官方的教程是英文的,这个是我在做项目时根据lvgl官方文档做出来的lvgl中文文档(持续更新维护),不仅仅只是生硬照搬lvgl官方文档的翻译,同时总结了我们在实际开发中遇到的各种细节,让这个文 ...
- MySQL数据库性能优化该如何入手
今天小杨给大家分享一篇关于数据库查询优化,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. ...
- maven手动添加库文件
项目应用到了ojdbc,dubbo等私有库,maven无法直接下载,需要手动下载后添加到maven本地库里面. 以下以ojdbc为例: 1.下载jar后,cmd添加到本地库: mvn install: ...
- 【剑指offer】50.数组中重复出现的数字
50.数组中重复出现的数字 知识点:数组:Set的不可重复性 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重 ...
- PO封装设计模式 -- App移动端测试
前言: 一.App_Po 封装 (用互联网上随便一个app进行) base 存放的是页面基础类,后续的类需继承基础类 common 存放的是公共部分,测试固件分离部分,新增截图功能部分 Data 存放 ...
- Java语言程序与数据结构(基础篇)-随记
有关代码见BasicJava U1-Java概述 1-程序设计风格和文档 1.注释风格 注释:// ; 块注释:/* ~ / ; javadoc注释:/* ~ */ javadoc注释 eg. /** ...