发布新话题与讨论建议及审查说明
欢迎发布有讨论和阅读价值的话题;不欢迎嘲弄宗教、种族、地缘、性取向等话题。
推崇布拉格公民论坛《对话守则》:对话的目的是寻求真理,不是为了斗争;不做人身攻击;保持主题;辩论时要用证据;要分清对话与只准自己讲话的区别;尽量理解对方。
遵循《世界人权宣言》第十九条不对用户已发表言论进行删除处理;用户有权限删除本人已发表言论;编辑会合并重复话题。
发新话题
收藏 订阅 推荐 打印

Discuz 7.0 被曝通过后门抓取用户数据

Discuz 7.0 被曝通过后门抓取用户数据

http://www.sunboyu.cn/2009/12/10/discuz-hole.shtml

使用开源产品,的确能加快我们的产品实现进度,我们也感谢那些提供免费开源产品的人。当然,我个人也喜欢开源技术。

但如果开源的产品中给你下个后门,抓取你的数据,你还能高兴么?

现在分析 discuz 7.0 的几段代码:
复制内容到剪贴板
代码:
   1. if($adminid == 1 && $action == 'home') {
   2. echo '<sc '.'ript language="Jav'.'aScript" src="ht'.'tp:/'.'/cus'.'tome'.'r.disc'.'uz.n'.'et/n'.'ews'.'.p'.'hp?'.bbsinformation().'">';
   3. //echo '</sc><sc '.'ript language="Jav'.'aScript" src="http://localhost/com/n'.'ews'.'.p'.'hp?'.bbsinformation().'">';
   4. }
   5. </sc>
恩,看见了没,我告诉大家一个写木马常用的方式 eval ,比如asp中查找木马,通常查找fso等关键字,木马一般都给他写成 eval(’f'+’s’,'o’),写php的应该很熟悉这个函数了。这段代码当然不是木马,咱看看他具体做了什么:
复制内容到剪贴板
代码:
   1. function bbsinformation() {
   2.  
   3. global $db, $timestamp, $tablepre, $charset, $bbname, $_SERVER, $siteuniqueid, $save_mastermobile, $msn;
   4. $update = array('uniqueid' => $siteuniqueid, 'version' => DISCUZ_VERSION, 'release' => DISCUZ_RELEASE, 'php' => PHP_VERSION, 'mysql' => $db->version(), 'charset' => $charset, 'bbname' => $bbname, 'mastermobile' => $save_mastermobile);
   5.  
   6. $updatetime = @filemtime(DISCUZ_ROOT.'./forumdata/updatetime.lock');
   7. if(empty($updatetime) || ($timestamp - $updatetime > 3600 * 4)) {
   8. @touch(DISCUZ_ROOT.'./forumdata/updatetime.lock');
   9. $update['members'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}members");
  10. $update['threads'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}threads");
  11. $update['posts'] = $db->result_first("SELECT COUNT(*) FROM {$tablepre}posts");
  12. $query = $db->query("SELECT special, count(*) AS spcount FROM {$tablepre}threads GROUP BY special");
  13. while($thread = $db->fetch_array($query)) {
  14. $thread['special'] = intval($thread['special']);
  15. $update['spt_'.$thread['special']] = $thread['spcount'];
  16. }
  17. if($msn['on'] && $msn['domain']) {
  18. $update['msn_domain'] = $msn['domain'];
  19. }
  20. }
  21.  
  22. $data = '';
  23. foreach($update as $key => $value) {
  24. $data .= $key.'='.rawurlencode($value).'&';
  25. }
  26. return 'update='.rawurlencode(base64_encode($data)).'&md5hash='.substr(md5($_SERVER['HTTP_USER_AGENT'].implode('', $update).$timestamp), 8, 8).'&timestamp='.$timestamp;
  27. }
看见了吧,看他提交的几个关键字段:$update['members'],$update['threads'],$update['posts'],$thread['special'],$update['spt_'.$thread['special']],$update['msn_domain'], 这些字段提交过去,也许对我们系统安全并无影响,可看看6.0版本的论坛还提交了什么:

uniqueid=**&version=6.0.0&release=20081117&php=5.2.6&mysql=5.0.22&charset=utf-8&bbname=**&mastermobile=****&members=4965&threads=883&posts=25921&spt_0=879&spt_1=4&

