9.7 KiB
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:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
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:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github repos.