Logo

Les qualifs du Jordan Infocsec CTF 2020 (JISCTF) se tenaient du 19 au 21 novembre 2020. Au menu: crypto & stego, forensics, misc, reversing et web.

Voici quelques write-up des challenges proposés lors des qualifications du JISCTF 2020

1. Forensics

1.1 Malicious

Chall

root@Host-001:/tmp# binwalk -e attachment.docx 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Zip archive data, at least v2.0 to extract, name: [Content_Types].xml
387           0x183           Zip archive data, at least v2.0 to extract, name: _rels/.rels
661           0x295           Zip archive data, at least v2.0 to extract, name: docProps/app.xml
1012          0x3F4           Zip archive data, at least v2.0 to extract, name: docProps/core.xml
1430          0x596           Zip archive data, at least v2.0 to extract, compressed size: 3471, uncompressed size: 15660, name: image.png
4940          0x134C          Zip archive data, at least v2.0 to extract, name: word/_rels/document.xml.rels
5237          0x1475          Zip archive data, at least v2.0 to extract, name: word/document.xml
6254          0x186E          Zip archive data, at least v2.0 to extract, name: word/fontTable.xml
6603          0x19CB          Zip archive data, at least v2.0 to extract, name: word/media/image1.jpeg
75885         0x1286D         Zip archive data, at least v2.0 to extract, name: word/settings.xml
76113         0x12951         Zip archive data, at least v2.0 to extract, name: word/styles.xml
77537         0x12EE1         End of Zip archive, footer length: 22

root@Host-001:/tmp# cd _attachment.docx.extracted/
root@Host-001:/tmp/_attachment.docx.extracted# ls
 0.zip  '[Content_Types].xml'   docProps   image.png   _rels   word

image.png -> impossible d’ouvrir le fichier

root@Host-001:/tmp/_attachment.docx.extracted# file image.png 
image.png: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=7, manufacturer=BeFunky, orientation=upper-left, xresolution=106, yresolution=114, resolutionunit=2, software=BeFunky Photo Editor], baseline, precision 8, 642x76, components 3

C’est un jpeg!

root@Host-001:/tmp/_attachment.docx.extracted# cp image.png image.jpeg

Image

On a un code-barres. Le déchiffrer avec https://online-barcode-reader.inliteresearch.com/

Image

Image

Flag: JISCTF{B4RC0D3_1M4G3_2019}

1.2 So Easy

Image

Ouvrir le pcap avec Wireshark. Lancer une recherche par chaine de caractères. Chercher ‘jis’

Image

On a le flag dans le champ username

JISCTF{V3RY_34SY_PC4P_F1L3}

1.3 Malicious 2

Image

Document word chiffré:

Image

root@Host-001:/tmp# file mycv.docx 
mycv.docx: CDFV2 Encrypted
root@Host-001:/tmp# 

CDFV2 - Encrypted Compound Document Format. Voir https://isc.sans.edu/forums/diary/Quick+Analysis+of+an+Encrypted+Compound+Document+Format/25826/

Semble utilisé pour bypass le filatrage des pj aux e-mails

Image

CDFV2 peut être déchiffré avec John The Ripper: office2john

Ref: https://github.com/cHo0s3N/JustCTF

root@Host-001:/tmp# python3 /usr/share/john/office2john.py mycv.docx > hash.txt
root@Host-001:/tmp# cat hash.txt 
mycv.docx:$office$*2007*20*128*16*6054846762510f801f75d44d2d81ee98*2e39d30eac11bd4dafc83c5a197bde0a*cfa9f22cde46863f4bbed00e8fb343eb1f11da12
root@Host-001:/tmp# 

Image

mdp = princess101

ouvrir le document word .docx avec ce mdp

Image

Image

Flag: JISCTF{H4PPY_HUNT1NG}

1.4 Unknown Ransomware

Image

Image

Le fichier semble être encodé en base 64

On utilise CyberChef https://gchq.github.io/CyberChef/ pour déchiffrer et on se rend vite compte qu’il y a plusieurs itérations de chiffrement en b64

On scripte:

Image

On lance ce script qui fini par planter après un certain nombre d’itérations (décodage du base 64 précédent). Lors du plantage on remarque GNP, RDHI ,BGR, etc. des indicateurs qui font penser à un png.

Le script plante car il ne peut pas décoder un fichier PNG.

On modifie le script pour extraire le fichier PNG.

Image

Script disponible ici: https://github.com/0xSs0rZ/CTF/blob/master/recursive_base64.py

root@Host-001:~/Bureau/OTA# cat decrypt.py 
#!/usr/bin/python3

import base64

with open("flag.enc", "rb") as cipher:
    c = cipher.read()
   
