九零登录

[【通过】] P2P网站用户爬取得一次尝试 --以遭遇数据分析师而宣告失败

[复制链接]
发表于 2015-12-15 16:26:03 | 显示全部楼层 |阅读模式
0x01  检测缘由   
  在wooyun上看到某厂商到现在还只有一个洞,决定尝试一下。该站为P2P网站,安全性自然,我等小菜必须先经过学习再搞。由于自己也有点小工资,所以,先注册了个用户,存了点款进去,以便对其逐步了解。

0x02  对于web的一些初步尝试
      由于是P2P的网站,安全性当然是第一位的。根据信息搜集,他的服务器是北京的阿里云服务器,linux,开启的端口为80,445,22。面对强大的阿里云服务器,我没有一点奢求之心,只得从web页面看看是否存在一定的漏洞。
0x03  找到的几个鸡肋漏洞

       之前在wooyun上看到,某app的密码重置手机验证码居然只有4位。于是我很兴奋的尝试手机密码重置,然而十六位验证码,并且验证码在300s内有效。所以,经过一小部分数据的验证,这个方法并不可行。就在不经意间,我发现了一个bbs,在主目录下,并不是二级域名什么的。DZ x3.2的,我尝试注册,成功。查看自己的用户名,是手机号码,也就是注册这个P2P网站的手机号码。尝试查看别人的用户信息。尝试了几个人用户名都是183****1111这样,中间四位为星号。后来百度了一下,这样的对号码的隐藏是可以通过一个函数实现的。
0x04  对于数据的抓取与操作

  此时此刻,我便热血沸腾,心想如果能将这些用户名抓取下来,再通过注册的时候,是否注册,的接口来进行批量验证呢。多说无益,直接开始用户名的抓取。
  在贴出,代码之前我先说明一下,我的遍历是通过dz中uid参数的遍历实现的。
[Bash shell] 纯文本查看 复制代码
import urllib2
import re
for i in range(39879,40804):          #这两个数是其实与结束的uid
    base='https://www.****.com/bbs/home.php?mod=space&uid='
    x='%d' %i
    url=base+x
    body = urllib2.urlopen(url)
    myfile = open('tem.txt', 'w')             
    myfile.write(body.read())
    myfile.close()
    myfile2=open('tem.txt','r')
    pattern = re.compile(r'.*\d+')
    f=open('result.txt','a')
    lines = myfile2.read().splitlines()
    str = ''
    for i in lines[4]:    #在返回的html中第五行是可以提取用户的
        if i == '*' or pattern.match(i) :  #对于电话号码的判断
            str = str + i
    f.write(str+'\n')
    f.close()    
myfile2.close()


  于是就这样,我很成功的爬出了用户名,对。1W多条用户(上面的数据时候来改过的,因为后来发现每半周就会将近增加1K的用户数)的数据已经在txt中。然而,我发现了非常奇怪的问题,在文件的一些行中,出现了一些空行,或者说一些不符合自己想象中的规则的行。第一反应是,数据包出错了。(自己在单位“小黑屋”实习,网络好的时候同时下片子和游戏,不行的时候连尼玛4399都玩不了)问了问室友,有没有下东西,室友一脸茫然。于是慢慢观察自己所抓取到的用户名。先排除空行不看,看看其他的行,发现一个问题,抓下来的这些出错的行中,他们的确符合我的代码中的判断。于是,我找到该行对应的uid,返回到dz中进行查看,果不其然,注册的账号规律并不是我想象的那么简单,有一部分用户的用户名是千奇百怪,但是,我的代码还是根据我的规则把那些抓取了下来。到这里,我们可以思考一下,我的代码是否有把所有的符合183****1111这样规律的用户名抓取下来呢?答案是肯定的。(很重要的一点是,我抓取用户名的时间是周五晚上)接下来,写了一个脚本来处理那些“杂碎”
