首页 > 其他分享 >CSRF - 跨站请求伪造

CSRF - 跨站请求伪造

时间:2024-04-02 19:12:27浏览次数:26  
标签:跨站 受害者 请求 网站 用户 CSRF 攻击者 伪造

目录

1、什么是CSRF

跨站请求伪造(Cross-site request forgery),CSRF是指利用受害者尚未失效的身份认证信息(登录状态中的Cookie等),诱骗受害者点击恶意链接,或者访问包含攻击代码的页面,在受害者不知情的情况下以受害者的身份向服务器发送请求,从而完成非法操作。

可以这样说,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作。

image

在服务器看来,所有请求都是合法正常的。


2、CSRF的攻击过程和原理

攻击过程大致如下:

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

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

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

  4. B网站收到用户请求后返回一些访问A网站的恶意代码。

  5. 浏览器在接收到这些恶意代码后,根据网站B的请求,在用户不知情的情况下携带用户的cookie信息,向网站A发出请求。

  6. 网站A并不知道该请求其实是由网站B发起的,所以会根据用户的cookie信息以用户的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF产生的条件:

  • 用户已经登录了网站A,并且在本地浏览器记录了cookie。

  • 用户在没有退出网站A的情况下(cookie生效的情况下)在同一浏览器又访问了攻击者提供的引诱网站B(攻击者构造访问网站A的URL)。

    需要精心构造操作网站A的数据包,可利用CSRFTester构造导出。

  • 网站A没有做任何的CSRF防御。

CSRF攻击是攻击者利用受害者的cookie骗取服务器的信任,攻击者并不能拿到cookie,也看不到cookie的内容。

攻击者所能做的只是给服务器发送请求,以执行请求中的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。

根本原因:Web的身份验证机制虽然可以保证某个请求是来自于某个用户的浏览器,但却无法保证该请求是用户知晓并允许发送的。


3、CSRF的类型有哪些

CSRF的利用必须要对操作产生的数据包完全了解,以便构造完全符合要求的数据包。

GET类型

诱使用户访问构造的GET请求的恶意URL。

正常转账URL:http://bank/transfer?amount=10000&for=bob
伪造的转账URL:http://bank/transfer?amount=10000&for=hacker

POST类型

诱导用户跳转到黑客网站,网站的HTML中有一个自动提交的隐藏表单,只要用户打开页面,就会发起转账请求。

<form action="http://bank/transfer" method=POST>
    <input type="hidden" name="account" value="user" />
    <input type="hidden" name="amount" value="10000" />
    <input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script> 

其他

在受害网站的评论区放置一个a标签,点击跳转时发起伪造请求。

<a href="http://bank/transfer?amount=10000&for=hacker" taget="_blank">大八卦<a/>

在受害网站的评论区发表伪装的图片,实际是一个恶意请求。

