热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DVWA下的CSRF通关是怎样的

DVWA下的CSRF通关是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CSR

DVWA下的CSRF通关是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

CSRF跨站点请求伪造(Cross—Site Request Forgery):

跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

CSRF攻击攻击原理及过程如下:

1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2.在用户信息通过验证后,网站A产生COOKIE信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

5.  浏览器在接收到这些攻击性代码后,根据网站 B 的请求,在用户不知情的情况下携带 COOKIE 信息,向网站 A 发出请求。网站 A 并不知道该请求其实是由 B 发起的,所以会根据用户 C 的 COOKIE 信息以 C 的权限处理该请求,导致来自网站 B 的恶意代码被执行。

与XSS的区别:

XSS是通过修改页面Javascript等代码后,发给用户从而实现盗取COOKIE信息,之后利用COOKIE进行登陆网站等操作。非法操作是黑客。
CSRF并没有盗取COOKIE信息,而是通过用户直接利用COOKIE进行操作。非法操作并不是黑客,而是用户本身。

1、low级别


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( '

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );

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

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

?>

可以看到,源码中的mysql_real_escape_string() 函数有防护sql注入的作用,然后就只进行了$pass_new == $pass_conf判断,没有进行任何的验证。

在新密码和确认密码之处填写123456

DVWA下的CSRF通关是怎样的

burp suite抓包发现,通过get请求执行

DVWA下的CSRF通关是怎样的

http://172.21.98.85/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_cOnf=123456&Change=Change#

根据上面的url,进行构造payload:

http://172.21.98.85/DVWA-master/vulnerabilities/csrf/?password_new=test&password_cOnf=test&Change=Change#

这样的payload,一般人都可以看出来存在陷进,往往不会去点击,因此我们还需要进一步伪装,把它缩短。

DVWA下的CSRF通关是怎样的

DVWA下的CSRF通关是怎样的

得到一个短的url:http://r6d.cn/9rGy,提醒一句,以后但凡看见很短的url,然后以很不常见的格式出现,千万别着急点击浏览。

DVWA下的CSRF通关是怎样的

现在的密码已经变成test,不再是123456。

我们还可以编辑一个页面,填好payload,等正常用户浏览访问就执行了。

DVWA下的CSRF通关是怎样的

后缀改成.html.就行了。

DVWA下的CSRF通关是怎样的

真实情况下,这个html文件的表象应该具备各种诱惑力,例如,如何一夜暴富、xxx照等等,让你情不自禁的想去浏览访问。

DVWA下的CSRF通关是怎样的

正当你想开喷时,说好的惊喜呢,怎么是404,哈哈,但其实你已经将你的密码从test修改为password了。

DVWA下的CSRF通关是怎样的

2、medium


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( '

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );

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

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

?>

先看看里面几个重要的函数

eregi()函数: 匹配符合条件的字符串,已经被preg_match() 替代,加i不区分大小写。
stripos函数:返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
$_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。
$_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。

同样的内容,换成1.html

DVWA下的CSRF通关是怎样的

DVWA下的CSRF通关是怎样的

DVWA下的CSRF通关是怎样的

但是实际上没修改完成,因为这个级别的增加了Referer认证,那么将http包头的Referer参数的值中包含主机名就行了。

3、High级别

先放弃,这个token值我一直绕不过去,表示先放弃了,大概绕过的思路知道就行,不求甚解!

4、mpossible级别


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

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

// Sanitise current password input 
$pass_curr = stripslashes( $pass_curr ); 
$pass_curr = mysql_real_escape_string( $pass_curr ); 
$pass_curr = md5( $pass_curr ); 

// Check that the current password is correct 
$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' ); 
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR ); 
$data->bindParam( ':password', $pass_curr, PDO::PARAM_STR ); 
$data->execute(); 

// Do both new passwords match and does the current password match the user? 
if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) ) { 
// It does! 
$pass_new = stripslashes( $pass_new ); 
$pass_new = mysql_real_escape_string( $pass_new ); 
$pass_new = md5( $pass_new ); 

// Update database with new password 
$data = $db->prepare( 'UPDATE users SET password = (:password) WHERE user = (:user);' ); 
$data->bindParam( ':password', $pass_new, PDO::PARAM_STR ); 
$data->bindParam( ':user', dvwaCurrentUser(), PDO::PARAM_STR ); 
$data->execute(); 

// Feedback for the user 
echo "

Password Changed.
"; 

else { 
// Issue with passwords matching 
echo "
Passwords did not match or current password incorrect.
"; 



// Generate Anti-CSRF token 
generateSessionToken(); 

?>

也是采用PDO技术防护了,根据现实情况,一般防护csrf的办法最常见的就是增加原始密码验证,短信验证、验证码验证,这样基本就很难进行scrf攻击了。

看完上述内容,你们掌握DVWA下的CSRF通关是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程笔记行业资讯频道,感谢各位的阅读!


推荐阅读
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文详细介绍了Keycloak框架中UserRepresentation类下的isEnabled()方法的功能与应用,并通过多个实际代码示例说明其在用户管理中的具体实现。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文总结了Java初学者需要掌握的六大核心知识点,帮助你更好地理解和应用Java编程。无论你是刚刚入门还是希望巩固基础,这些知识点都是必不可少的。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
author-avatar
sunshinena
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有