打造Mac下APK逆向环境到实战接口XSS挖掘

前言

想尝试逆向APK来发现一些接口和安全问题,但是Mac下没啥好用的APK逆向工具,于是我就参考文章:https://blog.csdn.net/jyygn163/article/details/71731786 的思路在Mac下使用homebrew安装:

brew install apktool
brew install dex2jar

JD-GUI去http://jd.benow.ca/下载,这里我是用的是jar版。

过程

自动化编译

手动敲命令太繁琐了,写个shell脚本一键化。

.bash_profile文件(环境变量)加入这个命令alias apkdec="/Users/chen/HackBox/Tools/Android\ Decompile/DeApkScript.sh",这样当终端打开的时候就可以使用apkdec命令了,而脚本DeApkScript.sh的内容如下:

apktool d $1 && mv $1 $1.zip && unzip $1.zip "*.dex" -d $1_dex/ && cd $1_dex/ && d2j-dex2jar *.dex 

功能实现如下:

这样,最后只需要使用JD-GUI反编译JAR即可看见源码了。

实战

运行命令:

apkdec xxx.apk

apkdec

首先对classes-dex2jar.jar文件进反编译,但似乎在Mac下JD-GUI支持的不太好,所以我选择使用luyten(Download:https://github.com/deathmarine/Luyten/releases),如下是两张对比图:

apkdec

漏洞挖掘

在luyten下使用Command+G快捷键全局搜索,搜索域名寻找接口(因为这个APP需要内部人员才能登录所以从正常的入口是无法找到接口进行漏洞挖掘的)

search

寻找了一番看见这样一个接口:

api

二话不说访问之,提示:

{"res_code":"-1008003","res_message":"参数错误","timeMillis":1542516229723}

不懂Java的我一脸懵,但是天下语言都是互通的,大概的了解了代码的意思(可能理解的不到位,就不说出来误导了),于是找到这样一个函数:

function

从我的理解来看这个接口就是有这两个参数appId、userName,于是加入GET请求参数中请求:

Request:
?appId=123&userName=123
Response:
{"res_code":"0","res_message":"成功","timeMillis":1542516495613,"extData":null,"data":[{"appId":"123","permissionTag":[""],"extData":null}]}

其中appId的参数值返回在了页面中,该请求响应报文Content-Type: text/html,所以尝试构建XSS,运气好,确实也存在XSS问题:

alert

总结

学习、不断的学习。