![诱人的图片](http://bank/transfer?amount=10000&for=hacker)

4、CSRF的防御

CSRF安全问题黑盒怎么判断:

  1. 看页面来源检查 HTTP Referer 字段

  2. 看看有无凭据是否存在 Token验证

  3. 看关键操作有无验证 验证码

防御措施:

1 验证 HTTP Referer 字段

在HTTP头中有一个字段 Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站。(同源策略)

但是在某些情况下 Referer 字段是可以被修改的。

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

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

抵御CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。

3 在 HTTP 头中自定义属性并验证

这种方法也是使用token并进行验证,和上一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。

csrf_token 的位置以及原理和绕过?

CSRF token 通常是一个随机生成的字符串,被包含在请求中,服务器会验证该 Token 的有效性,以确保请求来源合法。

1、在表单中,可以作为隐藏字段嵌入在表单中
2、在请求头中, 可以在请求头中通过自定义的 Header 字段发送
3、在URL参数中,也可以作为URL参数发送,不过这种方式相对不安全


5、CSRF与XSS有何不同

CSRF和XSS它们的主要区别在于攻击的方式和目标:

攻击方式:

  • CSRF 是通过利用用户当前已经通过身份验证的会话来执行未经授权的操作,攻击的范围有限,仅限于用户可以执行的操作。

  • XSS 是通过注入恶意脚本代码到目标网页中,然后这些代码会在用户浏览器中执行,攻击的影响范围更直接,它可以直接影响到网站的内容和用户的浏览器。

攻击目标:

  • CSRF 目标是利用受害者的身份来执行未经授权的操作,诱导受害者用户执行他们不打算执行的操作,例如更改密码、发送恶意请求等。

  • XSS 目标是在受害者的浏览器中执行任意js代码,从而窃取用户信息、篡改网页内容等。

通常XSS漏洞比CSRF漏洞的危害更加严重:

CSRF被认为是一种“单向”漏洞,即攻击者可以诱导受害者发出HTTP请求,但他们无法获取该请求的响应;而XSS是一种“双向的”,因为攻击者注入的脚本可以发出任意请求,读取响应,并将数据发送到攻击者指定的地址。


6、没有防御的CSRF

地址:All labs | Web Security Academy (portswigger.net)

CSRF vulnerability with no defenses

题目的目标是利用CSRF漏洞更改受害者的电子邮件地址。

首先登录到给定的受害者用户wiener:peter的更改邮箱界面。

image

站在攻击者视角,我们需要做的就是以受害者的身份去更改他的邮箱,使用Burp拦截更改邮箱的请求。

image

该请求依赖于会话cookie来识别帐户,接下来要做的就是构造一个可以提交更改邮箱的请求页面,发送给受害者。Burp有自动生成脚本的功能,右键Generate CSRF PoC,Burp会生成一个html表单,script部分会自动提交表单。

image

去到 exploit server 复制生成的html到body,点击 View exploit 查看漏洞,最后 Deliver to victim,发送给受害者。

image

站在受害者视角,浏览器会出现一闪而过的的html页面,这是因为这个页面是自动提交的。可以通过开发者工具看到这次的请求,请求地址为更改邮箱的地址。
由于当前受害者没有退出账户,所以请求携带的session是有效会的,绕过了身份验证,以受害者的身份发送请求。

image

当受害者在看到这个伪造页面时就被攻击了,邮箱在受害者不知情的情况下被修改。

image

标签:跨站,受害者,请求,网站,用户,CSRF,攻击者,伪造
From: https://www.cnblogs.com/smileleooo/p/18075940

相关文章

  • 【python】深入探讨flask是如何预防CSRF攻击的
    ✨✨欢迎大家来到景天科技苑✨✨......
  • csrf跨站请求伪造
    csrf跨站请求伪造(1)介绍钓鱼网站我搭建一个跟正规网站一模一样的界面(中国银行)用户不小心进入我们的网站,用户给某个人打钱打钱的操作确确实实是提交给了中国银行的系统,用户的钱也确确实实减少了但是唯一不同的是打钱的账户不是用户想要转过去的账户内部本质在钓鱼......
  • DVWA-CSRF通关教程-完结
    DVWA-CSRF通关教程-完结文章目录DVWA-CSRF通关教程-完结Low页面使用源码分析漏洞利用Medium源码分析漏洞利用High源码分析漏洞利用impossible源码分析Low页面使用当前页面上,是一个修改admin密码的页面,只需要输入新密码和重复新密码,即可修改admin密码。源码......
  • Day52:WEB攻防-XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
    目录XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS:(某案例测试)知识点:1、XSS跨站-输入输出-原理&分类&闭合2、XSS跨站-分类测试-反射&存储&DOMXSS跨站-输入输出-原理&分类&闭合漏洞原理:接受输入数据,输出显......
  • Day53:WEB攻防-XSS跨站&SVG&PDF&Flash&MXSS&UXSS&配合上传&文件添加脚本
    目录MXSSUXSS:UniversalCross-SiteScriptingHTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到)SVG-XSSPDF-XSSPython生成XSSFlash-XSS知识点:1、XSS跨站-MXSS&UXSS2、XSS跨站-SVG制作&配合上传3、XSS跨站-PDF制作&配合上传4、XSS跨站-SWF制作&反编译&上传XSS......
  • XSS跨站脚本攻击
    免责声明传播、利用本博客所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本博客及作者不为此承担任何责任,一旦造成后果请自行承担!谢谢!XSS跨站脚本攻击XSS是什么XSS全称呼跨站脚本,是将任意JavaScript代码插入到Web用户页面里执行以达到攻击目的的......
  • Django框架之csrf跨站请求
    【一】跨站请求伪造介绍【1】引入CSRF(Cross-SiteRequestForgery)跨站请求伪造是一种常见的网络攻击方式。攻击者通过诱导受害者访问恶意网站或点击恶意链接将恶意请求发送到目标网站上利用受害者在目标网站中已登录的身份来执行某些操作从而达到攻击的目的。【2】举......
  • Django csrf跨站请求伪造,校验,CBV忽略与允许csrf校验
    csrf跨站请求伪造钓鱼网站,搭建一个网站与正规网站一模一样的界面,用户进入到我们的网站中,给指定用户转账,汇款确实提交到银行,但是收款人确实我们自己定义的人。本质在钓鱼网站的页面针对对方账户,只给用户提供一个没有name属性的普通input框,在内部则隐藏一个已经写好的name和value......
  • SSRF(服务器请求伪造)
    相关函数(php)file_get_contenes()fsockopen()curl_exec()fopen()发掘漏洞当一个服务器有可以解析或读取一个url的时候抓包发现某些参数带有url关键字可能存在ssrf漏洞有某个参数的值是http://的链接原理由于函数使用不当造成的file_get_contents()fsockopen()cur......
  • CSRF & SSRF
    CSRF&SSRFCSRFCSRF(Cross-SiteRequestForgery)(跨站请求伪造漏洞)原理用户访问网站,网站给用户cookie,此时攻击者给用户发送了一个诱惑链接,链接里有对该网站的访问代码,用户点击攻击者的链接后,触发恶意代码,攻击者就利用用户的cookie,执行了对网站的请求(以接口形式调用请求)......