前言

偶然间看到的一篇漏洞分析报告,觉得挺有意思的,而且靶场的环境都还在,所以自己也来复现一把,体验下如何进行app的漏洞挖掘!

开始

获取目标

靶场的入口地址
首先是一个web页面可以看到是一个妹子,而且给的提示已经很直接了,注意一下哦,这是app的漏洞挖掘哦,所以找一下网站下是否有app
kali下进行目录扫描,不过查看源代码便可以看到app的下载路径

不破不立的app逆向-复现

分析测试

接下来我们就需要对该app进行一个逆向分析,目的是什么呢?是为了获取该app管理用户的后台,那么如何通过一个app开始逐步的进行分析呢?接下来可以跟随着我的脚步,一起探究从一个app到管理后台的刺激体验。

jadx-gui

首先使用jadx-gui进行反编译,看到attachBaseContext基本上可以确定该app是加壳了。

不破不立的app逆向-复现

然后我们可以使用ApkScan-PKID简单的查看一下什么厂商的壳

不破不立的app逆向-复现

360加固,还好不是企业壳,应该能脱,手动脱壳太过繁琐,能用工具尽量用工具,关于360加固,我立马想到了四哥的一篇文章,这里介绍到了一个开源工具drizzleDumper,用法也很简单,只需在一个root的设备上使用即可。
drizzleDumper github上只有源码,自己编译又非常容易出错,所以在网上找到了别人已经编译好的工具。
链接: http://pan.baidu.com/s/1hr49HBI 密码: 6bgv

本来我不想写脱壳过程的,不过正好我这是新mac,环境都还没配置好,所以索性也记录一下过程

adb install *.apk 安装app包
adb push drizzleDumper /data/local/tmp将工具push到手机上
在使用工具前我们必须知道应用程序的包名,有两种方法

  1. 使用aapt 如下命令 aapt dump badging app.apk | grep package

不破不立的app逆向-复现

关于aapt这是SDK的工具,只需配置一下环境变量,便可以在终端上使用了。
mac上设置环境变量参考这篇文章
2. 使用 Android ***** tools

不破不立的app逆向-复现

非常不幸的是脱壳失败了,我怀疑是因为我的手机版本较高,尽量在Dalvik模式下而不是ART,也就是说我们测试的机型android版本最好在4.4一下,但是我又遇到了麻烦在4.4的手机上提示sdk版本太旧,一阵无语,感觉是没有办法再进行下去了,但是既然给自己定下了目标,在困难也要去完成它。

~~ 脱壳暂时先跳过 ~~

假设这里已经成功脱壳,那么我们很快的可以定位到登陆函数,从中可以找到测试账号,我们使用测试账号进行登陆,继续后续的渗透测试。

摸爬滚打

经历了多次尝试我终于成功利用drizzleDumper工具进行脱壳?
这里我记录一下我的尝试过程。
起初drizzleDumper无法使用,我便去网上找寻其他脱壳工具,最后找到了ZjDroid.apk但是最终还是失败了,实在是搞不懂原因,毕竟android的底层机制没怎么了解过。
不甘心的我,又开始使用avd模拟器进行尝试,首先我创建了andrid 4.4的镜像,安装apk时提示目标sdk版本太低,所以这就推翻了我之前的猜测。
于是我便又创建了一个android 8.0(api 28)的镜像,成功安装运行,但是在上传图片的时候程序直接崩了,这明显是不正常的现象。同时当我尝试使用drizzleDumper进行脱壳时,出现如下报错。

不破不立的app逆向-复现

看来我们需要使用android api 23的镜像进行测试,我感觉我离成功仅仅之差一步了,最后我在api-23上成功的脱壳,并继续接下来的渗透测试!?

不破不立的app逆向-复现

你真的是个魔鬼?

前往

渗透测试

测试账号 [email protected] 密码 El12LjSIe5Sl,以及一些没有密码的账号,这也许会对下面的测试提供帮助。
[email protected] [email protected] [email protected] [email protected] [email protected]

由于我是在自己的手机上进行测试,所以截屏比较麻烦,也就写了个简单的sh,快速的将屏幕截取到本地。

#! /bin/bash
path=$(pwd)"/"$1
echo $path
adb shell screencap -p /data/local/tmp/$1
adb pull /data/local/tmp/$1 .
echo "Done!"

