Web安全与防护 实训指南 8.1跨站请求伪造漏洞的利用与防范.pdf
跨站请求伪造漏洞的利用与防范
【实训目的】
1.掌握跨站请求伪造漏洞的形成的原因或者条件;
2.掌握跨站请求伪造漏洞的的利用方法;
3.掌握跨站请求伪造漏洞的防范方法。
【实训原理】
CSRF是攻击者利用用户的名义进行某些非法操作,其是在用户已经与具有
CSRF漏洞的WEB服务器已经建立了会话,在不知情的情况下点击了诈骗的链
接,而WEB应用程序没有对用户提交的请求进行验证,导致执行了非法操作。
【实训步骤】
步骤1、登录DVWA系统,进入CSRF页面
在DVWASecurity当中选择low选项,并提交。然后选择CSRF菜单。出现
如下界面:
图8-3DVWA系统CSRF工作界面
在该界面下,可以修改admin用户的密码。
步骤2、CSRF页面功能分析
该页面就是修改登录用户的密码。在Newpassword和Confirmnewpassword
输入框中,分别输入123456,点击Change按钮,会提示:PasswordChanged。
并且在URL栏中显示:
/dvwa/vulnerabilities/csrf/?password_new=123456password_co
nf=123456Change=Change#,密码变成了123456
很明显,这就是修改密码的链接。
步骤3、利用跨站请求伪造漏洞进行攻击
此时,在另外一个标签页的URL中输入:
/dvwa/vulnerabilities/csrf/?password_new=passwordpassword_
confpasswordChange=Change#
图8-4利用CSRF漏洞攻击结果
可以看到,直接跳转到了密码成功的页面了,密码相应变成passoword。在
此步骤中,我们就是利用了系统存在的跨站请求伪造漏洞,利用尚未失效的身份
认证信息,以受害者的身份向服务器发送请求,从而完成修改密码的非法操作。
步骤4、分析源代码
点击界面右下角的“ViewSource”按钮,就会看到如下源代码:
?php
if(isset($_GET[Change])){
$pass_new=$_GET[password_new];
$pass_conf=$_GET[password_conf];
if($pass_new$pass_conf){
$pass_new=((isset($GLOBALS[___mysqli_ston])
is_object($GLOBALS[___mysqli_ston]))?
mysqli_real_escape_string($GLOBALS[___mysqli_ston],$pass_new):
((trigger_error([MySQLConverterToo]Fixthemysql_escape_string()call!Thiscode
doesnotwork.,E_USER_ERROR))?:));
$pass_new=md5($pass_new);
//更新数据库数据
$insert=UPDATE`users`SETpassword=$pass_newWHEREuser=
.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);