DVWA之CSRF跨站脚本攻击

桂林seo半杯酒博客

最近一直在研究跨站脚本攻击的一些技术,研究过了XSS攻击技术之后就来学习了CSRF跨站脚本攻击,两者之间是有很大的区别的。下面就听我慢慢道来……

一、 CSRF原理

CSRF (跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的操作,,比如以你的名义发邮件、消息,盗取你的账号,添加系统管理员,甚至购买商品、虚拟货币转账等操作。

说的不太通俗易懂那就举个例子来说明吧

CSRF攻击原理比较简单,如图所示。比如WebA是存在CSRF漏洞的网站,WebB是攻击者构建的恶意网站.UserC是WebA网站的合法用户。

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

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

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

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

根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理理该请求,导致来自网站B的恶意代码被执行。

二、 低安全等级CSRF攻击

在这里我搭建了一个DWVA的网站,输入用户名和密码登陆进

去,将网站的安全级别调整到最低,调整完毕后进入CSRF页面之中。

这个页面的内容意思是修改密码并目确认密码即可。输入新密码1234并确认.修改成功。

修改完密码,观察到url的地址变成了http://192.168.1.3:8080/dvwa/vulnerabilities/csrf/?password_new=1234&password_conf=1234&change=Change

在低级别情况下。使用mysql_ real_escape_stringO函数对输入的密码进行转义,将一些sql语句中的字符进行的转义,并且只需要输入的新密码进行确认,就可以导致即使不知道原密码的情况下可以随意修改密码。

三、 中等级别CSRF攻击

讲DVWA的安全级别设置为中-高等,页面与安全等级为低级的相同,再次查看源代码。

通过代码可以看出比低级级别时多了if(eregi(“127.0.0.1“,$ SERVER('HTTP REFERER']))这一段代码,eregi()函数是php中正则表达式,$_ SERVER()函数时取得服务器和环境信息,这段代码的目的是匹配服务器信息中HTTP_REFERER地址是否存在127.0.0.1这个IP地址.目的是为了验证头部referer请求源。

可以看到我们在这里直接修改密码,并没有提示修改成功。

使用F12键调用控制台中的网络选项,再修改一次密码查看他的cookie信息找到刚才提到的referer字段,发现没有127.0.0.1这个ip,所以我们的修改是无效的。

使用Firefox中的插件tamper Data修改referer头部,点击莱单栏一>工具一选择Tamper Data.点击“start tamper”。

再修改一次密码,会出现一个弹框,选择“tamper”。

最后再检查一下页面,提示修改成功,这就成功绕过了代码的防御。

你会喜欢