Analyse de fichiers
Glossaire
Magic Bytes = début du fichier
End Bytes = fin du fichier
Metadonnées
Type de fichier
file <file>
Rechercher dans des fichiers avec grep
grep <option> <motif/regex> <repertoire/fichier> | <filtre>
# -e MOTIF , -E MOTIF
# -i --ignore-case : ignore la casse
# -R -r, --recursive : recherche récursive dans le répertoire
# -l --files-with-matches : afficher le nom du fichier, pas le texte qui a matché.
# -v --invert-match : sélectionne les données qui correspondent à l'inverse du motif
# -n --line-number : afficher le numéro de ligne
# -o --only-matching : afficher seulement la partie qui match
# -A : nombre de ligne à afficher après le match
# -B : nombre de ligne à afficher avant le match
Recherche de liens
grep -Roni -E "[a-ZA-Z]{2,5}://[^]\"\<\>\^\`\{\|\}]*" ./folder/ | sort -u
Only http & https
grep -Roni -E "(http|https)://[^]\"\<\>\^\`\{\|\}]*" ./folder/ | sort -u
Recherche email
grep -Roni -E '[a-zA-Z0–9._%+-]+@[a-zA-Z0–9.-]+\.[a-zA-Z]{2,10}' ./folder/ | sort -u
extraction des domaines
grep -Roni -E "[a-zA-Z0–9._%+-]+@[a-zA-Z0–9.-]+\.[a-zA-Z]{2,10}" ./folder/ | sort -u | grep -oi -E "@[a-zA-Z0–9.-]+\.[a-zA-Z]{2,10}" | sort -u
Recherche d’adresses IP
IPv4
grep -Roni -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ./folder/ | sort -u
grep -Roni -E '192\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' ./folder/ | sort -u
Recherche de secrets
AWS / Google / JWT / SSH keys / API key others secrets keys :
grep -Roni -E "AKIA|AIza|eyJ|PRIVATE\sKEY|API[\s\-]KEY|ghp_|gitlab_|bitbucket_|xox[baprs]|sk_live_|sk_test_|api_key|secret_key|access_token|auth_token|password|private_key|client_secret|jwt_token|db_password|api_secret|encryption_key|app_secret|oauth_token|ssh_key|master_key|session_token|auth_key|service_account_key|refresh_token|service_account|(postgres|mysql)://"
grep -Roni -E "()"
Recherche de texte
grep -Rnil "text-to-find-here" ./folder/
grep -Rnil "text-to-find-here" -A 3 -B 3 ./folder/
Recherche dans un fichier binaire
grep <...> ./binary.raw --binary-files=text
Recherche regex dans des objets json
This python program returns object ids that match a wordlist of regex. The search is restricted to a predefined list of interesting fields within the object.
import sys
import os
if len(sys.argv) < 4:
print("Usage: python search_string.py '<json_file_path>' regex_wordlist.txt fields.txt")
sys.exit(1)
files = sys.argv[1]
regex_wordlist = sys.argv[2]
interesting_fields = sys.argv[3]
with open(regex_wordlist, "r") as file: search_regex = [line.strip() for line in file]
with open(interesting_fields, "r") as file: search_fields = [line.strip() for line in file]
all_commands = []
print(search_fields, "\n\n")
for regex in search_regex :
#TODO: replace ".users[]" with you object array selector
search = "echo '#regex:"+regex+"'; cat "+files+" | jq -C '[.users[] | select( "
array = []
regex = regex.replace('\\','\\\\')
for s in search_fields:
array.append('('+s+' and ('+s+' | test("'+regex+'";"i")))')
search += ' or '.join(array)
search += ")] | .[].id'"
all_commands.append(search)
print(search)
print("\n\n#results:>")
for cmd in all_commands :
os.system(cmd)
# regex_wordlist.txt
API_KEY
pass[a-ZA-Z0-9]+
ADMIN[0-9]{2,3}
# fields.txt
.id
.value
.info.comment
.options[0].details
Décodage de données
base64
<string> | base64 -d
cat <file> | grep -oE "[A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==" | base64 -d
hexadécimal
echo "<hexadecimal>" | xxd -r -p > output
Extraction de données
Fichiers de la suite Office
Les fichiers pris en charge par Microsoft Office utilisent le format OLE2. Les documents OOXML (.docx, .xlsm, etc.) pris en charge par MS Office utilisent la compression zip pour stocker le contenu. Les macros intégrées dans les fichiers OOXML sont stockées dans le fichier binaire OLE2 qui se trouve dans l’archive zip.
Objets OLE2
Un objet OLE (Object Linking and Embedding, liaison et incorporation d’objets) est un fichier externe (document, graphique ou vidéo) créé à l’aide d’une application externe et qui peut être inséré dans une autre application.
# lister les flux OLE2
oledump <file>
# Estraction du flux <s>
oledump -s <s> -v <file>
Objets RTF
Les documents RTF ne prennent pas en charge les macros, mais peuvent contenir d’autres fichiers intégrés en tant qu’objets OLE1.
rtfdump <file>
# lister les groupes dans le fichier
rtfdump <file> -f O
# extraire l'objet du groupe <g>
rtfdump <file> -s 5 -H -d > out.bin
Fichiers PDF
Magic Bytes : 0x255044462D
= %PDF-
End Bytes: 0x49454E44
= IEND
🗎 Structure
Comprendre les fichiers PDF Un fichier PDF est un ensemble d’objets liés entre eux par un dictionnaire.
Scan du dictionnaire d’objets
pdfid <file>
Recherche d’objets malformés
peepdf -fl <file>
Archives compressées
PKZIP / APK
Magic Bytes : 0x504B
= PK
Magic Bytes (archive vide) : 0x504B0506
Tools : unzip
, apktool
GZIP
Magic Bytes : 0x1F8B
Tools : unzip
TAR
Magic Bytes : 0x7573746172
Il est possible de lister les fichiers présents dans une archive ZIP même si celle-ci est chiffrée.
Fichiers Image
Extraction des propriétés d’une image
exiftool <image>
Les données se trouvant après les
End Bytes
sont sont ignorées par la plupart des visionneurs d’images.
JPEG , JPG
Magic Bytes : 0xFFD8FFE0
End Bytes: 0xFFD9
PNG
Magic Bytes : 0x89504E470D0A1A0A
= .PNG.
End Bytes: 0x49454E44
= IEND
.
Vérification de l’intégrité du fichier png
pngcheck <img>
pngcheck -v -f <img>
Excutables
MS-DOS, OS/2 or MS Windows
Magic Bytes : 0x4D5A
= MZ
Magic Bytes : 0x5A4D
= MZ
ELF
Magic Bytes : 0x7F454C46
= .ELF
Récupération de fichier
sudo foremost -v -q -i <file/data> -o <output/directory> #quick mode
sudo foremost -v -i <file/data> -o <output/directory>
sudo photorec <file/data>