不破不立的app逆向-复现

简单查看了一下,也就只有实名认证的地方可以进行点击,尴尬?的事情又发生了,当我尝试上传图片时,程序直接崩溃退出了,真的是很无语?
至此我已经无法继续进行下去了。

继续前进

天无绝人之路,经过上面?的一番折腾之后,我们终于能够继续下一步的测试了。
adb pull /data/local/tmp/com.example.laravelchen.toutiao_dumped_88.dex .

dex文件拖到本地,然后使用jadx反编译查看。

不破不立的app逆向-复现

可以看到这个登陆注册方法,主要是通过一个Frame进行的,根据包名继续搜索查看?。

不破不立的app逆向-复现

OK!我们也得到了和作者相同的结果,这是必然的,只不是过程有点坎坷,你要知道接下来你需要面对更大的困难。

我们使用测试账号进行登陆,接下来进入到上传图片的环节。
我觉得这个测试的app不是很友好,上传图片时因为权限的问题直接退出了,我在设置中,赋予了它所有权限,这样他才能正常的运行下去。

不破不立的app逆向-复现

由于其他按钮均不可用,所以很明显该案例就是在引导我们进行上传。

不破不立的app逆向-复现

仅仅靠前端信息我们是没办法进行下去的,很明显我们需要进行抓包。

抓包又是一个十分折腾人的事情啊

这么折腾一下又是一个下午,心力憔悴了,?
首先是这个AVD模拟器设置代理,需要从命令行启动AVD,可以参考文章一文章二
主要是两行代码:
emulator -list-avds emulator -avd <name> -http-proxy http://<local-ip-address>:<port>
然后是用哪个工具进行抓包,纠结了好久,毕竟对于android更常用的是CharlesFiddler,况且mac版的BP我找了好久,终于找到一个能用的(要求不高能用就行)

关于BP如何设置代理可以参考这篇文章

经过重重阻碍,我终于抓到了数据包。

不破不立的app逆向-复现

真的是每当我快要放弃的时候,又给了我希望,希望我能继续的完成下去,走完这一路?
BP我不太会用,感觉后面将会是狂风暴雨!但我迎接挑战!?

我们使用测试账号进行上传,但是返回“测试账号无权限请求”

不破不立的app逆向-复现

就像WP中所写的,我们应该能联想到那些没有密码的账号中,应该是某种提示,否则我们只能通过**来得到用户名了。
临时学习了一波如何进行重复发包(不知道是不是这么叫?)

不破不立的app逆向-复现

可以看到pockr用户的返回成功的引起了我的注意⚠️,并且根据这个提示,我们可以很容易联想到是不是此用户的签名,相对应的也就是该用户的密码,因为通常来说,某个用户会对应一个自己密码的签名,在提交的时候,很有可能回去验证该签名,同时我们注意到在提交时的这两个参数。

不破不立的app逆向-复现

我觉得有必要去全局搜索一下signature和timestamp了,也许会有什么惊喜的发现。
不破不立的app逆向-复现

最终定位到submitPicture方法

不破不立的app逆向-复现

可以看到上传的类型仅支持jpeg gif svg xml,并且在上传时校验了time 和 signature,主要是在这里

不破不立的app逆向-复现

signature=time+name+"rkcop",为了验证我的想法?,我简单写了一个验证过程,这是正确的,这可棒极了!

不破不立的app逆向-复现

所以根据时间戳,我们计算出pockr用户的signature为``,然后重新进行提交,很明显,按道理来说提交实名认证是成功的。

不破不立的app逆向-复现

emmmmm,说实话接下来我不知道该怎么做了,只能参考这wp接着复现了,web真的是一窍不通。
照着文章里说的,应该只有svg能成功上传,但是我这里第一次提交jpeg也能成功,?有点魔性。
这个xss我真的是做不下去了,这到底是什么意思,天呐!你是魔鬼么?

https://wm.xss.ht/这是上传的xss的网站,感觉代码像是会返回什么东西,但是我看不到任何返回。
确实是写不下去了,暂时先搁着了,毕竟还有需要其他的事情。
如果有会的师傅,希望能联系一下我105794729*,最后一位随缘。

xss攻击

有待补充

感觉后面需要一个web手?,我还是退下吧!

总结

未完待续>>>等待着你…
参考文章

相关文章: