Sanity - sanity - 5 points
Join our discord: https://discord.gg/dwYNJ7M
On se connecte et dans le channel #Rules on trouve le flag:
Web - Widthless - 50 points (incomplet)
Welcome to web! Let's start off with something kinda funky :) http://web.chal.csaw.io:5018
root@Host-001:~/Bureau/OTA/csaw_quals_2020# wget http://web.chal.csaw.io:5018/
--2020-09-12 07:48:30-- http://web.chal.csaw.io:5018/
Résolution de web.chal.csaw.io (web.chal.csaw.io)… 216.165.2.41
Connexion à web.chal.csaw.io (web.chal.csaw.io)|216.165.2.41|:5018… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 5858 (5,7K) [text/html]
Sauvegarde en : « index.html »
index.html 100%[===================>] 5,72K --.-KB/s ds 0,002s
2020-09-12 07:48:30 (3,24 MB/s) — « index.html » sauvegardé [5858/5858]
root@Host-001:~/Bureau/OTA/csaw_quals_2020# xxd index.html
En analysant l’hexadecimal, on trouve des caractères ‘invisibles’:
Ces caractères sont également visibles si on ouvre index.html avec Vim:
On trouve aussi un commentaire ‘zwsp is fun’. Voir https://en.wikipedia.org/wiki/Zero-width_space
Ref: https://rawsec.ml/en/HackIT-2018-write-ups/#1-get-going-misc
On va utiliser: https://github.com/offdev/zwsp-steg-js
javascript decode.js:
Warning:Les caractères unicode ne sont pas visibles avec cat
root@Host-001:~/Bureau/OTA/csaw_quals_2020# cat decode.js
const ZwspSteg = require('zwsp-steg');
let decoded = ZwspSteg.decode('</html>');
console.log(decoded);
root@Host-001:~/Bureau/OTA/csaw_quals_2020# node decode.js
b'YWxtMHN0XzJfM3o='
root@Host-001:~/Bureau/OTA/csaw_quals_2020# echo YWxtMHN0XzJfM3o= | base64 -d
alm0st_2_3z
Je pensais que c’était le flag (pas pu vérifier, un membre de mon équipe avait déjà validé le chall…), en fait non :( Voir ici pour la suite.
Crypto - Perfect Secrecy - 50 points
Alice sent over a couple of images with sensitive information to Bob, encrypted with a pre-shared key. It is the most secure encryption scheme, theoretically...
2 images image1.png et image2.png sont téléchargeables.
Image 1:
Image 2:
Ref:
- http://dann.com.br/alexctf2k17-crypto100-many_time_secrets/
- https://blog.hackeriet.no/shortest-image-xor/
Xor image1 et image2:
root@Host-001:~/Bureau/OTA/csaw_quals_2020# convert image1.png image2.png -fx "(((255*u)&(255*(1-v)))|((255*(1-u))&(255*v)))/255" C.png
convert-im6.q16: iCCP: profile 'ICC Profile': 'RGB ': RGB color space not permitted on grayscale PNG `image1.png' @ warning/png.c/MagickPNGWarningHandler/1667.
root@Host-001:~/Bureau/OTA/csaw_quals_2020#
On ouvre C.png:
root@Host-001:~/Bureau/OTA/csaw_quals_2020# echo 'ZmxhZ3swbjNfdDFtM19QQGQhfQ==' | base64 -d
flag{0n3_t1m3_P@d!}root@Host-001:~/Bureau/OTA/csaw_quals_2020#
Crypto - Modus_Operandi - 100 points (non résolu)
Can't play CSAW without your favorite block cipher!
nc crypto.chal.csaw.io 5001
Trouver si du CBC ou du ECB est utilisé … ressemble à cryptopals set 2 - 11
Script: modus_operandi.py
root@Host-001:~/Bureau/OTA/csaw_quals_2020# cat modus_operandi.py
from pwn import *
#Ref: https://github.com/JesseEmond/matasano-cryptopals/blob/master/src/aes.py
#Ref: https://raywang.tech/2017/03/07/set2_writeup/
def get_blocks(bytes_, blocksize=16):
return [bytes_[i:i+blocksize] for i in range(0, len(bytes_), blocksize)]
def cbc_or_ecb(rep):
cipher = str(rep)
cipher = cipher.replace('Ciphertext is: ','')
cipher = cipher.replace('ECB or CBC?','')
#print cipher
#Ref: https://github.com/JesseEmond/matasano-cryptopals/blob/master/src/set_2/11.py
blocks = get_blocks(str.encode(cipher))
unique_blocks = len(set(blocks))
guess = "ECB" if unique_blocks != len(blocks) else "CBC"
#print guess
return guess
def send_payload():
payload = 'A'*199
r.sendline(payload)
rep = r.recv()
print rep
print cbc_or_ecb(rep)
r.sendline(cbc_or_ecb(rep))
#print r.recv()
resp = r.recv()
print 'resp send_payload ' + resp
#return resp
r = remote('crypto.chal.csaw.io', 5001)
print r.recv()
for i in range(200):
print '======== Essai ' + str(i) + ' ========'
send_payload()
root@Host-001:~/Bureau/OTA/csaw_quals_2020#
Je sais pas pourquoi ça plante à la 177e iteration….
Réponse:
Il fallait itérer 176 fois et créer une chaine avec 0 si ECB et 1 si CBC pour obtenir du binaire. Voir par exemple ce write-up
Poursuivez avec :
This work is licensed under a Creative Commons Attribution 4.0 International License.