[Bash shell] 纯文本查看 复制代码
import re
f1=open('fortest.txt','r')
f2=open('fortest2.txt','a')
for line in f1.readlines():
    if re.search(r'
+', line) and len(line) == 12:
        print len(line)
        print line
        f2.write(line)
f1.close()
f2.close()


  这个脚本是将文本中带有*,并且长度为11的行,写入一个新的文件。
  现在,我们要想遍历出用户名简直轻而易举。(才怪嘞)
     我清晰的记的,我在每天对这个站的各种尝试的时候,发现了一个问题。每当我将我已经注册的电话号码填入表单框之后,鼠标点击下面的输入验证码表单框中时,上面的表单框会立刻输出,此号码已经注册。当然,肯定是js的作用啦,自己想了一下,如果能用这个js的接口来验证账号,岂不美哉。(王司徒乱入)当时其实心里是沮丧的,主站是https的,首先我的burp抓不到包,其次,如果我用fiddler来抓包,电脑必定卡爆。于是问问基友,基友说:“傻逼么,chrome不是自带network么”,我内个擦擦擦,此时的我哭的像个小孩。在这之前,我对源码进行了一定的探究。发现他是如何检测我是否注册的呢,很简单js中一个href=/userExistCheck/。去访问了一下,白板。继续尝试查看network,发现了这样一个请求,
url:http://www.****.com/userExistCheck/18311111111

这不就是检测是否注册的接口么,太牛了(不是说我)。
访问一下,大致就是根据是否注册在html里面返回了true 和 false。这还不简单?当然不简单。试想一下,我们抓下来的数据1W+,然而有四个未知位,所以,每一个电话号码都可能有1W中情况,所以简单的10000*10000
这可是等于一个亿啊,一个亿啊。快赶上我儿子了。
但是,倔强的我还是把这1个多亿的数据给write到了文本里。大小1.2个多G,用notepad是打不开的。这里也把列举这一个亿的数据的脚本给出来吧,慎用

[Bash shell] 纯文本查看 复制代码
fh = open('fortest.txt','r')
fy = open('fortest2.txt','w')
#for line in fh.readlines():
str='183****1111'
str1=str[0:3]
str3=str[7:11]
str2=str[3:7]
for a in range(0,10):
     for b in range(0,10):
        for c in range(0,10):
            for d in range(0,10):
                a1='%d' %a
                b1='%d' %b
                c1='%d' %c
                d1='%d' %d
                str2=a1+b1+c1+d1
                string=str1+str2+str3
                fy.write(string+'\n')
fh.close()
fy.close()


后来由于测试,改了几次,所以大家将就着看吧。

0x05  自己的作死行为     
我当然知道1个亿的数据是非常的大的,不用肉眼,就是阿里云服务器都可以轻易地检测出来。所以我就想,要不咱试几个,然后交wooyun得了,于是,尝试了三个183****1111类似的数据,很幸运,都成功了。而且在某个号段中有两个存在的账户,真是幸运。这是,天色已亮,上床咪了一会儿。
      起床后将脚本放到工作机上,跑着。自己也着手开始向wooyun提交漏洞。卧槽!!!卧槽!!!卧槽!!!晴天霹雳,突然在工作机上发现python报错,404!!!!不相信真相的我来到其注册页面,卧槽,他真的把/userExistCheck/给删掉了。(真是发现友军火箭筒)
0x06  到这里你会以为我结束了
      我会这么快?此时的我真是百感交集,又有对于自己傻逼拖延的后悔与斥责,也有着对目标的咬牙切齿的深恶痛绝,自己信息搜集了大半个星期,持续检测三天,一天只吃一顿饭,精神高度紧张,就因为我发了3W多个包,你就知道漏洞了啦?你就给修补啦?
此时此刻,不得不说自己已经失去理智,毕竟新手,遇到这样的情况很难把控自己。于是自己很想通过各种恶劣的手段来“搞”它。百度一下吧,先看看他招一些什么人。
1.seo主管,这个大家都懂,毕竟P2P
2.客服,我想下手的东西
3.高级客服,也许是特殊服务,不敢想
4.Java高级软件工程师,试着想一想,是否主站是用java或者某些java框架搭建的呢?嗯,看了些招聘要求,没有什么特别
5.Android软件工程师,我知道的,他们有app,我还尝试过逆向
6.数据分析师,数据分析师,数据分析师!!!我看到这个数据分析师,我之前一直以为是跟金融那块儿有关的,点开看看要求,我的个乖乖。

1、实现收集客户访问日志,建立流量监控和分析指标体系,建设金融电子商务网站的数据分析平台,为公司运营部、产品部提供数据报表支持;协助运营部修改运营方案;
2、支持日常运营和销售数据分析、进行流量分析、转化率分析等,通过数据分析提出改善关键流程、提升转化率、减少流失建议方案,维护公司运营指标体系,针对各个业务线建立数据分析模型,书写专业的数据分析报告;
3、定期进行数据分析报告撰写及数据汇报工作;
4、数据建模:收集数据分析需求,设计数据分析、数据挖掘模型;
5、BI系统建设:对用户进行精细化分析,主导用户模型设计。

这些就是要求。
要是说我被阿里云打败了,我服。但是半路杀出个数据分析师,并且貌似还很专业,是在下输了,但是我不服。

0x07  后话
       这次我是真结束了,结束之前总结一下吧。对于P2P网站小弟还是第一次尝试。并且也是第一次尝试这么多脚本一系列的编写,自己的进步是挺大的。也从中学到了很多。真的很多,比如对于js源码的分析,对于数据量的计算尝试,还有就是数据分析师。其实到现在我是这样认为的。他检测到了我对/useExistCheck/的请求,然而这些请求只是单独的请求,并没有伴随着用户的真正注册。并且,这些请求的号码如此有规律,一看便知,我在被搞。马上联系开发,改代码!!!!!!


=======================================================
虽然没有成功,不过一次一次的尝试很值得学习,通过!






评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

 楼主| 发表于 2015-12-15 16:26:25 | 显示全部楼层
我是基佬,自豪,自豪
发表于 2015-12-15 18:11:38 | 显示全部楼层
欢迎加入90!
发表于 2015-12-15 18:37:23 | 显示全部楼层

欢迎加入90!
发表于 2015-12-15 19:42:04 | 显示全部楼层
欢迎加入90!
发表于 2015-12-15 20:19:45 | 显示全部楼层
欢迎加入90!
发表于 2015-12-19 20:57:41 | 显示全部楼层
学习了

九零

GMT+8, 2026-10-22 12:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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