CSRF(Cross-Site Request Forgery)跨站点请求伪造,这种攻击方式的特点是:攻击者盗用你的身份,以你的名义进行某些非法操作。CSRF能够使用你的帐户发送邮件,获取你的敏感信息,甚至盗走你的财产。
当我们打开或登录某个网站后,在浏览器与网站之间将会产生一个会话,在这个会话没有结束时,你就可以利用你的权限对网站进行某些操作,如:发表文章、发送邮件、删除文章等。当这个会话结束后,你再进行某些操作的时候,Web应用程序可能会提示“您的会话已过期”、“请重新登录”等提示。
比如当我们登录网上银行后,浏览器就已经与可信的站点建立了一个经过认证的会话。之后,所有通过这个经过认证的会话发送请求,都被视为可信的动作,例如转账、汇款等操作。当我们在一段时间内不进行操作后,经过认证的会话可能会断开,再次进行转账、汇款操作时,这个站点可能会提示你:您的身份已过期,请重新登录、会话已结束等信息。
CSRF攻击正是建立在会话之上的,比如当你登录了网上银行,正在进行转账业务,这时你的某个QQ好友(攻击者)发来一条消息(URL),这条消息是攻击者精心构造的转账业务代码,而且与你所登录的是同一家网络银行,你可能认为这个网站是安全的,然而当你打开了这条URL后,你帐户中的余额可能会全部丢失。
下面我们就来实施一次CSRF攻击。进入DVWA,选择low级别,可以看到这里的CSRF测试是要进行更改管理员密码的操作。默认的管理员密码是password,为了能够直观地查看管理员密码,我们在开始菜单中找到AppServ,执行其中的“MySQL Command Line Client”,进入MySQl操作界面。执行“use dvwa;”命令打开dvwa数据库,执行“select user,password from users where user = ‘admin’;”命令,可以查看到目前的admin用户密码的md5值。
下面我们在CSRF的页面中将管理员密码改为123,可以查看到md5值随之改变。
此时我们仔细观察浏览器地址栏中的URL:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change# |
如果黑客获知了这个URL,那么是否就可以随意更改管理员密码呢?比如构造下面这个URL,是否就可以将管理员密码修改为abc?
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=abc&password_conf=abc&Change=Change# |
如果黑客是在自己的电脑上直接执行这个URL,那么肯定是无效的。原因是必须要具有管理员的权限,才可以修改密码。也就是前面所介绍的,必须要先以管理员身份与网站之间建立好一个会话之后,才可以执行修改密码的操作。
那么黑客就可以构造一个网页,将上面这段代码放入网页中,然后诱骗管理员打开这个页面,如果此时管理员恰好正在对网站进行操作,在管理员的浏览器与网站之间建立好了会话,那么上面这段代码就会生效。
比如我们在一台已经搭建好Web环境的虚拟机(IP地址192.168.80.132)中编写一个名为csrf.html的网页,代码如下:
<img src=mm.jpg> <iframe src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=abc&password_conf=abc&Change=Change#" frameborder="0" ;0" /> |
然后在已经登录进入DVWA的状态下,在本地的浏览器中打开这个网页http://192.168.80.132/csrf.html:
此时就会发现管理员密码已经被自动修改为了abc:
这就是一次典型的CSRF攻击,由此可见CSRF的两个主要特点:
- CSRF攻击建立在浏览器与Web服务器的会话中;
- 欺骗用户访问URL。