Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] 发现QQ邀请插件商业版潜在的危险及隐患!

[复制链接]
qianway 发表于 2008-10-12 20:02:23 | 显示全部楼层 |阅读模式
柄着研究的目的去DEZEND了作者的插件,发现这个东西用起来有点害怕。原因如下:


一、作者把获取到的QQ好友的列表暂存作者的服务器里,证据如下(谁也不知道是否有没有在服务器上存档或者存密码?或者作者不干了就关了服务器了呢?):

  1. /** 导入QQ邮箱通讯薄 */
  2. elseif ($_GET['op'] == "dumpqq"){
  3.         if(!$_POST['qqurl']){
  4.                 die('error');
  5.         }
  6.         
  7.         $qqurl =$_POST['qqurl'];

  8.         include_once(S_ROOT."./source/contact/class.http.php");

  9.         $http = new http();        
  10.         $http->initialize();
  11.         $http->settarget('http://addresslist.119w.com:99/qqaddressxml/');
  12.         $http->addparam('url', $qqurl);
  13.         $http->execute();
  14.         $xml = $http->getresult();

  15.         $contacts = Array();

  16.         $pattern = "/\<node(.*?)\<\/node\>/s";
  17.         if ( preg_match_all( $pattern, $xml, $tmpres, PREG_PATTERN_ORDER ) )
  18.         {
  19.                 foreach( $tmpres[1] as $node)
  20.                 {
  21.                         preg_match_all( "/\<email\>(.*?)\<\/email\>/",
  22.                                   $node, $temail );
  23.                         preg_match_all( "/\<nick\>(.*?)\<\/nick\>/",
  24.                                   $node, $tnick );
  25.                         if( $temail[1][0] && $tnick[1][0])
  26.                                 $contacts[$temail[1][0]] = $tnick[1][0];
  27.                 }
  28.         }

  29.         if($contacts == 0) die('error');
  30.         if(empty($contacts)) die('empty');

  31.         echo diff_contacts($contacts);
  32.         exit;
  33. }

  34. /** 导入QQ邮箱通讯薄2 */
  35. elseif ($_GET['op'] == "dumpqq2"){
  36.         if(!$_POST['account']|| !$_POST['passwd'] || !$_POST['vcode'] || !$_POST['s']){
  37.                 die('error');
  38.         }
  39.         
  40.         $account =$_POST['account'];
  41.         $passwd =$_POST['passwd'];
  42.         $vcode =$_POST['vcode'];
  43.         $s =$_POST['s'];

  44.         include_once(S_ROOT."./source/contact/class.http.php");

  45.         $http = new http();        
  46.         $http->initialize();
  47.         $http->settarget('http://addresslist.119w.com:99/qqaddressxml2/');
  48.         $http->addparam('account', $account);
  49.         $http->addparam('passwd', $passwd);
  50.         $http->addparam('vcode', $vcode);
  51.         $http->addparam('s', $s);
  52.         $http->execute();
  53.         $xml = $http->getresult();
  54.         if( 'error' == $xml)
  55.                 die('error');

  56.         $contacts = Array();

  57.         $pattern = "/\<node(.*?)\<\/node\>/s";
  58.         if ( preg_match_all( $pattern, $xml, $tmpres, PREG_PATTERN_ORDER ) )
  59.         {
  60.                 foreach( $tmpres[1] as $node)
  61.                 {
  62.                         preg_match_all( "/\<email\>(.*?)\<\/email\>/",
  63.                                   $node, $temail );
  64.                         preg_match_all( "/\<nick\>(.*?)\<\/nick\>/",
  65.                                   $node, $tnick );
  66.                         if( $temail[1][0] && $tnick[1][0])
  67.                                 $contacts[$temail[1][0]] = $tnick[1][0];
  68.                 }
  69.         }

  70.         if($contacts == 0) die('error');
  71.         if(empty($contacts)) die('empty');

  72.         echo diff_contacts($contacts);
  73.         exit;
  74. }
