Introduction AES (“Advanced Encryption Standard”) est un chiffrement symétrique par blocs. En effet, il repose sur le chiffrement de données découpées en plusieurs partie. Ainsi il en existe plusieurs modes : ECB CBC CFB OFB CTR CTS … Aujourd’hui, nous allons aborder une attaque présente sur l’AES en mode ECB . Comprendre le mode ECB Comme présenté avant, ECB est un mode de chiffrement des blocs d’information. (ECB pour Electronic Code Book)
Description Ce CTF est proposé par Intrinsec , crée par Th1b4ud et est constitué de 12 Challenges. On évolue tout au long des objectifs dans un réseau afin de compromettre toutes les machines les unes après les autres. Thèmes Web Pivoting Blockchain (SmartContract) Forensic Prérequis Du temps Un vps de préférence Connaissance basique de CTF *J’ai appris beaucoup de choses pendant la compétition et c’est assez facile à comprendre en faisant les challenges en parallèles.
RustyTheClown 2 | leHack CTF 2022 Fichier(s) RustyTheClown Nécessaires IDA/Ghidra Python3 Flag lh_68eca3c515dbefd71ec8fec3849ba0083af806447d9f9f7cdca2a5cc Solution détaillée Analyse Statique Le challenge est un crackme . On nous demande un mot de passe et celui est modifié puis comparé avant de nous donner ou non le flag . Désassemblons le binaire dans IDA : Dans void rustyTheClown::main::hecc4c87ee1b9aeab() voici ce qu’on trouve d’important : std::io::stdio::Stdin::read_line::hd0723957e63cf850(); if ( &unk_52408 ) core::ptr::drop_in_place$LT$std..io..error..Error$GT$::h815d6777c4f5f9e1(*((_QWORD *)&dest + 1)); v4 = 0LL; v3 = 1uLL; _$LT$core.
Mod ctfauth | Tjctf 2022 Fichier(s) Challenge files Challenge files Nécessaires Python3 + Ida + Ghidra Flag CTF{http_headers_amiright} Solution détaillée Partie 1: Découverte du challenge Ce challenge mélange un peu de Web et une majorité de reverse. Deux fichiers sont fournis, Une configuration apache2 Un fichier .so Le lien d’un site web (Hébergé en local pour le writeup) Voici ce que nous avons quand nous nous rendons sur le site :
Introduction AES (“Advanced Encryption Standard”) est un chiffrement symétrique par blocs. En effet, il repose sur le chiffrement de données découpées en plusieurs partie. Ainsi il en existe plusieurs modes : ECB CBC CFB OFB CTR CTS … Aujourd’hui , nous allons voir une attaque présente sur l’AES en mode CBC . Comprendre le mode CBC Comme présenté avant, CBC est un mode de chiffrement d’AES . CBC pour Chain By Chain Tout son fonctionnement peut être résumé dans le schéma suivant:
Eyes Closed | Hackrocks & HackArmour CTF 2022 Necessaires Netcat Python3 (+ pwntool) Flag flag{br0p0p0p0p0_with_f0rm4t_$7ringggg} Solution détaillée Le but du challenge est d’exploiter une format string puis d’utiliser un buffer overflow pour ainsi construire une ropchain et ainsi pouvoir prendre le contrôle du binaire grâce à une attaque ret2libc. Un peu d’explication : La méthode finale est la même que dans un de mes précédents article . Ce Writeup va donc se focaliser sur la partie Blind du challenge ainsi que l’exploitation des formats strings
Factor Master | Tjctf 2022 Fichier(s) Challenge files Necessaires Python3 + Pwntools Flag tjctf{S0_y0u_r34lly_c4n_F4c7t0r_4ny7th1nG_c36f63cfe73c} Solution détaillée Le challenge se décompose en 3 parties : 3 fois le serveur va nous fournir un nombre et nous allons devoir le factoriser en 2 produits de nombres premiers ; à la manière d’un chiffrement RSA. Commencons directement avec la première étape: Etape 1 : def challenge1(): p = getPrime(44) q = getPrime(1024) n = p * q return [p, q], n On remarque tous de suite de p est bien plus petit que q .
Vacation2 | Tjctf 2022 Fichier(s) Challenge files Necessaires Netcat Python3 (+ pwntool) Flag tjctf{w3_g0_wher3_w3_w4nt_t0!_66f7020620e343ff} Solution détaillée Le but du challenge est d’exploiter un buffer overflow pour ainsi construire une ropchain et ainsi pouvoir prendre le contrôle du binaire grâce à une attaque ret2libc. Un peu d’explication : Voici la source du challenge : #include <stdio.h> #include <stdlib.h> void vacation() { char buf[16]; puts("Where am I going today?"); fgets(buf, 64, stdin); } void main() { setbuf(stdout, NULL); vacation(); puts("hmm.
Fichier(s) Lucky Lucky.c Nécessaires Python3 (+ pwntool) Flag gigem{un1n1t14l1z3d_m3m0ry_15_r4nd0m_r1ght} Solution détaillée Le but du challenge est de sauter dans une fonction Win qui fait pop le flag : void win() { char flag[64] = {0}; FILE* f = fopen("flag.txt", "r"); fread(flag, 1, sizeof(flag), f); printf("Nice work! Here's the flag: %s\n", flag); } Malheureusement , un ret2win semble difficile à cause de : Un fget sécurisé : fgets(buf, sizeof(buf), stdin); La randomisation des adresses grâce à l’aslr Regardons le Main : int main() { setvbuf(stdout, NULL, _IONBF, 0); welcome(); srand(seed()); int key0 = rand() == 306291429; int key1 = rand() == 442612432; int key2 = rand() == 110107425; if (key0 && key1 && key2) { win(); } else { printf("Looks like you weren't lucky enough.
Fichier(s) Chall.py Flag_enc Nécessaires Python3 Flag CTF{267a4401ea64e7167168969743dcc708399e3823d40e4ae37c78d675e281cb14} Description Hello friends. Just a regular algorithm Flag format: CTF{sha256(message_decrypt)} Solution détaillée Dans Flag_enc on retrouve le flag chiffré : 242712673639869973827786401934639193473972235217215301 Analysons le chiffrement dans chall.py : flag = ' [test]' hflag = flag.encode('hex') iflag = int(hflag[2:], 16) def polinom(n, m): i = 0 z = [] s = 0 while n > 0: if n % 2 != 0: z.append(2 - (n % 4)) else: z.