hacktricks/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md
2023-07-07 23:42:27 +00:00

7.7 KiB
Raw Blame History

Google CTF 2018 - Shall We Play a Game?

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

APKをここからダウンロードしてください

APKをhttps://appetize.io/無料アカウントにアップロードして、APKの動作を確認します

フラグを取得するには1000000回勝つ必要があるようです。

Androidのペントテストの手順に従って、アプリケーションを逆コンパイルしてsmaliコードを取得し、jadxを使用してJavaコードを読み取ることができます。

Javaコードを読む

フラグを表示する関数は**m()**のようです。

Smaliの変更

最初の呼び出しでm()を呼び出す

変数_this.o != 1000000_の場合にアプリケーションがm()を呼び出すようにします。条件を変更するだけです:

if-ne v0, v9, :cond_2

/hive/hacktricks/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md

Google CTF 2018 - Shall we play a game?

Challenge Description

This challenge is about an Android application that simulates a game. The goal is to find a vulnerability in the app and exploit it to gain access to the flag.

Initial Analysis

The first step is to decompile the APK file using a tool like JADX or apktool. Once decompiled, we can analyze the source code to identify potential vulnerabilities.

Reverse Engineering

In the source code, we find a class called MainActivity that handles the main functionality of the app. By analyzing this class, we discover that the app communicates with a remote server using a custom protocol.

Network Communication

To understand the communication protocol, we need to intercept the network traffic between the app and the server. We can use tools like Wireshark or Burp Suite to capture and analyze the traffic.

Vulnerability Discovery

After analyzing the network traffic, we find that the app sends a request to the server with a parameter called command. By manipulating this parameter, we can trigger a command injection vulnerability.

Exploitation

To exploit the command injection vulnerability, we can send a malicious command as the value of the command parameter. This command will be executed on the server, allowing us to gain control and access the flag.

Conclusion

By analyzing the source code and intercepting the network traffic, we were able to discover and exploit a command injection vulnerability in the Android app. This allowed us to gain control of the server and access the flag.

if-eq v0, v9, :cond_2

Before

After

Androidのペントテストの手順に従って、APKを再コンパイルして署名します。その後、https://appetize.io/にアップロードして、何が起こるか見てみましょう:

フラグが完全に復号化されずに書かれているようです。おそらくm()関数を1000000回呼び出す必要があります。

これを行う別の方法は、命令を変更せずに比較する命令を変更することです:

別の方法は、1000000ではなく1と比較するように値を設定することです。これにより、this.oが1と比較されます

4番目の方法は、v91000000の値をv0this.oに移動する命令を追加することです

解決策

アプリケーションが最初に勝った場合に、ループを100000回実行するようにします。これを行うには、goto_6ループを作成し、アプリケーションが**_this.oの値が100000でない場合にそこにジャンプするようにします**

これは物理デバイス内で行う必要があります(なぜかはわかりません)。

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