ctf writeups ✏️
2024
UMDCTF 2024
GEEKCTF
- liquor: UTF-8 compatbile shared object
shellcode
- HNP: Solve orthogonal vectors and hidden
number problem with lattices
- SpARse: RSA wounded key recovery with
diffusely wounded d,p,q,dp,dq.
- SafeBlog2: SQL injection with
stored
LIKE
patterns
- PicBed: Request smuggling and Golang
path cleaning bypass
2023
SekaiCTF 2023
Bauhinia CTF 2023
GreyCTF 2023 Finals
- Baby Feistel: Invertible
feistel cipher implies weak round key derivation function + Hensel lift
- Iterated Polynomials:
Convert polynomial transformation into matrix discrete logarithm
- Smart: Cycle finding in random
function
- AES confusion: AES
decryption oracle + python PRNG recovery
- OTP 2: Variable juggling +
recover small discrete logarithms
- POTP: Search and prune on product
of polynomials
DEF CON CTF Qualifer 2023
- Artifact Bunker:
Template injection into YAML file and leaking data from tar archive using
partial zip overwrites
PlaidCTF 2023
- bivalves: Recover LFSR-like cipher
state using z3
- fastrology: Recover javascript
Math.random()
PRNG state from rounded outputs using equations in
F2
- The Other CSS: Break Content
Scrambling System-like block cipher, summation LFSR and auth handshake using
z3.
Hack-a-Sat 4 Qualifiers
- As Below: Automate static keygen for
multiple wasm key checker binaries
- Leavenworth Street: Use
docker forensics and crystal-lang binary reversing to understand judge
service, then implement a grid maze solver in javascript
- Hyde Street: Automate static
keygen for key checker binaries in javascript with access to source
- So Above: Automate static keygen for
key checker binaries in javascript using
iced-x86
and elfinfo
ACSC 2023
2022
STACK The Flags 2022
SECCON CTF 2022
- janken vs kurenaif:
Recover seed for python PRNG
- witches_symmetric_exam:
Chaining OFB padding oracle into ECB encryption oracle into GCM encryption /
decryption oracle
- insufficient: Break
multivariate polynomial shares with CVP
- this_is_not_lsb: RSA
interval oracle and binary search
- BBB: Polynomial RNG parameter
selection to make RNG cyclic + Hastad’s broadcast attack on RSA
- pqpq: Polynomial massaging to break
RSA
WMCTF 2022
UIUCTF 2022
MCH 2022
ImaginaryCTF 2022
- Poker: Recover python PRNG
behind a modulo
- Secure Encoding: Base64:
Revert substitution cipher on Base64 data using simulated annealing
- Living Without Expectations:
Break learning with errors with CVP
- Lorge: Break RSA key with
smooth primes using Pollard p-1 attack despite mitigations
- stream: Reverse binary
and derive LCG key
- hash: Custom hash collision
using z3
- otp: Biased one time pad
Google CTF 2022
- OCR: Leak images in a ML test set
with specially crafted model weights
- Cycling:
Recover RSA key from leaked kλ(n)
International Cybersecurity Challenge 2022
- Trademark: Attack-defense service with
polynomial cryptosystem and authorization bypass
SEETF 2022
- Probability:
Recover python PRNG from
random.random()
output + dynamic programming to win
blackjack
- To Infinity:
Pathfinding over finite field using CVP and continued fractions
- WeirdMachine:
Assembly golf with awkward branching behaviour
- Welcome:
Carving QR code from video with opencv
- Username Generator:
XSS using
window.name
2021
ACSC 2021
CTF.SG CTF 2021
- GRIC:
Linear checksum parameter recovery
- Live From Serangoon Road:
Recover LSFR state with z3
- TOTOTT:
Detecting pseudorandom functions with math and statistics
- Which Lee?:
Breaking toy neural network classifier with numerical instability
DSO-NUS CTF 2021
2020 and earlier
STACK the Flags 2020
Facebook CTF 2019
- keybaseish:
Generate valid RSA public key for a fixed signature
SwampCTF 2018