Local Data Storage
Los ultimos 3 retos presentan problemas para realizar la visualización de la data.
| Método | Uso Principal | Seguridad | Datos Almacenados | Ubicación Típica |
|---|---|---|---|---|
| Plist (.plist) | Configuración y listas | Baja | Datos en XML o binario, sin cifrado | /Library/Preferences/ |
| UserDefaults | Preferencias de usuario | Baja | Datos pequeños como configuración y flags | /Library/Preferences/ |
| Keychain | Datos sensibles (credenciales) | Alta | Contraseñas, tokens, certificados | Almacenamiento seguro de iOS |
| Core Data | Datos estructurados y grandes volúmenes | Media | Tablas relacionales con consultas avanzadas | /Library/Application Support/ |
| WebKit Caching | Caché de páginas web | Baja | Datos de sesiones, cookies, caché de navegador | /Library/Caches/com.apple.WebKit/ |
| Realm | Base de datos NoSQL para apps móviles | Media | Datos estructurados con consultas rápidas | /Documents/ o /Library/Application Support/ |
| Couchbase Lite | Base de datos NoSQL con sincronización | Media | Documentos JSON con replicación en la nube | /Library/Application Support/ |
| YapDatabase | Base de datos basada en SQLite optimizada | Media | Datos estructurados con índices avanzados | /Library/Application Support/ |
Plist
¿Qué son los archivos .plist en iOS?
Los archivos Property List (.plist) son archivos XML o binarios que contienen configuraciones de la aplicación. Estos pueden almacenar datos como:
✅ Preferencias del usuario
✅ Configuración de la aplicación
✅ Datos de sesión
✅ Información sensible (si la app está mal diseñada)
Estos archivos se encuentran en la sandbox de la aplicación y pueden ser leídos y modificados si el atacante tiene acceso al sistema de archivos del dispositivo.
Abrimos la herramienta Grapefruit que tenemos instalada en nuestro laboratorio, podemos verla en Herramientas, pero primero vamos a agregar la data para el reto, el reto nos dice
El reto dice: la entrada introducida aquí se guarda en un archivo plist. Su tarea es encontrar donde se almacena este valor en la aplicación sandox

conectamos el dispositivo y confirmamos con el comando frida-ls-devices
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS/Herramientas]
└─# frida-ls-devices
Id Type Name OS
---------------------------------------- ------ --------------- ---------------------
local local Local System Kali GNU/Linux 2024.4
03565e409550be0e35e2a5f8704d573e3fc99565 usb iOS Device iPhone OS 13.3.1
barebone remote GDB Remote Stub
socket remote Local Socket
ahora si abrimos Grapefruit, con el comando igf
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS/Herramientas]
└─# igf
Grapefruit running on http://127.0.0.1:31337
y vamos al navegador en el link http://127.0.0.1:31337 y podemos ver el dispositivo

ingresamos a la aplicación DVIA-v2, podemos ver una información básiva de la aplicación, luego vamos a la pestaña Finder y luego vamos a la funcionalidad de Home

estándo en esta funcionalidad, vamos al directorio Documents y vemos un archivo llamado userinfo.plist

al dar clic en este archivo vemos la información en texto plano y así se cumple el primer reto de esta sesión

UserDefaults
¿Qué es UserDefaults?
UserDefaults es un mecanismo de almacenamiento de datos en iOS que permite a las aplicaciones guardar pequeñas cantidades de información, como configuraciones del usuario, preferencias y estados de la aplicación. Sin embargo, no está diseñado para almacenar información sensible, ya que los datos se guardan en texto plano dentro de un archivo .plist accesible en el sistema de archivos del dispositivo.
El reto dice: La entrada introducida aquí se guarda utilizando NSUserDefaults. Su tarea es encontrar dónde se almacena este valor en el sandbox de la App

si vemos en la herramienta de Grapefruit vemos un módulo llamado NSUserDefaults

si vamos a ese módulo podemos ver un valor llamado DemoValue con el dato que ingresamos anteriormente