mastermobile 看见这个字段你会汗不?

康盛应该为此行为买单不?不会 。

看下边:
引用:
    III 有限担保和免责声明
    1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。
    2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未购买产品技术服务之前,我们不承诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任。
    3. 康盛创想(北京)科技有限公司不对使用本软件构建的论坛中的文章或信息承担责任。
您必须了解使用本软件的风险–用户了解信息泄露的风险么?
康盛创想(北京)科技有限公司不对使用本软件构建的论坛中的文章或信息承担责任。其实,我也不愿意承担。

本文纯属月经文,如有难受,过几天自然恢复。
http://www.sunboyu.cn/2009/12/24/discuz-hole-2.shtml

自打上篇文章 康盛,这么做是不是有点过火了发表后,引起很多朋友讨论。有些朋友从技术上抨击了这种做法,有些朋友从商业上去理解这种做法。当然,我们是搞技术的,单纯从程序安全和数据安全上来分析一下。
老样子,后台有个get提交:
http://u.discuz.net/customer/upd ... B%7D&h=aa380aa3
urldecode并且反序列化,得出这么一堆东西
复制内容到剪贴板
代码:
Array
(
    [sitekey] => f270e28a8b0Qv1Y8
    [version] => 2.0
    [release] => 20090825
    [php] => 5.2.6
    [mysql] => 5.0.22
    [dbsize] => 1298163
    [charset] => utf-8
    [sitename] => 我的空间
    [feednum] => 10
    [blognum] => 0
    [albumnum] => 0
    [threadnum] => 0
    [sharenum] => 0
    [commentnum] => 0
    [myappnum] => 4
    [spacenum] => 3
)
sitekey是什么?通过阅读代码,sitekey是pre_config表里一个字段,跟以下代码配合工作
复制内容到剪贴板
代码:
$hash = $_SCONFIG['my_siteid'].'|'.$_SGLOBAL['supe_uid'].'|'.$appid.'|'.$current_url.'|'.$extra.'|'.$timestamp.'|'.$_SCONFIG['my_sitekey'];
它跟manyou服务器配合,才有权从你的服务器上拉取你数据库中的某些信息。
其他字段,我们看字面意思基本也能知道是干啥用的。
继续运行程序,我们看当一个用户第一次安装应用的时候做了什么。
这个信息要从服务器上截取,我是根据nginx日志和程序中截取反馈信息获得的。
服务器日志:
复制内容到剪贴板
代码:
124.238.249.171 - - [24/Dec/2009:20:02:40 +0800] "POST /uhome/api/my.php HTTP/1.0" 200 192 "-" "myop/1.0" "-"
manyou服务器发来post请求。post信息不会在日志里,底下是我抓取来的信息:
复制内容到剪贴板
代码:
[post] => Array
                 (
                     [module] => Users
                     [method] => getInfo
                     [sign] => 271ce9942c94fc4f4d39445e133105bc
                     [params] => a:1:{s:4:\"uIds\";a:1:{i:0;s:1:\"3\";}}
                 )
做过sns网站应用开发的应该很容易看懂底大概是什么意思。
看看我们的程序给manyou平台返回了什么信息:
复制内容到剪贴板
代码:
[result] => Array
                 (
                     [0] => Array
                         (
                             [uId] => 3
                             [handle] => sunboyu1
                             [action] =>
                             [realName] =>
                             [realNameChecked] =>
                             [gender] => unknown
                             [email] => [email]dfafdasf@123.fdsafds[/email]
                             [qq] =>
                             [msn] =>
                             [birthday] => 0000-00-00
                             [bloodType] => unknown
                             [relationshipStatus] => unknown
                             [birthProvince] =>
                             [birthCity] =>
                             [resideProvince] =>
                             [resideCity] =>
                             [viewNum] => 0
                             [friendNum] => 0
                             [myStatus] =>
                             [lastActivity] => 0
                             [created] => 1261655045
                             [credit] => 25
                             [isUploadAvatar] =>
                             [adminLevel] => none
                             [homepagePrivacy] => public
                             [profilePrivacyList] => Array
                                 (
                                 )

                             [friendListPrivacy] => public
                         )

                 )

             [mode] =>
有了这些数据,我又注册了一个号码,把资料填全,看看是不是都被抓走:
复制内容到剪贴板
代码:
[result] => Array
                 (
                     [totalNum] => 0
                     [friends] => Array
                         (
                         )

                     [me] => Array
                         (
                             [uId] => 4
                             [handle] => sunboyu2
                             [action] =>
                             [realName] => 一个程序猿
                             [realNameChecked] => 1
                             [gender] => male
                             [email] => [email]1231231@fdsfdsa.com[/email]
                             [qq] => 176300676
                             [msn] => [email]sunboyu@gmail.com[/email]
                             [birthday] => 2004-02-01
                             [bloodType] => B
                             [relationshipStatus] => single
                             [birthProvince] => 北京
                             [birthCity] => 东城
                             [resideProvince] => 黑龙江
                             [resideCity] => 佳木斯
                             [viewNum] => 0
                             [friendNum] => 0
                             [myStatus] =>
                             [lastActivity] => 1261657227
                             [created] => 1261657100
                             [credit] => 40
                             [isUploadAvatar] => 1
                             [adminLevel] => none
                             [homepagePrivacy] => friends
                             [profilePrivacyList] => Array
                                 (
                                     [relationshipStatus] => friends
                                     [birthday] => friends
                                     [bloodType] => me
                                     [birthPlace] => public
                                     [residePlace] => public
                                     [qq] => me
                                     [mobile] => public
                                     [msn] => public
                                 )

                             [friendListPrivacy] => me
                         )

                 )

             [mode] =>
         )
