Low
csrf是一个修改密码的界面
Low级别的源码如下,新密码和确认密码通过GET传参,并未做任何过滤
尝试修改一次密码
若用户点击了被攻击者修改password_new和password_conf参数的url,则密码就会被修改
由于这个url的参数过于明显,攻击者还可以通过构造钓鱼界面来进行攻击
Medium
Medium等级的源码如下,利用stripos()来检测HTTP的REFERER头中是否含有SERVER_NAME(大致等同于http头中的Host)
因此攻击者可以构造一个钓鱼界面放在自己的服务器,将该页面的文件名修改为服务器端的ip或域名,就可以让Referer头中包含Host的内容
这里使用的是本机127.0.0.1
当用户打开该页面后,自己的密码就被重置
进入phpmyadmin后可以看到密码被修改为url对应的123456
High
High级别源码如下,该级别加入了token机制来防御csrf
当修改密码时可看到url中新增了token参数,理论上攻击者可通过XSS来获取用户的token,进而构造url来进行修改密码
Impossible
此时代码中不仅有token机制,并在用户修改密码时要求输入原密码,这就导致攻击url无法构造