Keychain
¿Qué es el Keychain en iOS?
El Keychain es una base de datos encriptada administrada por iOS que permite a las aplicaciones almacenar y recuperar información de manera segura. Se usa comúnmente para:
✅ Credenciales de usuario (usuario/contraseña)
✅ Tokens de autenticación
✅ Claves de encriptación
✅ Cookies de sesión
El Keychain está diseñado para proteger los datos incluso si el dispositivo es comprometido, pero una mala implementación puede dejarlo expuesto a ataques.
El reto dice: la entrada introducida aquí se guarda en el keychain. tu tarea es volcar la información del keychain en tu dispositivo y encontrar este valor

con la herramienta Grapefruit, también podemos ver el valor del keychain, en este caso vamos al módulo KeyChain y descargamos el valor de cuenta keychainValue, una vez descargado abrimos el archivo y podemos ver el valor en texto claro.

Core Data
Características principales de Core Data:
✅ Gestión de objetos: Permite almacenar, consultar y manipular datos como objetos sin escribir consultas SQL manualmente.
✅ Almacenamiento flexible: Soporta almacenamiento en SQLite (por defecto), archivos binarios, XML e incluso en memoria.
✅ Consultas eficientes: Usa NSFetchRequest para realizar búsquedas optimizadas de datos.
✅ Soporte de relaciones: Permite definir relaciones entre entidades, similar a bases de datos relacionales.
✅ Integración con iCloud: Puede sincronizar datos en la nube.
El reto dice: La entrada introducida aquí se guarda utilizando el marco de core data en el dispositivo. su tarea es encontrar esta información guardada en el dispositivo

si vamos al módulo de Finder y luego vamos a Home, podemos buscar la ruta Library / Application Support y ahí encontraremos un archivo llamado Model.sqlite

al abrir este archivo podemos ver varias tablas, entre ellas una llamada ZUSER, cuando se abre esta tabla se puede apreciar la información almacenada de los datos en texto plano

