添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
温暖的卡布奇诺  ·  [WPF] ...·  2 年前    · 
聪明伶俐的扁豆  ·  python get请求 ...·  2 年前    · 
朝气蓬勃的猴子  ·  RuoYi-Cloud ...·  2 年前    · 

使用objection对加密和解密的方法进行验证:

android hooking watch class_methon [方法的完整路径] --dump-args --dump-backtrace --dump-return

通过hook的结果,可以判断该处代码就是报文的加解密代码。

0x03 编写hook+rpc代码

aaa.js

function main(){
    Java.perform(function(){
        console.log("正在注入")
        var data = Java.use('com.xxxx.http.HttpEncrypt');
        data.encryptParams.implementation = function(json,signdata){
            console.log("===========================加密算法==========================");
            send(json.toString());//因为是json类型数据,所以需要转换为string类型,否则转发不到burp
            var tmp;
            var op = recv('send',function (value) {
                tmp = value.payload;
                console.log("请求篡改后----->: ", tmp);
                return tmp;               
            op.wait();
            return this.encryptParams(tmp,signdata);
        var shuju = Java.use('com.xxxx.http.HttpEncrypt');
        data.decryptReponse.implementation = function(content,i){
            console.log("==========================解密算法==============================");
            var ret = this.decryptReponse(content,i);
            send(ret);
            var tmp;
            var op = recv('send',function (value) {
                tmp = value.payload;
                console.log("请求篡改后----->: ", tmp);
                return tmp;
            op.wait();
            return tmp;
setTimeout(main,5000);

启动handle_server.py

from http.server import HTTPServer, BaseHTTPRequestHandler
class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print('Recving request connction...')
        request_headers = self.headers
        content_length = request_headers.get('content-length')
        length = int(content_length[0]) if content_length else 0
        print(self.headers)
        self.send_response(200)
        self.end_headers()
        self._send_cors_headers()
        self.wfile.write(self.rfile.read(length))
    def do_POST(self):
        print('Recving request connction...')
        req_datas = self.rfile.read(int(self.headers['content-length']))
        # print(self.headers)
        # print(req_datas)
        self.send_response(200)
        self._send_cors_headers()
        self.end_headers()
        self.wfile.write(req_datas)
    def _send_cors_headers(self):
        self.send_header('Content-type', 'application/json')
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "*")
        self.send_header("Access-Control-Allow-Headers", "Authorization, Content-Type")
    def do_OPTIONS(self):
        self.send_response(200)
        self._send_cors_headers()
        self.end_headers()
def main(ECHO_PORT):
    print('Listening on localhost: %d' % ECHO_PORT)
    server = HTTPServer(('127.0.0.1', ECHO_PORT), RequestHandler)
    server.serve_forever()
if __name__ == '__main__':
    main(8889)

burp监听127.0.0.1:8888端口

然后使用adb转发端口:

adb forward tcp:27042 tcp:27042

启动 toBurp.py

启动前需要修改里面的一些内容:

python toBurp.py 中转至burp,动态修改请求 import os import time import sys import frida import requests import json def on_message(message, data): if isinstance(message, dict): if message['type'] == 'send': payload = message['payload'] if '{' in payload: data = toburp(message["payload"].encode('utf-8')) data = {'type': 'send', 'payload': data} script.post(data) #script.post({'type': 'send', 'payload': json.loads(data)}) elif message['type'] == 'error': print(message['stack']) else: if message.has_key("payload"): print(message["payload"]) #获取设备应用名 def get_application_name(device, identifier): for p in device.enumerate_applications(): if p.identifier == identifier: return p.name # 中转到burp def toburp(data): proxies = {'http':'http://127.0.0.1:8888'} url = 'http://127.0.0.1:8889/Hook' response=requests.post(url,data=data,proxies=proxies) return(response.text) def main(): #连接设备 device = frida.get_remote_device() #需要attach的apk包名 pid = device.spawn('com.xxxx.xxxx') #修改为包名 #attach目标进程 session = device.attach(pid) device.resume(pid) #加载javaScript脚本 # 修改此处: aaa.js为hook脚本 script_content = open("aaa.js",encoding='utf-8').read() global script script = session.create_script(script_content) script.on("message", on_message) script.load() sys.stdin.read() except KeyboardInterrupt as e: if session is not None: session.detach() device.kill(pid) sys.exit(0) if __name__ == "__main__": main()

这是burp可以接收到参数,但是提交的时候会失败,就是提交到服务器,服务器并不认识。

通过下图可以看到,参数是被正常打印出来了,但是提示重载,后来我写了重载也是不行。

仔细分析了一波后得出结论:

加密代码没有其他参数类型的方法了,只有

public final String encryptParams(JSONObject json, String signData)这一个。

而我们在将JSONObject json发送到burp的时候,将JSONObject json类型转换为了String,导致调用encryptParams方法进行加密的时候,JSONObject json这个参数转换为了string类型的,所以匹配不到,故提示要重载。

所以我们还需要将String类型的数据转换为Json类型。

我自己尝试了几种方法,都不行:

var ret = JSON.stringify(tmp);
function strToJson(str){
var json = eval('(' + str + ')');
return json;

后来找了许多资料没有找到好办法,于是乎~~~~人工智能

在这里我就不得不表扬一下ai同学了:

最終修改后的js代码:

function main(){
    Java.perform(function(){
        console.log("正在注入")
        var data = Java.use('com.xxxx.http.HttpEncrypt');
        data.encryptParams.implementation = function(json,signdata){
            console.log("===========================加密算法==========================");
            send(json.toString());//因为是json类型数据,所以需要转换为string类型,否则转发不到burp
            var tmp;
            var op = recv('send',function (value) {
                tmp = value.payload;
                console.log("请求篡改后----->: ", tmp);
                return tmp;               
            op.wait();
            return this.encryptParams(tmp,signdata);
        var shuju = Java.use('com.xxxx.HttpEncrypt');
        data.decryptReponse.implementation = function(content,i){
            console.log("==========================解密算法==============================");
            var ret = this.decryptReponse(content,i);
            send(ret);
            var tmp;
            var op = recv('send',function (value) {
                tmp = value.payload;
                console.log("请求篡改后----->: ", tmp);
                return tmp;
            op.wait();
            return tmp;
setTimeout(main,5000);

修改好代码后,重新运行,burp也能够抓到包了。

通过测试发现,加解密的报文只是针对登录、点击功能按钮跳转时生成token等生效,经过测试,没发现什么漏洞,而内部页面其实还是h5,还是需要用传统的抓包方式进行测试。

0x04 app内部H5抓包

由于刚开始测试了burp是抓不到包的,而httpcanary使用起来又不方便,所以尝试使用charles。charles抓包的时候app显示无法连接到服务器,charles提示证书的问题,怀疑可能是SSLPinning,使用抓包工具抓包时,抓包工具拦截了服务端返回的内容并重新发给客户端的时候的证书不是服务器端原来的证书了,抓包工具将原本服务器的证书替换成自己的证书,于是就构成了中间人攻击,触发SSL Pinning导致连接中断,所以就抓不到包了。尝试使用objection的SSL Pinning disable进行绕过。

启动objection并注入app,输入命令:

android sslpinning disable

运行命令后,charles也成功抓到包了,而且没有加密,就很nice。

但是问题来了,charles改包、重放啥的不是很方便,所以联动一下burp。

0x05 charles联动burp

5.1 charles设置

Proxy-——External Proxy Settings

将Web Proxy和Secure Web Proxy均设置为127.0.0.1:8080

5.2 burp设置

5.3 成功转发

这样手机代理连接charles,charles转发到burp,就实现使用burp的抓包改包操作了。

这个app权限限制的很死,没找到越权类的漏洞,代码也很规范,最后只找到几个中低危的洞。放一个文件上传的洞吧:

通过修改MIME类型,可以突破文件上传。

自评TCV:1

liuzhong3639
Rank: 1
2023-3-8 08:14

这个金融APP做的不咋地呀?这么简单就能被破解了,我之前搞一个金融APP,各种校验,objection、frida、root各种检测。不得不说运气真好。。。。

回复|@ta|踩(0)|顶(2)
  • TOP2
    pp393229407
    Rank: 1
  • 2023-3-10 17:44

    写的真是够细的, apk总体来说学到思路就好

    回复|@ta|踩(0)|顶(1)
  • TOP3
    xg404
    Rank: 2
  • 2023-3-10 18:09

    渗透小助手-chatgpt

    回复|@ta|踩(0)|顶(1)
  • TOP4
    Anonymous
    Rank: 2
  • 2023-3-13 11:39

    chatGPT是亮点,啥时候有个这样的对象就好了

    回复|@ta|踩(0)|顶(1)
  • TOP5
    Beck2021
    Rank: 1
  • 2023-3-13 12:02

    jadx那个小技巧,需要配置吗

    回复|@ta|踩(0)|顶(1)
  • 60楼
    wf98wf
    Rank: 1
  • 3 天前 00:47

    师傅思路好细,求教还有那种自己连接的时候自己建一个vpn通信的那种怎么抓包呢

    回复|@ta|踩(0)|顶(1)
  • 59楼
    xiaoxsec
    Rank: 1
  • 2023-4-19 22:34

    厉害厉害大佬 全是代码

    回复|@ta|踩(0)|顶(0)
  • 58楼
    小毒物小毒物
    Rank: 1
  • 2023-4-2 00:10

    师父太强了!学xi一下,从上一篇文章过来的!

    回复|@ta|踩(0) |顶(0)
  • 57楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:33
    liuzhong3639

    这个金融APP做的不咋地呀?这么简单就能被破解了,我之前搞一个金融APP,各种校验,objection、frida、root各种检测。不得不说运气真好。。。。

    回复|@ta
    1

    objection检测、frida检测、root检测、代理检测都遇到过,objection直接不用了,用hluda绕的检测,也是hook加解密+jsrpc,所以代理检测也绕了,脱壳是用的脱壳机

    回复|@ta|踩(0)|顶(0)
  • 56楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:31
    jkrow

    任意上传了不是高危了吗

    回复|@ta
    1

    因为限制比较多,只能上传一些文件类型,而且访问不了

    回复|@ta|踩(0)|顶(0)
  • 55楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:29
    Lstarx

    师傅好强啊,俺也在折腾Frida和安卓这块儿,还在摸索中

    回复|@ta
    1

    哈哈,我也是一步一步慢慢走过来的,慢慢来,加油!

    回复|@ta|踩(0)|顶(0)
  • 54楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:29
    TravelToTheEnd

    小声问一句,这个金融app是用了个github上的东西吗

    回复|@ta
    1

    这个我也没有在意,不知道用没有~

    回复|@ta|踩(0)|顶(0)
  • 53楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:28
    。。。。。

    师傅很给力,app玩的很溜。只是现在的app越来越难搞了

    回复|@ta
    1

    是呀是呀,太难了,经常掉头发,安卓搞的人多,检测的花样也多

    回复|@ta|踩(0)|顶(0)
  • 52楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:27
    pipixiawqr

    师傅写的太详细了吧,可惜目前还没遇到能脱壳的金融类APP

    回复|@ta
    1

    嘻嘻,可以先搞些小金融厂及其开发的其他业务的app,其他的一些有的也是可以用平常的方法脱的

    回复|@ta|踩(0)|顶(0)
  • 51楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:26
    pipixiawqr

    师傅写的太详细了吧,可惜目前还没遇到能脱壳的金融类APP

    回复|@ta
    1

    嘻嘻,可以先搞些小金融厂及其开发的其他业务的app

    回复|@ta|踩(0)|顶(0)
  • 50楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:25
    Beck2021

    jadx那个小技巧,需要配置吗

    回复|@ta
    1

    不需要配置,我记得高于1.2都可以,1.2应该是不行

    回复|@ta|踩(0)|顶(0)
  • 49楼
    Adminxe
    Rank: 2
  • 2023-3-16 13:24
    freedomwings3

    这里面使用objection绕过了服务端的客户端的证书校验吗?

    回复|@ta
    1

    SSL Pinning是在开发时就将服务端证书一块打包到客户端里.这样在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接. 这就是数据包无法获取的原因,

    回复|@ta|踩(0)|顶(0)
  • 48楼
    freedomwings3
    Rank: 1
  • 2023-3-14 17:42

    这里面使用objection绕过了服务端的客户端的证书校验吗?

    回复|@ta|踩(0)|顶(0)
  • 47楼
    faust
    Rank: 2
  • 2023-3-14 11:25

    这个姿势学会了

    回复|@ta|踩(0)|顶(0)
  • 46楼
    xunfeng
    Rank: 1
  • 2023-3-13 18:23

    写的不错,值得学xi

    回复|@ta|踩(0)|顶(0)
  • 45楼
    Beck2021
    Rank: 1
  • 2023-3-13 12:02

    jadx那个小技巧,需要配置吗

    回复|@ta|踩(0)|顶(1)
  • 44楼
    Anonymous
    Rank: 2
  • 2023-3-13 11:39

    chatGPT是亮点,啥时候有个这样的对象就好了

    回复|@ta|踩(0)|顶(1)
  • 43楼
    xg404
    Rank: 2
  • 2023-3-10 18:09

    渗透小助手-chatgpt

    回复|@ta|踩(0)|顶(1)
  • 42楼
    pp393229407
    Rank: 1
  • 2023-3-10 17:44

    写的真是够细的, apk总体来说学到思路就好

    回复|@ta|踩(0)|顶(1)
  • 41楼
    pipixiawqr
    Rank: 1
  • 2023-3-10 17:26

    师傅写的太详细了吧,可惜目前还没遇到能脱壳的金融类APP

    回复|@ta|踩(0)|顶(0)

    安全资讯数百万人被隐藏在Google Play上的假Telegram应用程序中的间谍软件感染

    伪装成Telegram修改版本的间谍软件已在Google Play商店中被发现 ...

    2023-09-11 10:24:58

    渗透测试【开源】HTTPDecrypt for Android Penetration Test

    # HTTP Decrypt利用HTTP协议 远程加解密数据包,实现Burp一条龙 ...

    2019-05-06 15:06:22 26740