伪造cookies偷数据

现在网站很多信息都是从其他网站的信息系统里偷来的,比如新闻小偷,最近我们的短信系统想上天气预报的功能,短信策划部的人说了就从XXXX那里拿数据吧,我就回来干活了。
    正常的,得到了页面需要的参数,给Ypost过去吧,哦~不对,返回错误信息,再看看参数都是对的,难道不成有会话存在?关闭所有浏览器窗口,清除cookies,重新直接进入结果页面,果然出错,试了几把确定是从首页产生了cookies,通过这个cookies才能访问结果页,目的肯定是为了防止盗链。
    如果能知道这个cookies的内容,我们伪造一个不久能直接访问结果页面了吗?我们来试试吧,首先想想,浏览器怎么访问一个网站呢?把请求发送到服务器,服务器根据请求返回相应的页面代码和其他信息,这个其他信息里面就包含了我们要的cookies的信息。怎么知道浏览器给服务器发送了什么信息?可以上网查查相关资料了,我是从我们的服务器访问日志中copy来一段稍微修改了一下。ok准备好了,我们就假冒浏览器发送请求了,telnet是个好东西。
    telnet www.XXXXXXgov.cn 80
     这样就出来telnet的命令行模式,输入
GET /XXXXXXX/index.jsp HTTP/1.1
HOST: www.nmc.gov.cn

什么?输入的字都不显示!直接copy再粘贴进去得了。然后回车回车回车...直到有反应为止,这个时候屏幕哗哗哗的现实结果了,注意,我们要的结果在信息的最上面,可要看好了

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=36F4829CD68F71110C6480B4F1C373B4; Path=/XXXXX
Content-Type: text/html;charset=GB18030
Transfer-Encoding: chunked
Date: Mon, 20 Mar 2006 01:11:13 GMT

第一行是状态码,第二行是web服务器应该是tomcat吧,注意第三行就是偶们要的cookies了,所有java产生的cookies都是这个样子"JSESSIONID="。嘿嘿其他就不管了,要得就是这个。

接下来我们看看带上cookies的浏览器请求是什么样子的


GET /XXXXXX/citySearch.do?inputMode=citysearch&type=second&cityid=52896 HTTP/1.1
Referer: /XXXX/index.jsp\nUser-Agent: TAX
Cookie: $Version=\"1\"; JSESSIONID=XXXXXXXXXXXXXXX; Path=/XXXX
HOST: 127.0.0.1

ok,好像我们只要把从index.jsp这个页面产生的JSESSIONID=36F4829CD68F71110C6480B4F1C373B4; Path=/XXXX放到相应的位置,然后把这个请求发给对方网站就行了就行了。编辑后就是这样了

GET /XXXX/citySearch.do?inputMode=citysearch&type=second&cityid=52896 HTTP/1.1
Referer: /XXXX/index.jsp\nUser-Agent: TAX
Cookie: $Version=\"1\"; JSESSIONID=36F4829CD68F71110C6480B4F1C373B4; Path=/XXXX
HOST: 127.0.0.1

同样的telnet给发送过去,ok结果正确出来了。回来看看其实也不算伪造,就是截了我需要的cookies信息,然后把他带在请求里发送过去。

至于在程序里怎么写,我想这个各自的语言有各自的写法,只要把上面的过程体现出来就行了。

给段java写的吧
HttpClient client = new HttpClient();
      GetMethod method = new GetMethod("http://www.XXXX.gov.cn/XXXX/index.jsp");
      client.executeMethod(method);
  
      String tt = method.getResponseHeaders()[1].getValue(); //取得“Set-Cookie”的值
      tt = tt.replace("Path=/XXXX", "$path=\"/XXXX\""); //修改成合适HEADer的值
    
      //**********************创建Header
       GetMethod get = new GetMethod();
      Header aaa = new Header();
      aaa.setName("Cookie: ");
      aaa.setValue("$Version=\"1\"; " + tt);
      //*********************************
       get.setRequestHeader(aaa);
      //********************再次请求真正的城市天气页面
       get.setPath("http://www.XXXX.gov.cn/XXXX/citySearch.do?inputMode=citysearch&type=second&cityid=" +
                   oCity.getId());
      client.executeMethod(get);
    
         System.out.println(method.getResponseHeaders()[i].getName()+"="+method.getResponseHeaders()[i].getValue());

      
      response = new String(get.getResponseBodyAsString().getBytes("gb2312"));

      get.releaseConnection();
      method.releaseConnection();
      response = response.replace("\r\n", "");

再回想一下,其实还有网站这么干的,判断请求页面的上一个页面是不是某个页面,如果不是就不给显示,或者强制转向到那个页面。其实这个依据就是上面的请求中的
Referer: /XXXX/index.jsp\nUser-Agent: TAX

呵呵,我们也同样的方式修改请求的head中的Referer属性,就能达到相同的效果。

欢迎使用我们的短信查天气,发送“武进天气”或者“武进气象”或者“武进的天气”任何带地区名字和“天气”或“气象”关键字的短语到80021598(移动)90021598(联通),一条三毛钱哦。

[本日志由 英雄无敌 于 2006-03-20 10:23 AM 编辑]
上一篇: 关于越狱(prisonbreak)~
下一篇: 关于投票
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 1 | 引用: 0 | 查看次数: 10596
西马
西马[2006-03-20 08:23 PM | | | 222.188.188.145 | del | 回复回复]
沙发
抓包用WinSock Expert v0.6
cookie欺骗用桂林老兵的Cookie & Inject Browser

发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 关闭 | [img]标签 关闭