天天看点

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课

环境:本地服务器,BurpSuite

一、概述

  • 使用Referer进行CSRF 漏洞防御。
  • BurpSuite生成CSRF POC。

二、漏洞防御

2.1 Referer防御CSRF原理

HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

当用户点击被构造好的CSRF利用页面,那么在执行用户对应操作时,提交的HTTP请求中就有对应的Referer值,此时服务端判断Referer值是否与服务器的域名信息有关。如果不相关则不执行操作。 

用户正常使用,发送的是用户当前的域名为Referer。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

用户点击POC的模型,发送的是POC所在的域名为Referer。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

 可以看出,是否是用户的自定义操作,是可以通过Referer来分辨出来。

2.2 Referer防御代码编写

在PHP中使用$_SERVER['HTTP_REFERER'] 获取页面提交请求中的Referer值。

<?php 
if(strpos($_SERVER['HTTP_ REFERER'],'xx.com') !== false)
    {
        echo "判断成功";
    }
    else 
    {
        echo "判断失败";
    }
?>
           

2.3 绕过Referer技巧

如果服务端只判断当前的Referer中是否具有域名,那么直接可以新建文件夹进行绕过。

2.4 BurpSuite生成POC触发CSRF

管理员的域名为:192.168.227.204

攻击者POC的域名为:192.168.227.84

管理员正常访问:

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

我们使用BurpSuite抓包,生成POC,放在KaliLinux的服务器中。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御
[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

POC2.html

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.227.204:8009/login2.php">
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>
           

 开启Apach服务。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

管理员访问poc2.html页面。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

 检测出来域名不一致,判断为CSRF攻击,拒绝操作。

我们尝试绕过,在poc2.html上建立一个名为192.168.227.204的文件夹,poc2.html放入其中再访问。

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

管理员访问如下地址:

http://192.168.227.84/192.168.227.204/poc2.html

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

 同时修改代码为a标签触发。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
        <a href="http://192.168.227.204:8009/login2.php" target="_blank" rel="external nofollow" >click me</a>
  </body>
</html>
           

管理员点击,成功绕过Referer验证,触发CSRF漏洞。 

[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御
[理论-学习]Web安全-CSRF-基础05一、概述二、漏洞防御

继续阅读