复制代码


原因二、作者调用的是海内的接口做的QQ登陆模块!(谁也不知道作者什么时候海内就发现了并且封了接口呢?)


  1. <?php

  2. class contactsqq extends contacts
  3. {
  4. var $host = "";
  5. function checkhnlogin( )
  6. {
  7.   $ch = curl_init( );
  8.   curl_setopt( $ch, CURLOPT_REFERER, "http://mail.sina.com.cn/index.html" );
  9.   curl_setopt( $ch, CURLOPT_HEADER, true );
  10.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  11.   curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  12.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  13.   curl_setopt( $ch, CURLOPT_URL, "http://mail.sina.com.cn/cgi-bin/login.cgi" );
  14.   curl_setopt( $ch, CURLOPT_POST, true );
  15.   curl_setopt( $ch, CURLOPT_POSTFIELDS, "&logintype=uid&u=".urlencode( $user )."&psw=".$password );
  16.   $contents = curl_exec( $ch );
  17.   curl_close( $ch );
  18.   if ( !preg_match( "/Location: (.*)\\/cgi\\/index\\.php\\?check_time=(.*)\n/", $contents, $matches ) )
  19.   {
  20.    return 0;
  21.   }
  22.   $this->host = $matches[1];
  23.   return 1;
  24. }
  25. function getvcode( &$result )
  26. {
  27.   if ( !$this->checkhnlogin( ) )
  28.   {
  29.    return 0;
  30.   }
  31.   $ch = curl_init( );
  32.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  33.   curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  34.   curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  35.   curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  36.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  37.   curl_setopt( $ch, CURLOPT_URL, "http://www.hainei.com/finder?a=qqprepare&t=json" );
  38.   $content = curl_exec( $ch );
  39.   $ret = json_decode( $content, true );
  40.   if ( !$ret['status'] != 1 )
  41.   {
  42.    curl_close( $ch );
  43.    return 0;
  44.   }
  45.   curl_setopt( $ch, CURLOPT_HEADER, true );
  46.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  47.   curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  48.   curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  49.   curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  50.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  51.   curl_setopt( $ch, CURLOPT_URL, "http://www.hainei.com/finder?a=qqvfcode&r=".$ret['msg'] );
  52.   $result = curl_exec( $ch );
  53.   curl_close( $ch );
  54.   if ( !$result )
  55.   {
  56.    return 0;
  57.   }
  58.   return 1;
  59. }
  60. function getcontacts( $user, $password, $vcode, &$result )
  61. {
  62.   if ( !$this->checklogin( $user, $password, $vcode ) )
  63.   {
  64.    return 0;
  65.   }
  66.   $ch = curl_init( );
  67.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  68.   curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  69.   curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  70.   curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  71.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  72.   curl_setopt( $ch, CURLOPT_URL, "http://www.hainei.com/finder?a=qqprepare&t=json" );
  73.   $content = curl_exec( $ch );
  74.   $ret = json_decode( $content, true );
  75.   if ( !$ret['status'] != 1 )
  76.   {
  77.    curl_close( $ch );
  78.    return 0;
  79.   }
  80.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  81.   curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  82.   curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  83.   curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  84.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  85.   curl_setopt( $ch, CURLOPT_URL, "http://www.hainei.com/finder?a=qqvfcode&r=E2O6ThebrW7ukCingCu7qw".$ret['msg'] );
  86.   $content = curl_exec( $ch );
  87.   $r = file_get_contents( "http://www.hainei.com/finder?a=qqvfcode&r=E2O6ThebrW7ukCingCu7qw" );
  88.   $cookies = array( );
  89.   $bRet = $this->readcookies( COOKIEJAR, $cookies );
  90.   if ( !$bRet && !$cookies['SWEBAPPSESSID'] )
  91.   {
  92.    return 0;
  93.   }
  94.   $ch = curl_init( );
  95.   curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
  96.   curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  97.   curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  98.   curl_setopt( $ch, CURLOPT_URL, $this->host."/classic/addr_member.php" );
  99.   curl_setopt( $ch, CURLOPT_POST, true );
  100.   curl_setopt( $ch, CURLOPT_POSTFIELDS, "&act=list&sort_item=letter&sort_type=desc" );
  101.   $content = curl_exec( $ch );
  102.   curl_close( $ch );
  103.   $bRet = $this->_parsedata( $content, $result );
  104.   if ( !$bRet )
  105.   {
  106.    return 0;
  107.   }
  108.   return 1;
  109. }
  110. function _parsedata( $content, &$ar )
  111. {
  112.   $ar = array( );
  113.   if ( !$content )
  114.   {
  115.    return 0;
  116.   }
  117.   $data = json_decode( $content );
  118.   unset( $content );
  119.   foreach ( $data->data->contact as $value )
  120.   {
  121.    if ( preg_match_all( "/[a-z0-9_\\.\\-]+@[a-z0-9\\-]+\\.[a-z]{2,6}/i", $value->email, $matches ) )
  122.    {
  123.     $emails = array_unique( $matches[0] );
  124.     unset( $matches );
  125.     foreach ( $emails as $email )
  126.     {
  127.      $ar[$email] = $value->name;
  128.     }
  129.    }
  130.   }
  131.   return 1;
  132. }
  133. }
  134. ?>