También se puede realizar este reto desde una terminal por medio de SSH, nos conectamos con la
┌──(root㉿angussMoody)-[/home/angussmoody]
└─# ssh root@192.168.1.1 -P 22
root@192.168.1.1's password:
iPad-21:~ root#
Vamos a la ruta /private/var/mobile/Containers/Data/Application/ y listamos los directorios.
iPad-21:~ root# cd /private/var/mobile/Containers/Data/Application/
iPad-21:/private/var/mobile/Containers/Data/Application root# ls
003A3014-DDAB-40CD-963C-AB4E7FCEB0DD/ 4F090312-0107-4CD2-BB3B-5E63406C0A44/ 8D3BBC0F-C2A5-48D4-9738-7C8F0E6103BC/ CA0C3724-151F-43B9-A90A-17DE32CE5BAB/
02E0CB25-FCE8-4894-BFDE-19D37E3037BC/ 531BFEB7-EFD9-4F34-AD6C-8D215D209B18/ 8E066F84-E7F9-4CB7-A8E1-02D7DF4747AD/ CE44B9D2-4328-4EB9-9437-6A5D79FF7F87/
05C4808F-B82B-4A5B-ACD8-C9FEF9414E92/ 53575BF0-6BFC-4F41-B2AC-A0E8F46E0381/ 90B19E63-3943-4B7A-8E3B-C7578F53961B/ D0A0172C-C60E-43B8-917D-D9D9C7DF1B50/
3971E8C5-34C1-43D7-92DC-4DC47473F9DC/ 775550FC-144C-4D7B-8327-723C51AF52E7/ B6A1EAED-B80A-43C6-8E86-D7BE65806EB6/ F35D50AF-8BD1-467B-95ED-53605DDB6DC2/
3A289D41-F954-4956-9859-C2FF0E7F4F18/ 7987B784-340D-4C92-BB3F-4654EDAE1AB6/ B92AAD28-4B05-45F4-8269-F862C6E6E656/ F444A313-22FA-4313-8539-A9D31279EE01/
4169B8A0-7046-4950-B1D8-3666978B9892/ 79E0DE5F-3AFE-49F7-A688-6CF4BD0C2C09/ B96063CF-F84F-4C02-97F9-7FB45D5918D2/ F62FCEDA-1D89-4153-9BD7-51600AD8F198/
42FF9FD3-A3C9-4E4E-8D2A-BDF8088E8CE5/ 7D21445B-278D-4C45-B93E-00B54F27D330/ BDE84DD1-D951-4E56-B55B-66CE0600E504/ F7D8FD3B-1988-4FCB-98B2-CE72DD18C526/
430E40DA-B6A9-4CCA-84C7-5075143D78BF/ 807DC0A4-981B-48BC-9DF4-9A6F45ABCC50/ BDEB4270-398A-45CB-A36D-03AA33E3DE18/ F8A1E5BF-20CC-4CE9-80C8-BC224E08380F/
476E3723-39B5-4A1B-9BEF-45903D2C5779/ 80D6E50F-5438-4E31-A52C-C09B8F90882E/ BE4FFAD7-8CB2-4D02-AC67-8E46BB13AD28/ F8DD20E9-3423-4330-9183-79AE9F8EA997/
47F8DEF0-CA55-4955-B191-EEA81D7439AA/ 8484D75C-5E57-4031-A0A6-CC3A636600AE/ BE55F8ED-DF34-4958-A0ED-F6356CF98AFE/ FC645E5C-DF09-432D-8203-C77E28DE9D53/
49D12F98-7686-42B8-BB37-492AFDA4E9FE/ 8A1C1150-2EA2-4A32-8B91-EB7AAF238BBA/ BEE229B1-ED7F-4EE9-9C0C-BA0883656BC8/ FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/
4C6667A4-AD5B-4032-96C7-9F76F83EDC13/ 8B054D57-F125-4C57-8145-0ACC29D6C881/ BF72C172-1A7A-44BB-9E9D-32737F1DEEC5/ FF0285B3-4D52-4FA1-8B77-741F8F0732B5/
4E24FF3F-FF61-4E5A-84FA-A2FF5671D85F/ 8C1626E2-1376-455D-AAE5-938ED6E3B341/ C2A82397-7D0E-45EF-8D18-5858FB7E31EC/
4EB6AF2D-820F-4A12-A748-D8D50E2562FA/ 8C596367-2E2D-4B85-9614-D0D635EDF7E9/ C8B1B608-9AF4-4D4F-A3F6-81948468284E/
iPad-21:/private/var/mobile/Containers/Data/Application root#
Buscamos con un nombre clave nuestra aplicación para este caso con la palabra DVIA con el comando
iPad-21:/private/var/mobile/Containers/Data/Application root# find ./ -name "*DVIA*"
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.plausiblelabs.crashreporter.data/com.highaltitudehacks.DVIAswiftv2
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Preferences/com.highaltitudehacks.DVIAswiftv2.plist
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Saved Application State/com.highaltitudehacks.DVIAswiftv2.savedState
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/SplashBoard/Snapshots/com.highaltitudehacks.DVIAswiftv2 - {DEFAULT GROUP}
./FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/SplashBoard/Snapshots/sceneID:com.highaltitudehacks.DVIAswiftv2-default
Entramos a la ruta FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 que es la ruta de nuestra aplicación.
iPad-21:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Application Support root# ls -la
total 28
drwxr-xr-x 5 mobile mobile 160 Mar 4 12:32 ./
drwxr-xr-x 8 mobile mobile 256 Feb 18 11:48 ../
drwxr-xr-x 8 mobile mobile 256 Mar 4 12:33 FlurryFiles/
-rw-r--r-- 1 mobile mobile 305 Mar 4 12:32 FlurryFilesFlurry.KV.storage
-rw-r--r-- 1 mobile mobile 24576 Mar 4 12:26 Model.sqlite
Vemos el archivo Model.sqlite y lo descargamos
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS]
└─# scp root@192.168.1.1:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Application\ Support/Model.sqlite .
root@192.168.1.1's password:
Model.sqlite
ahora con la herramienta sqlite3 vemos el contenido de Model.sqlite, si listamos las tabla podemos ver una llamada ZUSER y si vemos el contenido podemos ver los datos en texto plano.
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS]
└─# sqlite3 Model.sqlite
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
ZUSER Z_METADATA Z_MODELCACHE Z_PRIMARYKEY
sqlite> select * FROM ZUSER;
1|1|1|test@mail.com|joe|P@ssw0rd|3214560099
sqlite>
Webkit Caching
¿Qué es WebKit Caching?
WebKit Caching se refiere al mecanismo de almacenamiento en caché utilizado por WebKit, el motor de renderizado de Apple en Safari y WebView en iOS y macOS. Este sistema permite que las páginas web, imágenes, scripts y otros recursos sean almacenados temporalmente en el dispositivo para mejorar el rendimiento y reducir la carga en la red.
El reto dice: las aplicaciones que utilizan UIWebView para cargar páginas web a menudo utilizan la caché para acelerar el tiempo de respuesta. En algunos casos, podrían almacenar en caché una respuesta que contendrá información confidencial. Tu tarea es encontrar el lugar donde se almacenan la petición y las respuestas en el sanbox de la aplicación.
Pista: Los nombres de las tablas de la base de datos que almacenan los datos en caché empiezan por cf_url

