环境搭建
源码链接:https://pan.baidu.com/s/1V6bUrpQaMWgi4KG4TnNcHA
提取码:8yj0
本地搭建 在集成环境phpStudy下,将源码放在WWW文件夹中,打开浏览器url中输入:http://127.0.0.1/pikachu即可。
CSRF(get)模块
点击进入模块,登陆进入
账号密码在提示框中显示。
进入显示hello,vince,欢迎来到个人会员中心
我们单击修改个人信息,设置代理抓包看一下。源数据原封不动点击提交。
通过burpsuite进行抓包将修改相关个人信息的GET请求截获,我们可以看到传参方式为get,表单中的信息全都显示在url中。GET/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=hahaha&add=chain&email=vince%40pikachu.com&submit=submit
可见后台没有做任何的防范CSRF的措施。这时候我们可以构造跨站请求伪造攻击。
构造url/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=1777777777&add=luoyang&email=hahaha%40pikachu.com&submit=submit。
点击进入显示
这样就把vince的信息给修改了。
举个例子:A想盗取B的xx网站的密码,A进入xx网站,点击自己的修改密码选项,填写提交,发现url中显示【http://www.xxx.com/edit.php?新密码=123456&确认密码=123456&Change=Change】
然后把这个网址发给已经登陆xx网站的B,如果B点击进去,那么他的密码就会被改成123456。
当然这个例子中进行的修改是很容易暴露,因为url中的信息都能看到,有点安全意识的人应该都不会点进去··,所以,我们来介绍一下POST传参模式的CSRF.
CSRF(post)模块
跟GET一样,首先进行登陆,修改一下个人信息,并到Brup Suite上进行抓包,POST请求下已经不能通过修改URL来借用用户权限,那么和反射型XSS(POST)的方法相同,需要自己做一个表单,再返回到提交页面来完成修改。
这里我们可以用Brup Suite自带的实现检测CSRF漏洞的功能,在对Request包右键>Engagement tools>Generate CSRF PoC,其会自动生成一个HTML文件。
生成的html网页源码如下:
我们来测试一下,在桌面新建一个html文件,把代码写进去,然后打开。
点击提交请求按钮看到:
信息已经修改,但是url跟正常修改个人信息一样。
CSRF(Token)
进入修改信息界面审查元素发现:
<input type="hidden" value="351995d22eca4b4e1e361905882" name="token">
表单中添加信息 类型为隐藏 值为351995d22eca4b4e1e361905882 命名为token 令牌
token的值并不是固定的,每次请求都会刷新一个token,而且也是有时间限制的,过了规定时间,token就会失效。
token防止跨站请求伪造的原理:在浏览器访问网站A时,网站A设置cookie会增加随机值token,这个值是随机的。返回给浏览器时,cookie会储存在浏览器,同时会把token传给表单里面的隐藏字段。所以当浏览器用自己的表单时会自带token,网站A取到这个值和cookie里的token一致就通过。而网站B里面的表单没有这个值,所以不能通过,这样就阻止了恶意攻击。非表单也是这样的原理。