Skip to main content

WebNet1 picoCTF 2019 Solution

Analyze an encrypted network capture and inspect the transferred files to locate the real flag.

Published: April 2, 2026Updated: August 13, 2026

Description

We found another packet capture and key file. The flag has moved - it is no longer in the HTTP headers. Download both the pcap and the key.

Download the pcap file and the RSA private key file from the challenge page.

Open the capture in Wireshark (same setup as WebNet0).

Solution

Want to try it yourself first?

The guided walkthrough reveals hints one step at a time.

Walk me through it
  1. Step 1Decrypt the TLS traffic using the key
    Observation
    The challenge provides an RSA private key alongside the pcap. So the capture holds encrypted TLS traffic that Wireshark can decrypt after the fact, given the server's key.
    Add the provided RSA key in Wireshark's TLS preferences (Edit > Preferences > Protocols > TLS > RSA keys list). Re-open the pcap. The encrypted traffic becomes readable HTTP. Follow the TLS streams and look at the HTTP response bodies.
    Learn more

    When you follow the first TLS stream you will find a Pico-Flag HTTP header, but it reads picoCTF{this.is.not.your.flag.anymore}. That is a deliberate decoy. The challenge description hints that the flag has moved, so keep looking.

    One of the HTTP responses transfers a JPEG image (vulture.jpg). The real flag is a plain string embedded inside that image file, not in the HTTP headers.

  2. Step 2Export the transferred image and search it for the flag
    Observation
    The decrypted HTTP stream carries a JPEG, vulture.jpg, and the description says the flag has moved out of the HTTP headers. So it is embedded as a raw string inside the image itself.
    Use Wireshark's File > Export Objects > HTTP (or tshark --export-objects) to save the JPEG from the capture. Then run the strings command on the saved file and grep for the flag prefix. The flag appears as a plain string inside the image file.
    bash
    # Export HTTP objects with tshark (alternative to Wireshark GUI):
    bash
    tshark -r capture.pcap -o 'ssl.keys_list:0.0.0.0,443,http,picopico.key' --export-objects 'http,out'
    bash
    bash
    # Search the exported JPEG for the flag string
    bash
    strings out/vulture.jpg | grep pico

    Expected output

    picoCTF{honey.roasted.peanuts}
    What didn't work first

    Tried: Run strings on the original pcap file instead of the exported JPEG to find the flag.

    The pcap stores raw TLS ciphertext, so strings on it returns garbled binary and no readable flag. The flag only becomes plain ASCII once the TLS layer is stripped and the JPEG payload is extracted. Export HTTP objects first, then run strings on the resulting image.

    Tried: Use steghide to extract hidden data from the exported vulture.jpg.

    steghide expects a passphrase and looks for data hidden by its own LSB algorithm. This JPEG carries no steghide payload: the flag was simply appended or embedded as a raw string. strings finds it immediately, with no passphrase and no stego tool.

    Learn more

    strings extracts printable character sequences from any binary file. Because the flag was stored as a raw ASCII string inside the JPEG data, no image-analysis tool is needed - a simple grep finds it immediately.

    This challenge demonstrates that when network traffic contains binary files, those files may themselves contain hidden data. Checking transferred files with strings or a hex viewer is a fast first step before reaching for heavier forensics tools.

Interactive tools
  • Hex ViewerView text or raw hex bytes as a xxd-style hex dump with byte offset, hex columns, and ASCII sidebar. Highlights printable characters and null bytes.
  • Strings ExtractorPull printable text from any binary, library, or image. ASCII and UTF-16 detection, configurable minimum length, flag-like highlight, no command line needed.

Flag

Reveal flag

picoCTF{honey.roasted.peanuts}

Decrypt the TLS stream with the RSA key, export the transferred JPEG, then run strings on it to find the flag stored as a plain string inside the image file.

Key takeaway

TLS protects data in transit only for as long as the private key stays secret. Once a server's RSA private key is known, Wireshark can retrospectively decrypt every recorded session that used it for key exchange, exposing every byte transferred, files in HTTP responses included. That is why modern TLS deployments prefer forward-secret key exchange like ECDHE, so compromising a long-term key does not unlock past sessions.

Related reading

Useful tools for Forensics

Where to go next