con la herramienta Grapefruit, podemos ver el archivo Cache.db

podemos consultarlo y ver las tablas con las que cuenta y su información

Nos vamos a conectar por SSH para tener una shell en el dispositivo, para que podamos llegar a este archivo y descargarlo
┌──(root㉿angussMoody)-[/home/angussmoody]
└─# ssh root@192.168.1.1
root@192.168.1.1's password:
iPad-21:~ root#
ahora vamos a buscar el archivo Cache.db con el comando find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "*Cache.db*"
iPad-21:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 root# find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "*Cache.db*"
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2/Cache.db
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2/Cache.db-shm
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2/Cache.db-wal
ahora vamos a la ruta y listamos el directorio y vemos el archivo Cache.db
iPad-21:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 root# cd /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2/
iPad-21:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2 root# ls -la
total 136
drwxr-xr-x 5 mobile mobile 160 Feb 18 11:48 ./
drwxr-xr-x 4 mobile mobile 128 Feb 18 11:48 ../
-rw-r--r-- 1 mobile mobile 61440 Mar 6 11:42 Cache.db
-rw-r--r-- 1 mobile mobile 32768 Mar 6 11:42 Cache.db-shm
-rw-r--r-- 1 mobile mobile 41232 Mar 6 11:42 Cache.db-wal
Descargamos este archivo
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOs/cache]
└─# scp root@192.168.1.1:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Caches/com.highaltitudehacks.DVIAswiftv2/Cache.db .
root@192.168.1.1's password:
Cache.db
podemos verlo con la herramienta sqlite3 y vemos una respuesta con una URL
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOs/cache]
└─# sqlite3 Cache.db
SQLite version 3.46.1 2024-08-13 09:16:08
Enter ".help" for usage hints.
sqlite> .tables
cfurl_cache_blob_data cfurl_cache_response
cfurl_cache_receiver_data cfurl_cache_schema_version
sqlite> select * from cfurl_cache_response;
1|0|1869847597|0|https://data.flurry.com/v1/flr.do|2025-02-18 16:48:13|
Ahora con la herramienta strings podemos ver mucha información
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOs/cache]
└─# strings Cache.db
SQLite format 3
indexreceiver_data_indexcfurl_cache_receiver_data
CREATE INDEX receiver_data_index ON cfurl_cache_receiver_data(entry_ID)t
indexproto_props_indexcfurl_cache_blob_data
CREATE INDEX proto_props_index ON cfurl_cache_blob_data(entry_ID)r
indextime_stamp_indexcfurl_cache_response
CREATE INDEX time_stamp_index ON cfurl_cache_response(time_stamp)u
indexrequest_key_indexcfurl_cache_response
CREATE INDEX request_key_index ON cfurl_cache_response(request_key)
etablecfurl_cache_receiver_datacfurl_cache_receiver_data CREATE TABLE cfurl_cache_receiver_data(entry_ID INTEGER PRIMARY KEY, isDataOnFS INTEGER, receiver_data BLOB)
1tablecfurl_cache_blob_datacfurl_cache_blob_data
CREATE TABLE cfurl_cache_blob_data(entry_ID INTEGER PRIMARY KEY, response_object BLOB, request_object BLOB, proto_props BLOB, user_info BLOB)P
Ytablesqlite_sequencesqlite_sequence
CREATE TABLE sqlite_sequence(name,seq)
gtablecfurl_cache_responsecfurl_cache_response
CREATE TABLE cfurl_cache_response(entry_ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, version INTEGER, hash_value INTEGER, storage_policy INTEGER, request_key TEXT UNIQUE,
time_stamp NOT NULL DEFAULT CURRENT_TIMESTAMP, partition TEXT)G
indexsqlite_autoindex_cfurl_cache_response_2cfurl_cache_response
indexsqlite_autoindex_cfurl_cache_response_1cfurl_cache_response
tablecfurl_cache_schema_versioncfurl_cache_schema_version
CREATE TABLE cfurl_cache_schema_version(schema_version INTEGER)
-https://data.flurry.com/v1/flr.do2025-02-18 16:48:13
O https://data.flurry.com/v1/flr.do
5 cfurl_cache_response
bplist00
WVersionUArray
_CFURLStringType\_CFURLString
!https://data.flurry.com/v1/flr.do#A
VServer\Content-TypeX__hhaa___
Strict-Transport-Security_
Content-LanguageTDate^Content-Length]Cache-ControlSATSYtext/html_
YnBsaXN0MDDXAQIDBAUGBwgKDA4QEhRWU2VydmVyXENvbnRlbnQtVHlwZV8QGVN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHlfEBBDb250ZW50LUxhbmd1YWdlVERhdGVeQ29udGV
udC1MZW5ndGhdQ2FjaGUtQ29udHJvbKEJU0FUU6ELWXRleHQvaHRtbKENXxAQbWF4LWFnZT0zMTUzNjAwMKEPUmVuoRFfEB1UaHUsIDA2IE1hciAyMDI1IDE2OjM2OjI5IEdNVK
ETUTShFV8QGHB1YmxpYywgbWF4LWFnZT0zMTUzNjAwMAgXHitHWl9ufH6ChI6Qo6WoqsrMztAAAAAAAAABAQAAAAAAAAAWAAAAAAAAAAAAAAAAAAAA6w==_
max-age=31536000Ren_
Thu, 06 Mar 2025 16:36:29 GMTQ4_
public, max-age=31536000_
__CFURLResponseNullTokenString__Ytext/html
bplist00
WVersionUArray
_CFURLStringType\_CFURLString
!https://data.flurry.com/v1/flr.do#@4
__CFURLRequestNullTokenString__
TPOST
!"#$%VAccept\Content-TypeX__hhaa___
X-Flurry-Api-Key_
Accept-Language^Content-Length_
Accept-EncodingS*/*_
application/o
O https://data.flurry.com/v1/flr.do
3 2025-02-18 16:48:13
ctet-stream_
YnBsaXN0MDDWAQIDBAUGBwkLDQ8RXxAPQWNjZXB0LUVuY29kaW5nVkFjY2VwdF5Db250ZW50LUxlbmd0aFxDb250ZW50LVR5cGVfEBBYLU
ZsdXJyeS1BcGktS2V5XxAPQWNjZXB0LUxhbmd1YWdloQhfEBFnemlwLCBkZWZsYXRlLCBicqEKUyovKqEMVDM1NTOhDl8QGGFwcGxpY2F0aW9uL
29jdGV0LXN0cmVhbaEQXxAUOFJNNVdIUDYyODg1M0hRWEZLRFihElVlcy1lcwgVJy49Sl1vcYWHi42SlK+xyMoAAAAAAAABAQAAAAAAAAATAAAAAAAAAAAAAAAAAAAA0A==_
8RM5WHP628853HQXFKDXUes-esT3553_
gzip, deflate, br
{"fl.frame.version":1,"fl.frame.log.counter":76}^
{"fl.sdk.version.code":"12.1.1","fl.frame.version":1,"fl.background.enabled":false}Y
{"fl.frame.version":1,"fl.device.properties":{"bnd.ver":"1","device.arch":"arm64","scr.height":"1024","device.os.version":"13.3.1","scr.width":"768","device.model.1":"iPad5,1"}}
{"fl.app.orientation":1,"fl.frame.version":1}k
{"fl.country":"CO","fl.language":"en","fl.frame.version":1}
{"fl.frame.version":1,"fl.ad.tracking":true,"fl.reported.id":{"iOSInstallationId":"IwNJCjOWTg+1DW4byBFCbA==","VendorId":"3E69204B-94BB-403B-A289-A9A0D22E25B1"}}fH
{"fl.timezone.value":"America\/Bogota","fl.frame.version":1}3
{"fl.frame.version":1,"fl.app.previous.state":0,"fl.app.current.state":1}
{"fl.background.session.metrics":true,"fl.frame.version":1,"fl.play.service.availability":-1,"fl.agent.version":283,"fl.apikey":"8RM5WHP628853HQXFKDX","fl.agent.report.key":1,"fl.agent.platform":8}
{"fl.cellular.name":"unavailable","fl.network.status":2,"fl.cellular.operator":"unavailable","fl.frame.version":2,"fl.cellular.band":"unavailable"}
{"fl.bundle.id":"com.highaltitudehacks.DVIAswiftv2","fl.app.version.code":"1","fl.app.version":"2.0","fl.frame.version":1,"fl.build.environment":1}
{"fl.frame.version":1,"fl.report.location.enabled":true,"fl.location.permission.status":false}
{"fl.session.elapsed.start.time":847659484,"fl.session.id.current.state":0,"fl.session.id":1741278849806,"fl.frame.version":1}
{"fl.cellular.name":"unavailable","fl.network.status":2,"fl.cellular.operator":"unavailable","fl.frame.version":2,"fl.cellular.band":"unavailable"}
{"fl.frame.version":1,"fl.app.previous.state":1,"fl.app.current.state":0}F
{"fl.frame.version":1,"fl.session.property":{"battery.remaining.start":{"value":"1"},"disk.size.used":{"value":"31031205888"},
"carrier.mnc":{"value":"unavailable"},"boot.time":{"value":"1740431190"},"carrier.mcc":{"value":"unavailable"},
"memory.available.start":{"value":"211566592"},"cpu.load.start":{"value":"0"},"disk.size.total":{"value":"127999954944"},
"disk.size.available":{"value":"96968749056"},"memory.used.inactive.start":{"value":"485359616"},"memory.total":{"value":"1639809024"},
"memory.used.wired.start":{"value":"292700160"},"battery.charging.start":{"value":"1"},"carrier.name":{"value":"unavailable"},"memory.used.active.start":{"value":"650182656"}}}@
{"fl.frame.version":1,"fl.report.previous.success":true}
{"fl.frame.version":1,"fl.report.previous.success":true}w\
{"fl.frame.version":1,"fl.app.previous.state":0,"fl.app.current.state":1}
{"fl.session.elapsed.start.time":847659484,"fl.session.id.current.state":0,"fl.session.id":1741278849806,"fl.session.elapsed.end.time":847798781,"fl.frame.version":1}
{"fl.continue.session.millis":10000,"fl.initial.timestamp":1739897292267,"fl.frame.version":1,"fl.session.event":"SESSION_PAUSE","fl.session.timestamp":1741278989104,"fl.session.state":0}
{"fl.frame.version":1,"fl.flush.frame.code":2,"fl.flush.frame.reason":"App State has changed"}
si organizamos esta data, podemos sacar esta información relevante
Información relevante extraída
🔑 Claves y tokens
fl.apikey:8RM5WHP628853HQXFKDXfl.agent.report.key:1fl.agent.version:283
📱 Información del dispositivo
- Modelo:
iPad5,1 - Arquitectura:
arm64 - Sistema operativo:
iOS 13.3.1 - Resolución de pantalla:
768x1024 - ID de instalación:
IwNJCjOWTg+1DW4byBFCbA== - Vendor ID:
3E69****-****-****-****-********25B1
🌍 Información de red y ubicación
- País:
CO - Idioma:
en - Zona horaria:
America/Bogota - Estado de red:
2(posiblemente “conectado”) - Operador celular:
unavailable - Banda celular:
unavailable
🔋 Estado del dispositivo
- Batería restante:
1(probablemente 100%) - Batería cargando:
1(cargando) - CPU load start:
0 - Memoria total:
1.6 GB(1639809024 bytes) - Memoria activa usada:
650 MB(650182656 bytes) - Memoria inactiva usada:
485 MB(485359616 bytes) - Memoria cableada usada:
292 MB(292700160 bytes) - Memoria disponible:
211 MB(211566592 bytes)
💾 Almacenamiento
- Espacio total:
127.99 GB - Espacio usado:
31 GB - Espacio disponible:
96.96 GB
🕒 Datos de sesión
- ID de sesión:
1741278849806 - Tiempo de inicio de sesión:
847659484 - Tiempo de finalización de sesión:
847798781 - Evento de sesión:
SESSION_PAUSE - Tiempo inicial:
1739897292267 - Timestamp de sesión:
1741278989104 - Duración continua de sesión:
10,000 ms
🌐 URLs Accedidas
https://data.flurry.com/v1/flr.do(múltiples veces)
Realm
¿Qué es Realm? Realm es un sistema de base de datos utilizado en aplicaciones móviles (iOS y Android) como alternativa a SQLite. Es rápida y eficiente, pero muchas veces las aplicaciones no protegen adecuadamente los datos almacenados en Realm, lo que permite a un atacante acceder a información sensible.
El reto dice: La entrada ingresada aquí se guarda en Realm. Tu tarea es encontrar dónde se almacena esta información en el sandbox de la aplicación

con la herramienta Grapefruit, podemos ver el archivo, vamos a realizar el proceso como el reto anterios para ver que información tiene

ingresamos por ssh
┌──(root㉿angussMoody)-[/home/angussmoody]
└─# ssh root@192.168.1.1
root@192.168.1.1's password:
iPad-21:~ root#
buscamos el archivo con el comando find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "**.realm*"
iPad-21:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 root# find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "**.realm*"
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Documents/default.realm
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Documents/default.realm.lock
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Documents/default.realm.management
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Documents/default.realm.note
Descargamos el archivo
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOs/cache]
└─# scp root@192.168.1.1:/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Documents/default.realm .
root@192.168.1.1's password:
default.realm
y con la herramienta realm studio, cargamos el archivo, en este caso vemos que maneja un error
cargamos el archivo

y vemos los resultados, en este caso no da información

Couchbase Lite
¿Qué es Couchbase Lite?
Couchbase Lite es una base de datos NoSQL embebida diseñada para aplicaciones móviles, incluyendo iOS. Permite almacenar y sincronizar datos de forma eficiente sin necesidad de una conexión permanente a internet. Se utiliza en aplicaciones que requieren almacenamiento local y sincronización con la nube cuando sea posible
El reto dice: La entrada introducida aquí se guarda en una base de datos de Couchbase Lite. Su tarea es encontrar dónde se almacena este valor en el sandbox de la App

el archivo se puede ver con la herramienta Grapefruit

ahora vamos a buscar el archivo para descargarlo
ingresamos por ssh
┌──(root㉿angussMoody)-[/home/angussmoody]
└─# ssh root@192.168.1.1
root@192.168.1.1's password:
iPad-21:~ root#
buscamos el archivo con el comando find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "*db.sqlite3*"
iPad-21:~ root# find /private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937 -name "*db.sqlite3*"
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Application Support/CouchbaseLite/dvcouchbasedb.cblite2/db.sqlite3
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Application Support/CouchbaseLite/dvcouchbasedb.cblite2/db.sqlite3-shm
/private/var/mobile/Containers/Data/Application/FEE1ECF4-9562-4EDA-BD52-AC31AEEB5937/Library/Application Support/CouchbaseLite/dvcouchbasedb.cblite2/db.sqlite3-wal
iPad-21:~ root#
ahora ya podemos descargar el archivo para verlo en local
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS/cache/copi]
└─# scp root@192.168.1.1:/var/mobile/Containers/Data/Application/7BA2CB88-F7F0-4800-A1BC-7FE9C6226728/Library/Application\ Support/CouchbaseLite/dvcouchbasedb.cblite2/db.sqlite3 .
root@192.168.1.1's password:
db.sqlite3 100% 4096 219.9KB/s 00:00
┌──(root㉿angussMoody)-[/mnt/angussMoody/iOS/cache/copi]
└─# ll
.rwxrwxrwx 4.1k angussmoody 7 Mar 12:50 db.sqlite3
YapDatabase
¿Qué es YapDatabase?
YapDatabase es una base de datos basada en SQLite optimizada para aplicaciones iOS y macOS. Se usa principalmente en apps que necesitan almacenamiento eficiente, indexación avanzada y sincronización.
El reto dice: La entrada introducida aquí se guarda utilizando una biblioteca YapDatabase. Su tarea es encontrar dónde se almacena este valor en el sandbox de la App.

a la aplicación de Grapefruit podemos ver el archivo llamado YapDatabase.sqlite

una vez abrimos este archivo podemos ver que cuenta con unas tablas, pero esta data aparce vacía

también si descargamos el archivo y lo vemos nos sale sin data
