从绿盟科技的《2014互联网金融安全报告》中可以看到,XSS和CSRF漏洞依然是影响比较突出的两个安全问题。

在这里分享下之前发现的两个内网知识管理系统(KM)的问题,KM系统个人主页的访问记录关注操作都接受GET请求,只需要构造请求就可以实施一次CSRF攻击。

先看看增加关注者的方法。通过网页代码可以看到,在他人的个人主页上点击“添加关注”按钮时调用的是getJSON方法,且未验证请求来源,于是要欺骗系统就变得异常简单,只需要满足两个条件:

  1. 构造请求到关注接口;
  2. cookie中带有用户信息(用户已经登录)。

以下是代码实现:

https://gist.github.com/kainy/204cb479f7d4c3703392#file-kmfollow-js

只要把这段代码挂到任意网页(无需同域),然后诱导已登录KM的用户访问就可以让他成为自己的关注者啦。同样的方式适用于K吧关注。

再来看看增加主页人气(访客量)的方法。这种方法实际并不是上文介绍的方法直接伪造用户操作请求,那样实施成本较高,效果不明显。为了提高投入产出比,这里利用用户的猎奇心里,主动访问其他用户的个人主页,这样我们的头像就能出现在被访问主页右下方的“最近来访”模块,这样达到两个效果:

  1. 被访用户发现自己主页有陌生人来访记录,出于好奇可能会回访;
  2. 其他访问该主页的用户,可能通过这个入口访问到我们的主页。尤其当他发现几乎所有个人主页上都出现固定的头像,被吸引点击的可能性就会大大增加,下图截自我的K吧主页,两天内就有8个访问记录

于是通过来访时间就会发现,自己的访客都比较“新鲜”(“两个冰雪聪明的企鹅MM没耐住好奇,给哥贴了俩标签).jpg

所以,我们要做的也很简单,就是制造大量访问记录。由于KM系统访客记录也是接收GET请求的,于是问题的难点就变成如何产生随机的用户id用来构造请求URL。
我们经常会在使用内部系统输入用户id时会发现一个自动补全的功能,里面其实就有个数字id与英文名的映射表,拿到这个就只差编码实现了:

https://gist.github.com/kainy/204cb479f7d4c3703392#file-kmvisit-js

复制脚本到浏览器控制台中运行:

KM_visit.jpg

哈,这里并没有用到什么高深的技术,娱乐性大于技术性,望安全大神们轻拍砖。另外虽然是内部系统,还是希望KM系统能做下针对性的改进。