差不多基本资料都过去了。
这样,可以看出,康盛的服务器不断得在抓取用户的信息。这个事情是不是过火,从商业的角度,是应该很过火的。他把用户产品内的账号信息等关键东西都抓走,这些信息到他们手里,难免会交易给竞争对手。
但是,从技术上讲,康盛的manyou服务器还有个缓存的功能。如果拉取用户信息这个请求都放在网站的服务器上,我相信大多数虚拟主机的用户会不堪重负,而康盛其实为这些负载买单了。买单的结果,就是你得把用户的信息提供给康盛。就这么简单。
从程序安全上讲,你的数据库信息,尤其用户信息,在你的网站和manyou之间共享,而康盛没有拉走用户或者管理员资料,也没有发现其他信息的提取,所以,两者之间是安全的。第三方网站是无法获得这些资料的。
但从商业安全上讲,康盛的服务器是否可信?康盛是否会拿这些信息作一些站长不希望做的事情?这个只能由官方来解释了。
睡一觉,研究其他产品去。

扩展阅读

很好。。QQ上抓获异见者的几率增加了。。。
有幸看到活的1984第一帅锅袈裟童鞋,但是沙发被抢...
我D会更有效地监控论坛
凡是纯国内的产品,甭管是不是开源,一律不能信任——这都快成为常识了
嘿嘿,这下该明白“狗日的”并非浪得虚名了吧。

企鹅能有今天,其背后不排除有黑衣人在狞笑~~~^_^
应该介绍几款国外的论坛程序,当然要支持中文化
还好国内的注册全部都乱填,问题在于国外有多少是使用Discuz的?
袈裟能把1984修改版的discuz程序文件给我一份么
dz 用5.0改改吧  5.0至少還沒有什么  只要以上sns我就懶得看代碼

回复 11楼 流逝的古典 的话题

同求
phpbb负载不理想,推荐punbb和esotalk
小组的用户数据会不会被窃取?

回复 17楼 偶佯疯 的话题

小组用的应该是6.x
我记得站方说代码改过了,这一点还请袈裟确认

回复 18楼 02304H 的话题

09年时做了较大修改
终于知道了小组是用DZ的,哈
了解一下,谢谢
被腾讯收购了就是不一样
发新话题

快速回复主题

 

[完成后可按 Ctrl+Enter 发布]  预览话题  恢复数据  清空内容

顾问:莫之许、北风、不锈钢老鼠、温克坚、艾未未、冉云飞、安替、崔卫平、闾丘露薇、章立凡 形象代言:宋石男 法律顾问:浦志强
编辑
:张书记、上肛上腺、抑扬、musicool、王祖贤、alix001、核子力量、四夕亚日、炽鸢侯、木火
技术:库存袈裟、麦圆、散光