深入挖掘APP克隆实验

0×00前言

在上一篇文章《WebView域控不严格读取内部私有文件实验》中,对webview跨域访问进行了简单的实验,后续决定深入挖掘一下APP克隆,之前文章中讲过的这里也将不再赘述。

0×01实验环境

基础环境:win10,Android studio 3,eclipse(androidserver 开发),ubuntu12(hackserver)

模拟器:

image.png

要开发APP:AppClone,AttackAPP,StartClone

1、Androidserver

image.png

Login.jsp:根据用户名密码判断是哪个用户然后返回一个token给安卓端

Myinfo.jsp:根据token判断是哪个用户,然后返回其个人信息。

Code区域:以上代码比较简单,大家可以自行编写或在网上找一段改改,这里就不占地方了

2、Hackserver

image.png

Code区域:

Receve.php主要用来接收APP传过来的token,并保存到newfile.txt中。

 

sendToken.htm用来读取shared_prefs下保存的token并发送token到hackserver。

 

3、AppClone

image.png

被克隆的APP,mainactivity用于登录,successactivity显示登录成功后的个人页面。

Code区域:

 

4、AttackAPP

image.png

Httpdownloader负责下载文件,Fileutil负责写文件,整个APP的功能是从hack.com上下载的sendToken.htm保存到/sdcard/Download/目录下,下载完成然后在调起被克隆的APP,让被克隆的APP加载sendToken.htm,从而把token发送到hackserver服务器上。

Code区域:以上代码比较占地方,网上也很多,大家可以自己下一些改改就可以了。

image.png

5、StartClone

image.png

此APP就一个mainactivity,功能是从hackserver获取newfile.txt中保存的token,然后带着token从外部调起APPClone,从而实现克隆。

Code区域:以上代码大家可以网上搜搜自己改改就可以了。

image.png

0×02 实验内容

克隆基本思路

User3手机

1、 当启动AppClone时,先判断shared_pfres下有没有用户登录的token,如果有则直接进行successactivity,如果没有则在mainactivity中输入用户名密码进行登录,登录成功保存token。这里使用zhangsan登录。

2、 启动attackapp,主要功能是下载hackserver上sendToken.htm并保存到/sdcard/Download/目录下,等下载完成,对appclone发起外部调用,让successactivity加载/sdcard/Download/sendToken.htm把token传输到hackserver上,hackserver收到token后保存到newfile.txt中。

User4手机

1、 启动AppClone并使用lisi账号登录。

2、 启动startclone,startclone会请求newfile.txt里的token值,然后使用这个token从外部调起APPClone,直接让successactivity接收到的token为zhangsan的token,进而登录张三的个人信息页,从而实现克隆。

0×03 实验步骤

1、启动两个虚拟机:

user3是被克隆的手机,装有两个app(AppClone,准备被克隆的APP,AttackAPP,发起攻击的APP)

user4是用来克隆的手机,装有两个app(AppClone,准备被克隆的APP,StartClone,开始克隆)

image.png

2、启动user3上的Appclone,并使用zhangsan登录,登录成功后会进入个人信息页面

image.png

image.png

3、启动user4上的Appclone,并使用lisi登录,登录成功可以看到张三和李四的个人信息页面里的钱是不一样的。

image.png

4、在user3上启动AttackAPP ,这里hackserver上的newfile中是没有数据的

image.png

点击开始攻击后数据被上传到hackserver,点击查看文件内容,可以看到被写入的token

image.png

5、运行startClone后,可以看到user4的手机也变成了张三的登录状态,克隆成功。

image.png

0×04 修改代码

1、如果不开启setJavaScriptEnabled,那么sendToken.htm将无法执行其中的js代码,也就无法将token发送到hackserver上。

image.png

2、本来看文章说是在js中访问file:///要开启setAllowFileAccessFromFileURLs(true),但是实验下来不需要也可以。

image.png

3、如果把setAllowUniversalAccessFromFileURLs(true)也注释掉则token传输失败,也就是说不开启它则无法把数据传输给远程服务器。

image.png

0×05 实验中遇到的问题及解决思路

1、 sd卡写入权限问题,一开始使用的虚拟机是安卓8.0在AndroidManifest申请好权限,但是无论如何也写入不成功,后来一查发现安卓6.0后需要在代码中动态申请权限,经过尝试之后发现很程度很容易崩溃,一定是我不懂开发的原因,转而换成安卓5.1的虚拟机,直接在AndroidManifest申请权限就可以了。

2、 未开启js访问,无论如何token都不能发送成功,然后把js删除发现htm确实被加载了,想到很有可能是这个原因,于是补上了webSettings.setJavaScriptEnabled(true);问题解决了。

3、 网络访问(下载)需要异步请求,不然程序也会出问题。

0×06 修复建议

通过实验发现做到以下几点,都可以防范:

1、webview不开启webSettings.setJavaScriptEnabled(true);

2、webview不开启setAllowUniversalAccessFromFileURLs(true)

还有之前文章中提到的:

1、 设置activity不可被导出

2、 禁止WebView 使用 File 协议,而且是明确禁止

 

转载自:http://www.freebuf.com/articles/terminal/161277.html    原文作者:烟波渺渺正愁予