【网络安全的神秘世界】csrf客户端请求伪造

news2024/9/20 14:31:04

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具

一、概述

跨站请求伪造,是一种挟持用户在当前已登陆的web应用程序上执行非本意操作的攻击方法,允许攻击者诱导用户执行他们他不打算执行的操作

该漏洞允许攻击者部分规避同源策略,该策略旨在防止不同网站相互干扰

【同源策略】:同网站下的域名只能访问本网站的资源,不能访问其他网站

在这里插入图片描述

Web A为存在CSRF漏洞的业务网站,Web B为攻击者构建的恶意网站,

CSRF攻击原理及过程如下:

1、用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A

2、在用户信息经过验证后,网站A产生cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A

3、用户未退出网站A之前,在同一浏览器中打开一个TAB页访问网站B

4、网站B接收到用户的请求后,返回一些攻击性的代码,并发出一个请求要求用户去访问站点A

5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,像网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户的cookie信息以用户的权限处理该请求,导致来自网站B的恶意代码被执行

在这里插入图片描述

csrf和xss的区别:

csrf是借助用户的权限完成攻击,攻击者并没有拿到用户的权限;xss是盗取用户的cookie值直接获取用户的权限来实施攻击

要使csrf攻击成为可能,必须具备三个关键条件:

  • **一个功能操作。**应用程序中存在攻击者有可能诱导用户的操作,这可能是特权操作(例如修改其他用户的权限)或对用户特定数据的任何操作(例如更改用户的邮箱、密码
  • **基于cookie的会话处理。**执行该操作涉及发出一个或多个HTTP请求,并且应用程序仅依赖会话cookie来识别发出请求的用户,没有其他机制可用于跟踪会话或验证用户请求
  • **没有不可预测的请求参数。**执行该操作的请求不包含攻击者无法确定或猜测其值的任何参数。例如,当用户更改密码时,如果攻击者需要知道现有密码的值,则该功能不会受到攻击,因为攻击者预先构造的恶意链接中无法提前预测并定义“现有密码“的值
get请求,攻击者可以直接构造恶意链接发送给用户;post请求,控制用户发送post请求

二、DVWA演示

docker环境:citizenstig/dvwa

Low

在dvwa靶场的csrf模块,源码分析

在这里插入图片描述

尝试修改密码为123456,可以看到修改成功

在这里插入图片描述

看到顶部的URL是:

10.0.0.158:8089/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#

了解这个原理后,我们开始实验

(1)edge浏览器登录pablo/letmein账号

在这里插入图片描述

将等级调到LOW

在这里插入图片描述

(2)根据上面的URL,构造payload,发送给pablo用户让其访问:

10.0.0.158:8089/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

可以看到,直接跳转到了密码成功的页面了

在这里插入图片描述

但是,这样的payload,一般人都可以看出来存在陷阱,往往不会去点击,因此我们还需要进一步伪装,把它缩短

短网址链接:https://www.ft12.com/

在这里插入图片描述

在这里插入图片描述

提醒一句,以后但凡看见很短的url,然后以很不常见的格式出现,千万别着急点击浏览

点击短网址之后,现在的密码已经变成aaa,不再是123456

Medium

源代码分析:

在这里插入图片描述

在Low的基础上增加了eregi函数,该函数会在一个字符中搜索指定的内容,搜索不区分大小写

也就是从http的请求包中的 referer 参数搜索 host 参数,如果能匹配上,意味着请求来自于本网站,是可信的

if( eregi( $_SERVER[ 'SERVER_NAME' ],$_SERVER[ 'HTTP_REFERER' ]))

HTTP_REFERER表示发送请求的来源:referer

SERVER_NAME表示目标网站的主机名:host

绕过方法:只要保证referer里面包含host即可

referer: www.baidu.com.hack.com
host: www.baidu.com

点击修改密码,用brup抓包,让referer包含host的值

在这里插入图片描述

放包,显示修改成功

在这里插入图片描述

High

实验目的:在1337用户不知情的情况下修改其密码

用户:1337/charley
攻击者:admin/123456

源代码分析:增加了自动设置token机制

用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端请求

在这里插入图片描述

(1)Edge浏览器登录1337/charley账号

在这里插入图片描述

利用xss漏洞获取1337用户cookie值

<img src=x OnerrOr=alert(document.cookie)>

在这里插入图片描述

获得cookie信息

BEEFHOOK=cjYtdD5mOoVBcirh1iQRGrtsEj9FN2DQ6XsR2Ke7BAAApycFlMWrBQY0ITihzPbiH8x71eC0LDwzi1y1; PHPSESSID=69t7109d3ku3ikl76qmajrajp2; security=low

(2)火狐浏览器登录admin/123456账号

在这里插入图片描述

在csrf模块,随便设置要修改的密码,设置的是password

注意:在这里设置的密码通过csrf最后改的是1337用户的密码

在这里插入图片描述

抓包把cookie值改为1337用户的cookie值,修改security安全级别为low,删除token值

在这里插入图片描述

放包,退出后登录1337/password账号

在这里插入图片描述

登陆成功!!

在这里插入图片描述

三、Pikachu演示

1、电话地址修改 CSRF(GET)

火狐浏览器的vince是攻击者
edge浏览器的allen是被攻击者

(1)火狐浏览器登录vince/123456用户

点击修改个人信息

在这里插入图片描述

在这里插入图片描述

然后抓包,看是否符合CSRF漏洞利用特征

在这里插入图片描述

通过上面url,构造恶意url,发送给目标用户

#主机名+路径
10.0.0.158:8081/vul/csrf/csrfget/csrf_get_edit.php?sex=1&phonenum=2&add=3&email=4&submit=submit

用户一定要在同一个浏览器里点击,携带cookie,才有攻击效果

(2)edge登录allen/123456账号

allen在已经登陆账号的情况下

在同一浏览器访问了恶意链接,发现个人信息被修改了

在这里插入图片描述

2、钓鱼攻击 CSRF(POST)

火狐浏览器的kobe是攻击者
edge浏览器的lili是被攻击者

(1)火狐浏览器登录kobe/123456用户

抓包进行分析:当请求从get变为post,我们不能构造url进行攻击了

在这里插入图片描述

这时我们可以制作一个链接给用户,控制用户发起POST请求

连接代码:

<html>
<head>
<script>
window.onload = function(){
  document.getElementById("postsubmit").click();
}
</script>
</head>

<body>

<!-- 表单以post方式提交,这里的url要更改网站ip -->
<form method="post" action="http://10.0.0.158:8081//vul/csrf/csrfpost/csrf_post_edit.php">
    <!-- 性别 -->
	<input id="sex" type="text" name="sex" value="girl" />
    <!-- 手机号 -->
	<input id="phonenum"  type="text" name="phonenum" value="100000002" />
    <!-- 家庭住址 -->
	<input id="add" type="text" name="add" value="hacker" />
    <!-- 邮箱 -->
	<input id="email" type="text" name="email" value="lucy@pikachu.com" />
    <!-- 自动提交按钮,绑定了事件 -->
	<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

打开vscode,复制粘贴上述代码,ctrl+s保存

安装live server插件

在这里插入图片描述

右键单击Open with Live server,让代码加载到浏览器中

在这里插入图片描述

发给lili用户,希望被其访问…

(2)edge登录lili/123456账号

当lili用户访问恶意链接时,发现自己不做任何操作,信息就已经被更改了

在这里插入图片描述

因为攻击者构造的恶意代码中,有自动提交操作

在这里插入图片描述

四、使用burp生成CSRP利用poc

找到存在csrf漏洞的数据包

在这里插入图片描述

在这里插入图片描述

右键单击Engagement tools -> Generate CSRF PoC,生成CSRF POC

在这里插入图片描述

发现下方出现了html代码

在这里插入图片描述

我们可以添加自动提交脚本,右上角options --> 勾选include auto-submit script,再点击Regenerate重新生成代码

在这里插入图片描述

这个时候代码里多了一段重新生成的脚本

在这里插入图片描述

复制粘贴poc到vscode里,让其在浏览器中运行

在这里插入图片描述

但是发现还是需要用户自己手动提交,才能修改信息成功,这不符合我们想要实现的目的

查看poc分析原因是burp生成的poc,没有对提交按钮进行绑定事件,所以我们要自己完善一下代码

在这里插入图片描述

在靶场环境测试了一下,发现成功

在这里插入图片描述

五、防御CSRF漏洞

防御CSRF攻击最可靠的方法是在相关请求中设置CSRF Token

1、验证HTTP Referer字段

(1)拿到Referer

(2)分割出Referer中的域名

(3)根据后缀匹配域名是否是可信域

但是有的浏览器会禁用掉referer,所以只是在一定程度上防御CSRF攻击

2、在请求地址中添加token并验证

可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求

3、添加验证码

验证码被认为是对抗CSRF攻击最简洁有效的防御方法

要结合具体的业务场景来使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声

参考文献&#xff1a;Cheng B , Gao N , Huang Y ,et al.Broadening perfect sound absorption by composite absorber filled with porous material at low frequency:[J].Journal of Vibration and Control, 2022, 28(3-4):410-424.DOI:10.1177/1077546320980214. 为了提高低…

端侧大模型系列 | 斯坦福手机端侧Agent大模型,为Android API而生!

0. 引言 峰峦或再有飞来&#xff0c;坐山门老等。泉水已渐生暖意&#xff0c;放笑脸相迎 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖铁观音的小男孩。今天这篇小作文主要介绍端侧大模型中的函数调用&#xff0c;即常说的Function calling…

即插即用!高德西交的PriorDrive:统一的矢量先验地图编码,辅助无图自动驾驶

Driving with Prior Maps: Unified Vector Prior Encoding for Autonomous Vehicle Mapping 论文主页&#xff1a;https://misstl.github.io/PriorDrive.github.io/ 论文链接&#xff1a;https://arxiv.org/pdf/2409.05352 代码链接&#xff1a;https://github.com/missTL/Pr…

【数据结构】排序算法---直接插入排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 7. 折半插入排序代码实现——C 结语 1. 定义 直接插入排序是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分&#xff0c;每次从「未排序的」…

PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码

目录 用到的工具&#xff1a; PHP Swoole拓展 | PHP Redis拓展 | Redis 7 一、安装上述必要工具&#xff08;下面是以宝塔面板中操作为例&#xff09; 给PHP安装Swoole和Redis拓展&#xff1a; 安装Redis软件 二、创建websocket服务器文件"wss_server.php" 具…

node.js+Koa框架+MySQL实现注册登录

完整视频展示&#xff1a;https://item.taobao.com/item.htm?ftt&id831092436619&spma21dvs.23580594.0.0.52de2c1bg9gTfM 效果展示&#xff1a; 一、项目介绍 本项目是基于node.jsKoamysql的注册登录的项目,主要是给才学习node.js和Koa框架的萌新才写的。 二、项目…

java数据结构----图

图的存储结构: 代码实现 public class Graph {// 标记顶点数目private int V;// 标记边数目private int E;// 邻接表private Queue<Integer>[] adj;public Graph(int v) {V v;this.E 0;this.adj new Queue[v];for (int i 0; i < adj.length; i) {adj[i] new Queu…

C++的类与对象中(主讲默认成员函数)

目录 1.类的默认成员函数 2.构造函数 1.全缺省构造函数 2.第7点中的对自定义类型的成员变量构造&#xff08;调用编译器自动生成的默认构造函数&#xff09; 3.析构函数 4.拷贝构造函数 5.运算符重载 1.概念 2.赋值运算符重载 6.const成员函数 1.类的默认成员函数 默…

微服务——网关路由(Spring Cloud Gateway)

网关路由 1.什么是网关 网关又称网间连接器、协议转换器&#xff0c;是在网络层以上实现网络互连的复杂设备&#xff0c;主要用于两个高层协议不同的网络之间的互连。网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由…

【深度智能】:迈向高级时代的人工智能全景指南

​ ​ 前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;人工智能立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 第一阶段&#xff1a;基础知识 1. 计算机科…

人脸防伪检测系统源码分享

人脸防伪检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【Python基础】Python 装饰器(优雅的代码增强工具)

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、装饰器基础三、语法糖 四、带参数的装饰器五、多层装饰器六、总结 一、前言 在Python编程的世界里…

【手撕】快排-分治

1. 颜色分类 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/sort-colors/description/ 代码 class Solution {public…

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目&#xff0c;它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名&#xff0c;这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

数据安全查询-—SAAS本地化及未来之窗行业应用跨平台架构

一、数据库安全查询 默认数据库查询是不区分大小写的&#xff0c;这样无法区分Mm&#xff0c;Admin&#xff0c;admin 二、thinkphp 区分大小写 $condition "binary appdhj_sn {$应用sn}"; 三、原始mysql select * from TableA where binary columnA aaa; 四、…

mtk7628 网口灯问题

板子上电插入网线到网口&#xff0c;只有wan口灯会亮&#xff0c;插入lan口灯不会亮。对比了ok的代码&#xff0c;先对比设备树&#xff0c;未看到网口相关的GPIO。 mt7628an_WMD-7688A-12816.dts mt7628an_hilink_hlk-7628n.dts 继续查看网口相关代码&#xff0c;加打印&…

Android应用程序启动源码分析

文章目录 Android应用程序启动源码分析一、启动流程二、Launcher通知AndroidOS(用户点击图标)2.1 Activity.java2.2 Instrumentation.java2.3 ActivityTaskManagerService.java2.4 ActivityStarter.java2.5 RootWindowContainer.java2.5.1 Task.java2.5.2 TaskFragment.java 2.…

基于python+django+vue的个性化餐饮管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的视…

勇于尝试,永远行动 - 《洛克菲勒写给儿子的38封信》读书笔记

两倍速听过好几遍的书&#xff0c;洛克菲勒的思想和志向&#xff0c;配得上他的成就。 “在尝试中寻找突破&#xff0c;在行动中成就自我。”这是洛克菲勒写给儿子的箴言&#xff0c;也是他一生的真实写照。在这38封信中&#xff0c;他不仅分享了自己的工作心得&#xff0c;更…

Docker安装mysql安装nginx安装Redis

Docker安装mysql 下载镜像 docker pull mysql:8.0注意,使用此方法安装镜像需要提前配置镜像源,详情看之前的文章 安装 docker run -d -p 3306:3306 \ --name mysql \ --restartalways \ --privilegedtrue \ -e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORDroot \ mysql:8.0进…