1:跨站请求伪造概念(Cross-site request forgery,CSRF)
攻击者会伪造一个请求(请求的形式一般为一个链接),欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击也就完成了。
因此CSRF攻击也被称为“One click”攻击。
攻击者利用目标用户的身份,以目标用户的名义执行某些非法操作。
例如:以目标用户的名义发送邮件,发消息,盗取目标用户的账号,甚至购买商品,会泄露用户个人隐私。
攻击场景举例:
(1)小黑想把Lucy的收货地址改成自己的。怎么办?首先的获得lucy的登录态
(2)小黑在这个购物网站首先先注册一个账号,然后自己修改自己的收货地址,抓自己的包,把这个包(请求)发给lucy
(3)一旦Lucy点击了这个请求,相当于Lucy以自己的身份提交了一个请求,把自己的地址改成了小黑的地址。如下图所示:
**CSRF的攻击过程有以下两个重点
1:目标用户已经登录了网站,能够执行网站的功能。
2:目标用户访问了攻击者构造的URL
——————————————————————————————————————————————————————————
CSRF VS XSS(区别)
小黑黑在XXX网站的首页如果发现了一个XSS漏洞,则小黑可能会这样做:
(1)欺骗用户lucy访问埋伏了XSS脚本(盗取cookie的脚本)的页面;
(2)lucy中招,小黑盗取到lucy的cookie信息
(3)小黑顺利登陆Lucy的后台,小黑自己修改lucy的相关信息;
*****CSRF是借助于用户的权限去完成攻击,攻击者自身并没有拿到用户的权限,而XSS是直接盗取了用户的权限,然后实施了破坏。
2:跨站请求伪造测试流程总结
如何确认一个web网站是否存在CSRF漏洞??
自己修改一下相关信息,然后抓下数据包,
(1)看看数据包中是否有防止CSRF的一些措施,其实就是防止这个请求能否被伪造的一些措施,例如在修改密码前是否有验证旧密码以及OPT,因为旧密码攻击者是无法拿到的,
(2)第二个就是看看数据包中有没有CSRF的Token,CSRF的Token是常用的防止CSRF的措施,Token是随机比较长的字符串,每次请求Token都不一样,因而很难仿造请求。
3:跨站请求伪造实验演示
首先lucy登录网站,用户名lucy:密码:123456
****如何确定这个存在CSRF漏洞呢》?
修改个人信息,首先这是敏感信息的修改,并通过burp-suite进行抓包,如下图所示:
Get请求:
在Get请求里,提交的参数中没有看到CSRF的token,也就是后台应该是没有做防CSRF的措施的。
小黑如果想要获得上述的请求,可以自己注册账号,然后自己修改,通过抓包等到。
lucy通过聊天工具或者别的,收到了来自攻击者伪造的请求链接,在自己登录态的情况下,点击下述链接,以后就会发生变化
http://x.x.x.x/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123456789012&add=shanxi&email=lucy%40pikachu.com&submit=submit
只要能伪造出链接,把该修改的参数,在URL中进行修改,然后将此链接发送给待登录态的用户,
用户点击了这个链接呢,那么攻击就会成功,信息就已经被篡改。
上述是一个get型的CSRF
*****************************************如果是POST型的呢?
抓包:所有的参数都是放在请求体里面的,因为无法通过URL来伪造这个请求
如何利用?
需要自己布置一个站点,在这个站点上制作一个表单,让lucy去点击恶意站点上表单的这个URL,通过表单的这个URL向存在CSRF漏洞的网站提交post请求。(和XSSpost方式下的利用场景类似)
4:token
每次提交请求的时候,往这个请求中增加随机码,随机码第一要足够随机,长度要足够长。
当每次提交修改个人信息的请求之后呢,后端就会调用一个函数随机生成TOken,
当你请求时,后台去session里面查看是否有这个token,如果有就销毁掉,重新生成一个token,复制到session里面。
每次刷新页面,都会生成一个新的token。
案例演示:
修改信息为:修改的同时利用burpsuit抓包
抓包情况如下:
修改个人信息之后,去看抓包情况
GET /pikachu/vul/csrf/csrftoken/token_get_edit.php?sex=%E5%A5%B3&phonenum=177777789XX&add=chengdu&email=123456%40k&token=7900960419c8a56e26183688195&submit=submit HTTP/1.1
后端生成一个token,前端是如何拿到这个token,以及怎么提交给后端进行验证的?
后端源码:
每个人session对应的token都是不一样的。
你get请求过来的这个token,一定要和我这个session里面的token要相等,否则
每次刷新界面,都会重新调用这个set_token,也就是销毁原来的生成新的。
5:跨站请求伪造相关防护措施
攻击目标必须具有登录态,设置登录超时时间,把后台的登录态关掉。
不要一直处于登录状态,因为你这CSRF有个其中很重要的条件,必须满足对方登录态,
否则无法进行攻击。