3.2.5 跨站请求伪造漏洞案例及分析

3.2.5 跨站请求伪造漏洞案例及分析

1.定义

跨站请求伪造(Cross-Site Request Forgery,CSRF),也被称成为“one click attack”或者“session riding”,是一种对网站的恶意利用。攻击者利用目标站点对用户的信任,诱使或迫使用户传输一些未授权的命令到该站点,从而达到攻击的目的。具体而言,就是攻击者迫使用户在当前会话下对另一个站点做一些GET/POST的操作,这些操作需要借用目标站点对当前用户的信任凭据,而这些事情用户未必知晓也未必愿意做,故可以把它理解为HTTP会话劫持。

网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个标识其身份的cookie。只要不关闭浏览器或者退出登录,以后访问这个网站就会带上这个cookie,如果这期间浏览器被攻击者控制,导致用户请求了这个网站的URL,可能就会执行一些用户不想做的功能(比如修改个人资料)。因为这个不是用户真正想发出的请求,这就是所谓的请求伪造;又因为这些请求也是可以从第三方网站提交的,所以使用前缀跨站二字。

2.案例分析

例如,假如应用程序允许用户提交不包含任何保密字段的状态改变请求,如:http://example.com/app/tansfer Funds?=amount=1500&destination Account=4673243243,那么攻击者就可以构建一个请求,用于将受害用户账户中的现金转移到自己账户。攻击者在其控制的多个网站的图片请求或iframe中嵌入这种攻击请求:

如果受害者用户通过example.com认证后,即只要受害者用户拥有example.com的信任凭据,那么他访问任何一个包含上述代码的恶意网站,伪造的请求将包含example.com对用户的会话信息和信任凭据,从而导致该请求被授权执行。

L-Blog就存在这样一个CSRF漏洞,其添加管理员的链接如下:http://localhost/LBlog/admincp.asp?action=member&type=editmem&memID=2&men Type=Sup Admin,因此,攻击者只需要构造好ID,然后想办法让管理员访问到这个URL,就可以达到攻击的目的了。

多窗口浏览器(目前主流浏览器都支持多窗口浏览)便捷的同时也带来了一些问题。因为多窗口浏览器新开的窗口是具有当前所有会话的访问权限的。即用户通过IE登录其Blog,然后该用户又运行一个IE进程来访问某论坛,这个时候的两个IE窗口的会话是彼此独立的,从逛论坛的站点发送到Blog的请求中是不会包含用户登录的Blog的cookie,但是部分多窗口浏览器只有一个进程,各窗口的会话是通用的,即论坛的窗口发请求到Blog是会带包含Blog登录的cookie。这种机制大大提高了CSRF攻击的成功性。

与XSS相比,CSRF有着本质区别。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。在危害方面与XSS攻击相比,CSRF攻击没有XSS流行(因此对其进行防范的资源也相当稀少),但其更难以防范.所以也被认为比XSS更具危险性。