flagen
Catégorie: Mobile Difficulté: medium Flag: CTF{21fb574397e3c49950511c5f1a9dd413ffc5986a0a15b36878434e21782877f0}
Challenge
Ce challenge tourne sur un docker et n'est pas disponible
Reverse de l’APK
On décompile avec JADx par exemple. En cherchant les appels réseaux, notamment avec des termes comme HTTP ou API, on tombe sur :

Dans le fichier flagen/sources/androidx/activity/b.java
on trouve un appel à une API :
com.example.flagen.FlagActivity r0 = (com.example.flagen.FlagActivity) r0
int r14 = com.example.flagen.FlagActivity.f914v
java.lang.String r14 = "http://"
monitor-enter(r0)
java.lang.StringBuilder r1 = new java.lang.StringBuilder // Catch:{ Exception -> 0x00b1 }
r1.<init>(r14) // Catch:{ Exception -> 0x00b1 }
java.lang.String r14 = r0.f915t // Catch:{ Exception -> 0x00b1 }
r1.append(r14) // Catch:{ Exception -> 0x00b1 }
java.lang.String r14 = ":"
r1.append(r14) // Catch:{ Exception -> 0x00b1 }
java.lang.String r14 = r0.f916u // Catch:{ Exception -> 0x00b1 }
r1.append(r14) // Catch:{ Exception -> 0x00b1 }
java.lang.String r14 = "/api/v1/getdata"
r1.append(r14) // Catch:{ Exception -> 0x00b1 }
java.lang.String r14 = r1.toString() // Catch:{ Exception -> 0x00b1 }
java.net.URL r1 = new java.net.URL // Catch:{ Exception -> 0x00b1 }
r1.<init>(r14) // Catch:{ Exception -> 0x00b1 }
java.net.URLConnection r14 = r1.openConnection() // Catch:{ Exception -> 0x00b1 }
java.net.HttpURLConnection r14 = (java.net.HttpURLConnection) r14 // Catch:{ Exception -> 0x00b1 }
r1 = 20000(0x4e20, float:2.8026E-41)
r14.setConnectTimeout(r1) // Catch:{ Exception -> 0x00b1 }
r14.setReadTimeout(r1) // Catch:{ Exception -> 0x00b1 }
java.lang.String r1 = "GET"
r14.setRequestMethod(r1) // Catch:{ Exception -> 0x00b1 }
java.lang.String r1 = "Accept"
java.lang.String r2 = "application/json"
r14.setRequestProperty(r1, r2) // Catch:{ Exception -> 0x00b1 }
java.lang.String r1 = "X-API-KEY"
java.lang.String r2 = "FBA34-E4Q4D3-E5C8XB1-DDA9A-26ED76"
r14.setRequestProperty(r1, r2) // Catch:{ Exception -> 0x00b1 }
java.io.BufferedReader r1 = new java.io.BufferedReader // Catch:{ Exception -> 0x00b1 }
java.io.InputStreamReader r2 = new java.io.InputStreamReader // Catch:{ Exception -> 0x00b1 }
java.io.InputStream r3 = r14.getInputStream() // Catch:{ Exception -> 0x00b1 }
r2.<init>(r3) // Catch:{ Exception -> 0x00b1 }
Exploitation de l’API
On lance maintenant une reconnaissance sur http://{host}:{port}/
$ wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt --hc 404 -u http://34.107.126.69:32141/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://34.107.126.69:32141/FUZZ
Total requests: 268
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000200: 200 42 L 112 W 1336 Ch "/swagger/"
Total time: 0
Processed Requests: 268
Filtered Requests: 267
Requests/sec.: 0
Sur /swagger/
on trouve :

Il suffit maintenant de faire un requête sur l’endpoint /api/v1/getfl
avec la clé d’API qu’on a trouvé dans l’APK
$ curl http://34.107.126.69:32141/api/v1/getfl -H "X-API-KEY:FBA34-E4Q4D3-E5C8XB1-DDA9A-26ED76"
{"flag": "CTF{21fb574397e3c49950511c5f1a9dd413ffc5986a0a15b36878434e21782877f0}"}
Dernière mise à jour
Cet article vous a-t-il été utile ?