Google CTF 2018 - Shall We Play a Game?

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Laai die APK hier af:

Ek gaan die APK oplaai na https://appetize.io/ (gratis rekening) om te sien hoe die apk optree:

Dit lyk asof jy 1000000 keer moet wen om die vlag te kry.

Volg die stappe van pentesting Android om die aansoek te dekompilieer om die smali-kode te kry en lees die Java-kode met jadx.

Lees die java-kode:

Dit lyk asof die funksie wat die vlag gaan druk m(). is

Smali-veranderinge

Roep m() die eerste keer aan

Laat ons die aansoek m() laat aanroep as die veranderlike this.o != 1000000 is om dit te doen, verander net die voorwaarde:

if-ne v0, v9, :cond_2

Google CTF 2018: Shall we play a game?

Android Application Pentesting

Shall we play a game?

Die eerste stap is om die app te installeer en te hardloop. Die app het 'n eenvoudige UI met 'n knoppie wat 'n boodskap wys. Die app gebruik 'n plaaslike SQLite databasis om die boodskappe te stoor. Die boodskappe word in 'n tabel gestoor met die kolomme id en message. Die app gebruik 'n ContentProvider om toegang tot die databasis te verkry. Die ContentProvider is geïmplementeer in die MessageProvider-klas. Die app gebruik 'n CursorLoader om die data van die databasis te laai en te wys in 'n ListView. Die ListView gebruik 'n CursorAdapter om die data te bind. Die app gebruik ook 'n BroadcastReceiver om boodskappe te ontvang en te wys. Die BroadcastReceiver is geregistreer in die AndroidManifest.xml-lêer. Die app gebruik 'n Service om agtergrondtake uit te voer. Die Service is geïmplementeer in die MessageService-klas. Die app gebruik 'n PendingIntent om 'n Service te begin. Die PendingIntent word geskep in die MainActivity-klas. Die app gebruik 'n Notification om gebruikers te waarsku wanneer 'n nuwe boodskap ontvang word. Die Notification is geskep in die MessageReceiver-klas. Die app gebruik 'n SQLiteOpenHelper om die databasis te skep en op te gradeer. Die SQLiteOpenHelper is geïmplementeer in die DatabaseHelper-klas. Die app gebruik 'n SQLiteDatabase om die databasisoperasies uit te voer. Die SQLiteDatabase word verkry vanaf die SQLiteOpenHelper. Die app gebruik 'n SharedPreferences om instellings te stoor. Die instellings word gestoor as sleutel/waarde-pare. Die app gebruik 'n WebView om 'n webbladsy te wys. Die WebView is in die MainActivity-klas geïmplementeer. Die app gebruik 'n WebViewClient om die laai van webbladsye te hanteer. Die WebViewClient is in die MainActivity-klas geïmplementeer. Die app gebruik 'n JavaScriptInterface om kommunikasie tussen Java en JavaScript moontlik te maak. Die JavaScriptInterface is in die MainActivity-klas geïmplementeer. Die app gebruik 'n URLSpan om kliekbaar skakels in te voeg. Die URLSpan is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Intent om van die een aktiwiteit na die ander te navigeer. Die Intent word geskep in die MainActivity-klas. Die app gebruik 'n AlertDialog om gebruikers te waarsku of inligting te wys. Die AlertDialog is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Handler om take op die hoofdraad uit te voer. Die Handler is in die MainActivity-klas geïmplementeer. Die app gebruik 'n AsyncTask om agtergrondtake uit te voer. Die AsyncTask is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Loader om data asinkronies te laai. Die Loader is in die MainActivity-klas geïmplementeer. Die app gebruik 'n ContentObserver om veranderinge in die databasis te monitor. Die ContentObserver is in die MainActivity-klas geïmplementeer. Die app gebruik 'n FileProvider om toegang tot lêers te deel. Die FileProvider is gedefinieer in die AndroidManifest.xml-lêer. Die app gebruik 'n BroadcastReceiver om boodskappe te ontvang en te hanteer. Die BroadcastReceiver is geregistreer in die MainActivity-klas. Die app gebruik 'n Service om agtergrondtake uit te voer. Die Service is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Notification om gebruikers te waarsku wanneer 'n nuwe boodskap ontvang word. Die Notification is in die MainActivity-klas geïmplementeer. Die app gebruik 'n SQLiteOpenHelper om die databasis te skep en op te gradeer. Die SQLiteOpenHelper is in die MainActivity-klas geïmplementeer. Die app gebruik 'n SQLiteDatabase om die databasisoperasies uit te voer. Die SQLiteDatabase is in die MainActivity-klas geïmplementeer. Die app gebruik 'n SharedPreferences om instellings te stoor. Die SharedPreferences is in die MainActivity-klas geïmplementeer. Die app gebruik 'n WebView om 'n webbladsy te wys. Die WebView is in die MainActivity-klas geïmplementeer. Die app gebruik 'n WebViewClient om die laai van webbladsye te hanteer. Die WebViewClient is in die MainActivity-klas geïmplementeer. Die app gebruik 'n JavaScriptInterface om kommunikasie tussen Java en JavaScript moontlik te maak. Die JavaScriptInterface is in die MainActivity-klas geïmplementeer. Die app gebruik 'n URLSpan om kliekbaar skakels in te voeg. Die URLSpan is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Intent om van die een aktiwiteit na die ander te navigeer. Die Intent is in die MainActivity-klas geïmplementeer. Die app gebruik 'n AlertDialog om gebruikers te waarsku of inligting te wys. Die AlertDialog is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Handler om take op die hoofdraad uit te voer. Die Handler is in die MainActivity-klas geïmplementeer. Die app gebruik 'n AsyncTask om agtergrondtake uit te voer. Die AsyncTask is in die MainActivity-klas geïmplementeer. Die app gebruik 'n Loader om data asinkronies te laai. Die Loader is in die MainActivity-klas geïmplementeer. Die app gebruik 'n ContentObserver om veranderinge in die databasis te monitor. Die ContentObserver is in die MainActivity-klas geïmplementeer. Die app gebruik 'n FileProvider om toegang tot lêers te deel. Die FileProvider is gedefinieer in die AndroidManifest.xml-lêer.

if-eq v0, v9, :cond_2

Volg die stappe van pentest Android om die APK te herkompilieer en te onderteken. Laai dit dan op na https://appetize.io/ en kyk wat gebeur:

Dit lyk asof die vlag geskryf is sonder om heeltemal ontsluit te word. Waarskynlik moet die m() funksie 1000000 keer geroep word.

'n Ander manier om dit te doen is om nie die instruksie te verander nie, maar om die vergelykende instruksies te verander:

'n Ander manier is om in plaas daarvan om met 1000000 te vergelyk, die waarde na 1 te stel sodat this.o met 1 vergelyk word:

'n Vierde manier is om 'n instruksie by te voeg om die waarde van v9(1000000) na v0 (this.o) te skuif:

Oplossing

Maak die aansoek hardloop die lus 100000 keer as jy die eerste keer wen. Om dit te doen, hoef jy net die :goto_6 lus te skep en die aansoek daarheen te laat spring as this.o nie die waarde 100000 het nie:

Jy moet dit binne 'n fisiese toestel doen aangesien (ek weet nie waarom nie) dit nie werk in 'n geëmuleerde toestel nie.

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated