PicoCTF Writeup #519

This is a forensics challenge from picoCTF (challenge ID 519). The goal is to recover a corrupted image file and extract the flag. The walkthrough includes exact commands, outputs, and common pitfalls encountered during solving. Challenge Setup Platform: picoCTF Practice Category: Forensics Difficulty: Beginner-Intermediate File: Download the provided “file” (no extension) Work in a fresh directory: mkdir picoctf-519 && cd picoctf-519 Initial File Analysis Run the basic file type check: $ file file file: data The “data” result indicates the file command cannot identify the format. Use hexdump for deeper inspection: ...

October 22, 2025 · 3 min · Deni Andrian Prayoga

PicoCTF Writeup #520

Hey folks, quick writeup on this PicoCTF challenge (ID 520) that was a solid reminder of how devs leave backdoors hanging out. It’s a web thing on their playground – nothing fancy, but it shows the classic “forgot to clean up” fuckup. Spoilers: Caesar cipher + sneaky header = flag. Let’s dive in. The Setup Head over to https://play.picoctf.org/practice/challenge/520, launch the instance. You’re supposed to log in with ctf-player@picoctf.org and some password. I try it – boom, “invalid request.” Lame. No brute-force vibes here; it’s not that kind of challenge. ...

October 22, 2025 · 2 min · Deni Andrian Prayoga

PicoCTF Writeup #523

Challenge: Flag in Flame This picoCTF challenge demonstrates how easily data can be disguised by simple encoding. The “log file” provided is not a log at all, but a Base64-encoded PNG image that contains the flag written as hexadecimal text. Download and initial inspection Start by downloading the provided file (for example, with wget or curl): wget https://challenge-files.picoctf.net/c_saffron_estate/<filename>/logs.txt or curl -O https://challenge-files.picoctf.net/c_saffron_estate/<filename>/logs.txt Before assuming it’s truly a text log, inspect it with a quick cat: ...

October 18, 2025 · 3 min · Deni Andrian Prayoga

PicoCTF Writeup #524

Challenge: Hidden in Plainsight Short summary: the image contains a Base64-encoded hint in its JPEG comment. That hint decodes to a string which itself is Base64-encoded — the result is the passphrase for steghide. Use steghide to extract flag.txt, then cat the file to read the flag. Fetch the challenge file If you haven’t downloaded the file yet, use curl or wget: # with curl curl -O https://challenge-files.picoctf.net/c_saffron_estate/25925d893c04723f46e8d1412559b15ef58509751801aac366c65441fed3e40e/img.jpg # or with wget wget https://challenge-files.picoctf.net/c_saffron_estate/25925d893c04723f46e8d1412559b15ef58509751801aac366c65441fed3e40e/img.jpg What this does: ...

October 18, 2025 · 3 min · Deni Andrian Prayoga

PicoCTF Writeup #527

Challenge: Log Hunt Short version: a plain text server log contained the flag split across repeated log entries. A few simple POSIX utilities (grep, awk, uniq, head, tr) and a tiny bit of shell plumbing reveal the flag. Below is a clean, reproducible walk-through with explicit command explanations so you know not only what to run, but why each step works. Setup and file inspection Download the provided file: https://challenge-files.picoCTF.net/c_saffron_estate/1a0b2a2a67149850cd0e6d34da005c381bbbed4c558e529fec8b3be3f8619046/server.log Open a terminal and inspect the file with some basics: ...

October 18, 2025 · 6 min · Deni Andrian Prayoga

PicoCTF Writeup #530

Challenge: Riddle Registry Every digital file has a story to tell — some louder than others. In this picoCTF forensics challenge, our mission was simple on paper (pun intended): find the flag hidden inside a PDF file. Of course, as any seasoned Linux user knows, “simple” often means “prepare for several hours of creative command-line archaeology.” The Setup Challenge: A suspicious-looking PDF file Goal: Find the flag Category: Forensics Opening the file showed nothing but Lorem Ipsum text and some odd blank spaces. That’s usually a hint in CTFs — if you can’t see it, it’s probably hidden somewhere else. ...

October 17, 2025 · 3 min · Deni Andrian Prayoga

PicoCTF Writeup #472

Challenge: Flag Hunters This challenge provides a Python script that at first glance looks like a quirky program for singing along to a set of lyrics. Buried inside, however, is the real objective: a flag hidden within the program’s text handling logic. Here is the full source code. import re import time # Read in flag from file flag = open('flag.txt', 'r').read() secret_intro = \ '''Pico warriors rising, puzzles laid bare, Solving each challenge with precision and flair. With unity and skill, flags we deliver, The ether’s ours to conquer, '''\ + flag + '\n' song_flag_hunters = secret_intro +\ ''' [REFRAIN] We’re flag hunters in the ether, lighting up the grid, No puzzle too dark, no challenge too hid. With every exploit we trigger, every byte we decrypt, We’re chasing that victory, and we’ll never quit. CROWD (Singalong here!); RETURN [VERSE1] Command line wizards, we’re starting it right, Spawning shells in the terminal, hacking all night. Scripts and searches, grep through the void, Every keystroke, we're a cypher's envoy. Brute force the lock or craft that regex, Flag on the horizon, what challenge is next? REFRAIN; Echoes in memory, packets in trace, Digging through the remnants to uncover with haste. Hex and headers, carving out clues, Resurrect the hidden, it's forensics we choose. Disk dumps and packet dumps, follow the trail, Buried deep in the noise, but we will prevail. REFRAIN; Binary sorcerers, let’s tear it apart, Disassemble the code to reveal the dark heart. From opcode to logic, tracing each line, Emulate and break it, this key will be mine. Debugging the maze, and I see through the deceit, Patch it up right, and watch the lock release. REFRAIN; Ciphertext tumbling, breaking the spin, Feistel or AES, we’re destined to win. Frequency, padding, primes on the run, Vigenère, RSA, cracking them for fun. Shift the letters, matrices fall, Decrypt that flag and hear the ether call. REFRAIN; SQL injection, XSS flow, Map the backend out, let the database show. Inspecting each cookie, fiddler in the fight, Capturing requests, push the payload just right. HTML's secrets, backdoors unlocked, In the world wide labyrinth, we’re never lost. REFRAIN; Stack's overflowing, breaking the chain, ROP gadget wizardry, ride it to fame. Heap spray in silence, memory's plight, Race the condition, crash it just right. Shellcode ready, smashing the frame, Control the instruction, flags call my name. REFRAIN; END; ''' MAX_LINES = 100 def reader(song, startLabel): lip = 0 start = 0 refrain = 0 refrain_return = 0 finished = False # Get list of lyric lines song_lines = song.splitlines() # Find startLabel, refrain and refrain return for i in range(0, len(song_lines)): if song_lines[i] == startLabel: start = i + 1 elif song_lines[i] == '[REFRAIN]': refrain = i + 1 elif song_lines[i] == 'RETURN': refrain_return = i # Print lyrics line_count = 0 lip = start while not finished and line_count < MAX_LINES: line_count += 1 for line in song_lines[lip].split(';'): if line == '' and song_lines[lip] != '': continue if line == 'REFRAIN': song_lines[refrain_return] = 'RETURN ' + str(lip + 1) lip = refrain elif re.match(r"CROWD.*", line): crowd = input('Crowd: ') song_lines[lip] = 'Crowd: ' + crowd lip += 1 elif re.match(r"RETURN [0-9]+", line): lip = int(line.split()[1]) elif line == 'END': finished = True else: print(line, flush=True) time.sleep(0.5) lip += 1 reader(song_flag_hunters, '[VERSE1]') Although the file looks long and perhaps intimidating, most of the code is simply song lyrics wrapped in string variables and some straightforward branching logic to print them out. The actual vulnerability lies in how the script processes user input during the “crowd participation” parts of the song. ...

October 4, 2025 · 6 min · Deni Andrian Prayoga

PicoCTF Writeup #475

The hashcrack challenge from PicoCTF is a practical demonstration of the security risks posed by weak hashing algorithms for passwords. In this write-up, I will detail the steps taken to solve the challenge, the reasoning behind each decision, and the security lessons that can be learned from this exercise. You can try and solve it yourself here. Challenge Overview The challenge description states that a company’s server was breached because the administrator used weakly hashed passwords. Our goal is to gain access to the secret message stored on that server. To start, we are given the connection details: ...

August 26, 2025 · 4 min · Deni Andrian Prayoga

PicoCTF Writeup #482

Hacking Profile Pictures Like It’s 2005 (picoCTF Web Exploit Writeup) So, I tried another picoCTF challenge and this one was basically: 👨‍💻 “A developer added profile picture uploads. What could possibly go wrong?” If you’ve ever touched PHP (I’m sorry) you already know the answer: literally everything. The challenge: Standard Pizzas 🍕 Upload Feature? More Like Upload Malware The site lets you upload an image and then proudly tells you where it lives: ...

August 20, 2025 · 2 min · Deni Andrian Prayoga

PicoCTF Writeup #490

Binary Exploitation Challenge (PIE & Function Hijacking in picoCTF) I’ve always been fascinated by low-level programming and security, but up until now I hadn’t really tried a binary exploitation challenge. Recently, I stumbled upon this picoCTF challenge called “rescue-float” — and let me tell you, it was a mix of confusion, discovery, and a little bit of victory at the end. This post is a casual walkthrough of how I approached it as a beginner. If you’re into Linux, development, or cybersecurity, you’ll probably find this fun (or at least relatable if you remember your first binary exploitation adventure). ...

August 19, 2025 · 4 min · Deni Andrian Prayoga