Google CTF 2018 - Shall We Play a Game?

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Завантажте APK тут:

Я збираюся завантажити APK на https://appetize.io/ (безкоштовний обліковий запис), щоб побачити, як веде себе apk:

Здається, вам потрібно виграти 1000000 разів, щоб отримати прапорець.

Виконуючи кроки з тестування на проникнення Android, ви можете декомпілювати додаток, щоб отримати код smali та прочитати код Java за допомогою jadx.

Читаючи код Java:

Здається, що функція, яка виведе прапорець, - m().

Зміни в Smali

Виклик m() вперше

Давайте зробимо так, щоб додаток викликав m(), якщо змінна this.o != 1000000, для цього просто змініть умову:

if-ne v0, v9, :cond_2

Google CTF 2018 - Shall we play a game?


Task 1: Install the APK

  1. Download the APK from the challenge page.

  2. Install the APK on your device.


Task 2: Analyze the APK

  1. Decompile the APK using JADX or APKTool.

  2. Analyze the source code to understand its functionality.


Task 3: Identify the Vulnerability

  1. Look for potential security vulnerabilities in the code.

  2. Focus on areas like input validation, authentication mechanisms, and data storage.


Task 4: Exploit the Vulnerability

  1. Develop an exploit based on the identified vulnerability.

  2. Test the exploit to verify its effectiveness.


Task 5: Get the Flag

  1. Use the exploit to extract the flag from the application.

  2. Submit the flag to complete the challenge.

if-eq v0, v9, :cond_2

Дотримуйтесь кроків pentest Android, щоб перекомпілювати та підписати APK. Потім завантажте його на https://appetize.io/ і подивимося, що відбудеться:

Здається, прапорець написаний без повного розшифрування. Ймовірно, функцію m() слід викликати 1000000 разів.

Інший спосіб зробити це - не змінювати інструкцію, а змінити порівнювані інструкції:

Ще один спосіб - замість порівняння з 1000000 встановити значення 1, щоб порівнювалося з this.o з 1:

Четвертий спосіб - додати інструкцію для переміщення значення v9(1000000) до v0 (this.o):

Рішення

Зробіть так, щоб програма виконувала цикл 100000 разів, коли ви виграєте вперше. Для цього вам потрібно лише створити цикл :goto_6 і зробити так, щоб програма перескакувала туди, якщо this.o не має значення 100000:

Вам потрібно зробити це на фізичному пристрої, оскільки (я не знаю чому) це не працює на емульованому пристрої.

Last updated