DVWA靶场csrf漏洞通关学习

这里只尝试csrf漏洞,不配合其他方式(靶场学习)

LOW

一、查看页面
  • 直接修改密码,可以得出是get请求方式,页面提示修改成功

在这里插入图片描述

  • 抓包查看详细情况

在这里插入图片描述

  1. get请求,传递信息可在地址栏中看见
  2. 无明显的token防护,那就可能有csrf漏洞问题
二、那就构造一个简单的网页看看
<img src="http://192.168.75.1//DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change" border="0" style="display:none;" />
<h1>404</h1>
<h2>file not found.<h2>
  1. 只要访问这个网页,浏览器就会直接发送img标签中的请求,使在不知情时密码被修改

在这里插入图片描述

在这里插入图片描述

  1. 访问后发现使用原密码password无法登录,使用修改后的密码123456可以登录
  2. 那就判断出网站存在csrf漏洞
三、代码审计

在这里插入图片描述

  1. 后端代码只对传入的两个密码作比较,相同就修改
  2. 没有做任何的身份校验和识别
总结:没有对发送请求方做身份识别和校验,存在ccsrf漏洞

Meidum

一、查看页面后无任何明显变化,抓包后页面有什么变化
  1. 尝试使用LOW级别的方式试试

    在这里插入图片描述

  2. 访问自己构造的网站(192.168.4.1/name.html)发现没有操作成功

  3. 仔细分析包到的信息,判断这里的防护手段是判断请求包中的referer字段的内容

二、将构造的网站名换成和目标网站名一样的尝试

在这里插入图片描述

  • 将恶意构造的网站域名换成192.168.75.1后发现存在漏洞,那就推测判断后端对referer字段做了判断
三、代码审计
// 源码
if( isset( $_GET[ 'Change' ] ) ) {
    if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
        $pass_new  = $_GET[ 'password_new' ];
        $pass_conf = $_GET[ 'password_conf' ];    
if( $pass_new == $pass_conf ) {
        $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
        $pass_new = md5( $pass_new );
        $current_user = dvwaCurrentUser();
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . $current_user . "';";
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
        // 后续代码
  1. 使用函数mysqli_real_escape_string()转义特殊字符,防止sql注入的漏洞
  2. 重点是使用了stripos()函数验证请求来源,但可被绕过
  3. 使用函数检查请求来源中的url是否包含在服务域名中,存在则修改
总结:后端通过函数stripos()判断请求的来源地址是否包含在服务器的地址中,但可以通过构造网站域名来绕过这个防护,实现csrf攻击

High

一、查看页面(无变化)
  • 抓包看看情况

在这里插入图片描述

  1. 首先要明确的是,csrf漏洞存是因为后端对操作的用户身份校验存在问题,检验身份的主要和最好的手段就是严格的token生成和销毁流程
  2. 可以看出这里存在了token,那csrf漏洞可以说是已经被初步阻断了,就算可以绕过也是配合其他漏洞一起攻击的(可以查看本网站其他人通过xss方式绕过token验证,这里只是简单的学习csrf漏洞
  3. 这里的可以绕过token的防护,来修改密码的方法就是使用xss漏洞来配合绕过
二、代码审计

在这里插入图片描述

  1. 这里重点使用checkToken()函数来判断token的有效性,这也是能阻断的前提
  2. 条件判断语句中使用两种兼容性的设置,一种是JSON的POST请求(前后端风分离的场景),另外一种是普通的表单提交方式(原生的html网页体提交)
  3. 剩余的就是验证两个密码是否相同,SQL注入的防护
总结:通过在表单中添加token的方式阻断了csrf漏洞,但可以配合xss漏洞配合修改密码

Impossible

代码审计

在这里插入图片描述

  1. 使用函数check Token()验证token的有效性,彻底阻断了csrf漏洞
  2. 这里还要求输入原密码,这个要让恶意修改密码的方式被阻止
  3. 使用转义函数stripslashes 去转义、mysqli_real_escape_string 转义特殊字符的方式,防止修改新密码的地方存在SQL注入漏洞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值