ifree's Blog - it's my way

基于SESSIONID的攻击与防范

论坛的密码忘了,不想接收会被我删除的重置邮件,也不想在3次尝试密码错误之后封禁15分钟.

于是用fiddler抓包看了看,每次换验证码的时候都会更换一个PHPSESSID .于是,用fiddler的RequestBuilder用相同的SESSIONID构建请求,试了几次常用密码之后登录成功了!

一个网站这样的话该是多大的隐患.这东西的学名叫session fixation attacks(固定session攻击).下面列举一下可以推测的攻击:

  • 钓鱼式登录链接
    对方给你一个链接:http://weak/login?JSESSIONID=youarepig. 当你登录之后,服务器的保存了你的会话,根据SESSIONID就轻松获取对方想要的信息.
  • 绕过验证码
    对方在第一次会话中保留了正确的验证码.可能的举动有:刷SEO,恶意灌水,多次登录尝试等等,前两个比较好处理,如果你的密码策略的够差劲的话对方可以很快破解出你的密码(Java的SESSIONID是32位伪随机数,PHP的好像也是.其他的策略类似.这样的话,由于网速带宽限制,GPU破解是不可能的,但是诚心破你还是没问题).如果密码破解还不过瘾的话对方还可能穷举SESSIONID(穷举是不可能的...)获取服务器上活动的会话,网站用户的信息就危险了.
  • 利用cookie固定SESSIONID
    都知道session是基于cookie的,对方恶意(cookie攻击有很多)地给你加了个JSESSIONID的cookie,客户端与服务器通讯中一直会传递这个cookie值,然后,就没有然后了.
  • ...参考:wikipedia,msresearch

解决办法:
这个方法很多,每次请求更换SESSIONID,用更负责的SESSIONID算法,请求频率限制...

提醒一下安全意识很重要.一个同学说他是黑客,每次说帮人黑网站,有一次他到我家玩的时候正好在帮别人黑网站我就看了看.他打开自己的"工具箱",里面工具很多各式各样的软件,功能大概有SQL注入(对稍微高级点的网站没用),webshell上传(对稍微有意识的开发人员没用),漏洞扫描(对稍微好点的主机没用,特别是linux),旁注(选好虚拟主机很重要啊,好邻居也很重要),DDOS(贱人,但是拿不到想要的东西).从他开始到第二天早上我醒的时候他正虚着眼看着自己的显示屏,我猜他肯定觉得该继续找点工具试试...
其实我想说的是大家的意识提高一点网站安全性肯定有提高.黑网站的同学也多学点吧,多看点规范,多学学工夫网的牛人们,没文化害死人啊,这样的通宵不值啊.