复制代码
 楼主| qianway 发表于 2008-10-12 20:02:48 | 显示全部楼层
回复

使用道具 举报

cgisky 发表于 2008-10-12 20:14:16 | 显示全部楼层
嗯 我已开始就发现了  不用dezend就能看到
所以 最好别用密码登陆的  用链接的那个

这个也就网站开始的时候用用    到后来 很多人一起用的话
以uch目前的发邮件的效率 那邮件队列能排上好几万
回复

使用道具 举报

fscool 发表于 2008-10-12 20:50:26 | 显示全部楼层
感觉不厚道。。。。
回复

使用道具 举报

poplong 发表于 2008-10-13 07:32:49 | 显示全部楼层
关注中!~
回复

使用道具 举报

ar嗦 发表于 2008-10-13 08:05:30 | 显示全部楼层
哈哈。我没打算用。毕竟在网站上要人家输入QQ密码。第一感觉就是。。。盗号!
回复

使用道具 举报

ytb0412 发表于 2008-10-13 11:02:24 | 显示全部楼层
回复

使用道具 举报

尐噺_Di調℡ 发表于 2008-10-13 11:20:59 | 显示全部楼层
同意 输密码的坚决不用
回复

使用道具 举报

 楼主| qianway 发表于 2008-10-13 18:58:06 | 显示全部楼层
回来顶顶。
回复

使用道具 举报

zgfuwenke 发表于 2008-10-14 09:55:12 | 显示全部楼层
嗯 我已开始就发现了  不用dezend就能看到
所以 最好别用密码登陆的  用链接的那个

这个也就网站开始的时候用用    到后来 很多人一起用的话
以uch目前的发邮件的效率 那邮件队列能排上好几万
cgisky 发表于 2008-10-12 20:14


真是弱智啊
会有这样的问题

不是因为我是作者就P你们,是因为你们真的很XX,不知道事情的本来面目,现在我做一解释

1, QQ2007用链接取得QQ列表本来就不用输入密码,根本谈不上服务器存储密码.而且这个链接在很短的时间内或QQ退出就会失效,时间为几分钟到十几分钟.
2, 输入密码获取列表输入的密码懂脚本的就可以发现,IE在本地就用验证码跟密码进行了三轮MD5加密,自己下载JS可以看看就明白了.验证码每次都会变,所以发向服务器的密码就算你存下来,根本没有一点用处

所以先研究下,不要在这里瞎搅和,不懂不要装懂

试用版下载地址:
http://www.119w.com/viewthread.php?tid=13&extra=page%3D1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 09:38 , Processed in 0.026902 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表