plaintext = base64.b64decode(c)

while 'jisctf' not in str(plaintext):
    plaintext = base64.b64decode(plaintext)
    print(plaintext)
    if '\\n\\rGNP' in str(plaintext):
        print('writing png')
        f=open("test","wb")
        f.write(plaintext)
        f.close()

Fichier extrait test:

Image

Renverser le contenu du binaire:

< test xxd -p -c1 | tac | xxd -p -r > test.png

Ref: https://unix.stackexchange.com/questions/416401/how-to-reverse-the-content-of-binary-file

Image

Ouvrir test.png

Image

Inverser pour avoir le flag

JISCTF{R3V3RS3_1M4G3_C0NT3NTS}

1.5 Colorfull (incomplet)

Image

Image

Dans les trames FTP il y a une référence à un fichier files.zip qui contiendrait un fichier nommé secret_data.txt

Extraction du fichier zip:

Ref: How to extract ftp files from wireshark packet

Sélectionner le paquet concerné, ici le paquet 524, clic droit: Suivre > Flux TCP

Image

Signature fichier zip: PK\x01\x02 Ref: https://forensicswiki.xyz/wiki/index.php?title=ZIP

Enregistrer (‘Save as’) en données brut:

Image

root@Host-001:~/Bureau/OTA# file files.zip 
files.zip: Zip archive data, at least v?[0x333] to extract
root@Host-001:~/Bureau/OTA# 

Image

Zip protégé par mdp

Impossible de cracker le mdp avec fcrackzip… :(

2. Crypto & Stego

2.1 Hidden

Image

Fichier png:

Image

Steganographie.

Outil en ligne: https://stylesuxx.github.io/steganography/

Résultat:

Image

Flag: JISCTF{G00D_J0B_Y0U_EXTR4KT_M3!!!}

2.2 Upside Down!!

Image

Try to decrypt me?

JISCTF{fkhrwv_wldm_vmtorhs_xszizxgvih_xibkgltizksb}

Substitution alphabétique

Outil Cryptii: https://cryptii.com/pipes/alphabetical-substitution

Image

Flag: upside_down_english_charaters_cryptography

2.3 Baby Crypto

Image

On a 2 fichiers: le script de chiffrement baby.py et un fichier chiffré flag.enc

baby.py:

root@Host-001:~/Bureau/OTA# cat baby.py 
import random
import sys
import time

ct = str(time.time()).encode('ASCII')
random.seed(ct)
flag = 'data_here'.encode('ASCII')
k1 = [random.randrange(256) for _ in flag]
ciphertext = [m ^ k for (m,k ) in zip(flag + ct, k1 + [0x99]*len(ct))]

with open(sys.argv[1], "wb") as f:
    f.write(bytes(ciphertext))

Image

C’est la même chose que pour 34c3 Junior CTF

Ref:

On adapte le script de vishnudevtj pour qu’il correspond à notre situation:

root@Host-001:~/Bureau/OTA# cat poc.py
import random
import sys
import time


with open("flag.enc", "rb") as f:
    enc = list(f.read())
time = []
for i in enc[len(enc) - 18:len(enc)]:
    time.append(i ^ 0x99)
msg = enc[:len(enc) - 18]

random.seed(''.join([chr(i) for i in time]))

key = [random.randrange(256) for _ in msg]
c = [int(m) ^ int(k) for (m, k) in zip(msg + time, key + [0x99] * len(time))]

print(''.join([chr(i) for i in c]))

root@Host-001:~/Bureau/OTA# python3 poc.py
JISCTF{B4BY_ENCRYPT10N_JISCTF2020_QUALIFICATION_RND_101}¨¯©¬®ªª¯©©·¯ª©¡¡©­

Image

Flag: JISCTF{B4BY_ENCRYPT10N_JISCTF2020_QUALIFICATION_RND_101}

3.Web

3.1 Web 101 (Incomplet)

Image

Image

Rien de spécial dans le code source

On énumère les dossiers avec dirb. On trouve /blog

Image

Wpscan ne liste pas de plugin pour ce site mais on vérifie manuellement en visitant /wp-content/plugins

Image

Image

Localize My Post est vulnérable aux LFI: https://www.exploit-db.com/exploits/45439

OUI ON A BIEN UNE LFI :)

http://ec2-18-221-119-66.us-east-2.compute.amazonaws.com/blog/wp-content/plugins/localize-my-post/ajax/include.php?file=../../../../../../../../../../etc/passwd

Image

On essaye de lire wp-config.php mais impossible… Acces à index.php mais impossible de l’extraire en base64. Les filtres php semblent être interdits :(

Poursuivez avec :

CC-BY

This work is licensed under a Creative Commons Attribution 4.0 International License.