跨站请求伪造(CSRF)

文章目录

  • 渗透测试漏洞原理
  • 跨站请求伪造(CSRF)
    • 1. CSRF概述
      • 1.1 基本概念
        • 1.1.1 关键点
        • 1.1.2 目标
      • 1.2 CSRF场景
        • 1.2.1 银行账户转账
        • 1.2.2 构造虚假网站
        • 1.2.3 场景建模
        • 1.2.4 实验
      • 1.3 CSRF类别
        • 1.3.1 POST方式
      • 1.4 CSRF验证
        • 1.4.1 CSRF Poc generator
      • 1.5 XSS与CSRF的区别
    • 2. CSRF攻防
      • 2.1 CSRF实战
        • 2.1.1 与XSS漏洞相结合
        • 2.1.2 实验
      • 2.2 CSRF防御
        • 2.2.1 无效防御
        • 2.2.2 有效防御
        • 2.2.3 HttpOnly实验

渗透测试漏洞原理

跨站请求伪造(CSRF)

跨站请求伪造(CSRF)_第1张图片

1. CSRF概述

1.1 基本概念

​ 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Wb应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。

​ 借助于社工的一些帮助,例如,通过电子邮件或聊天发送链接,攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行更改状态的请求,例如转移资金、修改密码等操作。如果受害者是管理账户,CSRF攻击会危及整个Wb应用程序。

1.1.1 关键点

  • 受害者没有退出登录,受害者保持身份认证。
  • CSRF继承了受害者的身份和特权,代表受害者执行非本意的、恶意的操作。
  • CSRF会借用浏览器中与站点关联的所有身份凭据,例如用户的会话Cookie,IP地址,Windows域凭据等。

1.1.2 目标

CSRF 的目标是更改用户账户的状态,攻击者利用CSRF 发送的请求都是更改状态的请求,比如,转账、更改密码,购买商品等等。

CSRF 的场景中,攻击者是没有办法获得服务器的响应。

1.2 CSRF场景

1.2.1 银行账户转账

搭建模拟银行网站 http://192.168.188.183/bank/ 。

跨站请求伪造(CSRF)_第2张图片

1.2.2 构造虚假网站

构造CSRF 攻击连接。

<meta charset='utf-8'>
<img src='./1.jpg'><br/> 
<img src='http://192.168.188.183/bank/action.php? username=hacker&money=100&submit=%E4%BA%A4%E6%98%93' alt='宝刀在手,谁与争锋'>
  • 攻击者通过 标签构造GET 请求。

  • 浏览器根据 标签中的 SRC 属性,请求服务器资源,会自动带上身份认证信息。

1.2.3 场景建模

跨站请求伪造(CSRF)_第3张图片

1.2.4 实验

该银行场景一共四个用户。

跨站请求伪造(CSRF)_第4张图片

其中hacker是黑客,账户余额为0。

admin用户可以给其他用户转账,admin给hello用户转账100块

跨站请求伪造(CSRF)_第5张图片

hello用户账户增加100块。

跨站请求伪造(CSRF)_第6张图片

如果admin用户访问了黑客提供的网站。并且点击了第一个链接。

跨站请求伪造(CSRF)_第7张图片

admin就会向黑客用户转账100元。

跨站请求伪造(CSRF)_第8张图片

黑客用户原先的余额

跨站请求伪造(CSRF)_第9张图片

admin用户点击黑客提供的链接后的余额:

跨站请求伪造(CSRF)_第10张图片

查看页面的请求数据,数据提交是在路径中进行的

跨站请求伪造(CSRF)_第11张图片

黑客利用admin访问bank网站的cookie信息。当访问csrf网站的时候,csrf向bank发送请求,bank网站中存储着bank网站的cookie信息,那么在响应的时候,也会将cookie信息携带上。

这个就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

跨站请求伪造(CSRF)_第12张图片

1.3 CSRF类别

以上场景中完成转账的关键操作是GET 请求。把转账操作改用POST 请求,是不是就能够防御CSRF 漏洞了呢?

1.3.1 POST方式

<meta charset='utf-8'>
<form name='csrf' action='http://192.168.188.183/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'> 
form>
<script>document.csrf.submit()script>
<img src="./1.jpg" ><br />

                    

你可能感兴趣的:(网络安全,安全,系统安全)