我们接下来会通过一次网安渗透测试项目,来跟大家聊聊怎么样通过APP与做事真个结合,getshell。希望通过这个案例,能给大家在app渗透测试过程中起到一个抛砖引玉的浸染,见招拆招,百步穿扬。
由于客户给了我们明确的测试范围,且重点哀求获取做事网权限,以是我们前期做了各种信息网络。个中有一点较为主要,便是创造了内部员工利用的一个邮件类的app,我们也希望以此为打破口,终极拿到做事器的权限。
1、 绕过SSL Pinning抓包
拿到这个APP后,我们首先做出了一个大胆的假设:其内部利用的客户端在安全防护上是否较弱呢?
于是我们当机立断,打算直策应用Burp抓包,找到利用点落后击做事端,利用干系漏洞一步到位,Get Shell。
然而,经由考试测验创造,客户端对证书进行了校验,burp竟然没法抓包。起步就碰着了阻碍,以是,我们先得办理抓包问题。
证书验证紧张有两种办法,分别为双向校验、单向校验。而双向校验一样平常存在于银行、金融等app中,所以为了提高攻击效率,我们假定其为单向校验,并考试测验绕过。
该案例我们借助了JustTrustMe,非常幸运的是通过该插件,我们绕过了证书校验。但是在这里又碰着一个问题:我们抓到的包都是加密的。如下:
由于要乞降相应数据包都进行了加密,并且利用同样的数据进行要求的时候,每次密文都不一样,很显然,数据加密密钥是动态变革的。此处的阻碍让我有点方了。
如果客户端实现了OTP加密事理的话,客户端是须要存有非对称算法如RSA 的公钥的。做事端存有非对称算法的私钥,客户端采取自身天生的对称加密密钥如AES来加密信息内容,然后将此对称密钥用做事真个公开密钥来加密之后,将它和加密后的信息一起发送给做事端。做事端先用相应的私有密钥打开数字信封,得到对称密钥,然后利用对称密钥解开加密信息。
但是,抓包过程中创造,它首先有一个从做事端获取密钥的过程。创造每次要求前,客户端都要向做事端发送要求,获取Key。从加密数据本身看,貌似是RSA。由此推测它的一次一密不是数字信封的办法。那么接下来,破解它的加密逻辑就迫不及待了。
以上步骤是绕过证书校验进行数据抓包。我们可是站在正义的角度看看客户端客户端证书校验威胁噢
Tips:如果客户端在与做事端通信的过程中没有对传输的数据进行保护与完全性校验,并且未做任何的证书校验,这将直接导致中间人攻击,可重复发送截取到的要求报文,并不雅观察和剖析做事真个反应,实现进一步的攻击。
常用的工具有Wireshark、Burpsuite、Fiddler和Charles等。
2、反编译剖析加密逻辑
我们通过反编译APK文件,考试测验去定位加密函数,看能否破解上述网络要求中的加解密逻辑。 但是我们反编译后创造APK被加了壳。
那么我们见招拆招,利用FRIDA-DEXDump进行脱壳,且成功的拿到dex文件。
通过对脱壳拿到的dex文件进行反编译,定位getkey要求进行剖析对应的加密逻辑。
剖析定位加密到函数如下:
经由严密剖析,创造这个APK加密逻辑是这样的:
客户端先发送要求获取对称算法AES密钥,但是AES密钥利用做事真个RSA私钥进行加密了,客户端通过RSA公钥解密后得到AES密钥。对交互数据进行加密。并且,从解密包数据看,没有署名如sign字段,传输没有进行署名校验,这让人以为有些欣喜。
通过上述代码,我们找到了RSA加密利用的公钥,创造有公钥解密的函数,这个时候,我们可以通过考试测验调用公钥解密函数,编写对应的解密脚本。得到AES密钥与向量。
我们通过脱壳、反编译,拿到了java core代码,成功破解了数据包加解密逻辑。接下来可以进行漏洞挖掘。但是在客户端安全方面,上述过程还可能会碰着反调试、反HOOK、完全性校验、重署名检测等威胁。
Tips:运用通信数据加密加签:为了防止数据被修改,客户端和做事端一样平常对交互数据进行加密。常见的加密办法为,非对称加密、如利用RSA。对称加密如,DES、AES等等。
但是纯挚的对称和非对称都存在一定的安全风险,以是在对加密算法的利用中,一样平常采取对称加密结合非对称加密结合的办法,也便是数字信封进行数据通报。担保了数据传输的安全。并且在通报过程中,对数据利用非对称算法进行署名验签,避免数据在传输过程中被修改。
运用调试:在运用逆向剖析的过程中是静态剖析与动态调试相结合的,个中静态剖析便是上面所说的代码反编译。运用调试便是动态剖析的一种主要的办法,这里紧张是基于无源码进行调试,这里分为SO调试与smali调试,个中SO调试紧张利用的是GDB、LLDB、IDA pro等工具,调试smali利用的是IDEA、AndroidStudio等合营Smalidea插件进行调试。
HOOK:紧张是基于动态剖析与静态剖析后,找到运用的关键代码位置,通过HOOK插件拦截关键代码调用,获取参数信息或修改函数调用等。hook的工具紧张有Xposed、Cydia、Frida等,个中自己编写native hook代码,合营注入的办法进行实现。
代码反编译:代码反编译便是将APK中包含的各个文件,根据其固定的格式,从二进制反编译成可查看的代码,与正向开拓是相反的操作,反编译的紧张工具有apktool、Androidkiller、jeb、jadx、smali/baksmali、IDA pro等等。
二次打包:每一个Android运用程序都会有一个数字署名信息,在Android系统安装运用的时候会对数字署名信息进行校验,如果运用没有对其署名进行校验,那么就存在二次打包的问题,造成运用被修改,植入木马等。署名工具紧张有jarsigner、apksigner 等。
3、创造注入点
由于该客户端是内部职员利用,考试测验注册账户,没有注册成功,创造须要管理员审核通过才能上岸。爆破无果,经由抓包解密,修正数据包进一步测试,再次解密返回数据包,创造登录处存在SQL注入漏洞,而且是报错型注入。
经由手工注入,Payload如下:
Request:
获取密钥:
解密密钥:
登录要求包:
登录相应包:
Response: 解密登录相应包:
Tips:
中间人攻击:数据传输方面紧张是在运用与做事端进行数据交互时产生的安全隐患,可能存在信息透露、传输数据修改、要求重放攻击等。
如果运用在与做事端交互传输数据的过程中,未对数据进行加签、完全性校验,传输数据就随意马虎被修改,在结合OWASP Mobile TOP10中的漏洞就可以对做事端进行攻击。例如通过文件上传漏洞,sql注入漏洞等获取做事真个数据,乃至于拿到做事真个shell。
后面的实例便是通过修改传输数据,结合安全漏洞获取的shell。
4、dump用户数据
经由手工注入,多次布局sql语句,获取部分用户的账户和密码:
Request
要求:
相应包解密:
用注入出来的数据成功登录APP。
5上传Get Shell
获取到用户数据后,我利用了个中某员工的账号密码,直接上岸app。创造该app功能包括通讯录查询、数据同步、excle文件上传、头像上传、文件下载以及查询功能,且创造上传下载均未进行黑白名单过滤。可利用的点较多。
虽然此处有N种办法可以利用。但是我们在不毁坏委托方正常业务的的情形下,选择了头像上传,直接上传jsp拿到shell。
后端没有校验直接上传文件成功。