September 7, 2026
Fools Mate โ TryHackMe Writeup
Fools Mate is a TryHackMe room based on a chess web application. The challenge looks like a simple chess puzzle, but the real goal is toโฆ

By mayhack
3 min read
Fools Mate is a TryHackMe room based on a chess web application. The challenge looks like a simple chess puzzle, but the real goal is to understand how the web application communicates with its backend.
The challenge asks us to bypass the chess engine and obtain the flag.
๐๐ฎ๐ฏ ๐ข๐๐ฒ๐ฟ๐๐ถ๐ฒ๐
Room Name: Fools Mate Platform: TryHackMe Difficulty: Easy Category: Web
The room provides a chess web application where we need to find a way to make the required move and retrieve the flag.
๐๐ฐ๐ฐ๐ฒ๐๐๐ถ๐ป๐ด ๐๐ต๐ฒ ๐ช๐ฒ๐ฏ ๐๐ฝ๐ฝ๐น๐ถ๐ฐ๐ฎ๐๐ถ๐ผ๐ป
After starting the machine, I opened the provided machine IP in the browser.
The application displayed a chess board with the message:
Mate-in-one ยท White to move
At first, it looked like we simply needed to find the correct chess move.
However, when I tried making the move directly through the browser, the application triggered a message.
This made me look at what was actually happening behind the scenes.
๐๐ป๐๐ฒ๐ฟ๐ฐ๐ฒ๐ฝ๐๐ถ๐ป๐ด ๐๐ต๐ฒ ๐ฅ๐ฒ๐พ๐๐ฒ๐๐ ๐๐ถ๐๐ต ๐๐๐ฟ๐ฝ ๐ฆ๐๐ถ๐๐ฒ
Instead of interacting only with the frontend, I opened Burp Suite and intercepted the request generated when making a chess move.
After making a move on the board, Burp captured the request sent to the backend.
The request was sent to:
POST /api/move
The body contained two parameters:
{ "from": "h2", "to": "h4" }
This was interesting because the browser was simply sending the starting and destination squares to the backend.
๐จ๐ป๐ฑ๐ฒ๐ฟ๐๐๐ฎ๐ป๐ฑ๐ถ๐ป๐ด ๐๐ต๐ฒ ๐ฅ๐ฒ๐พ๐๐ฒ๐๐
The important parameters were:
"from"
and
"to"
The from parameter represents the starting square, while to represents the destination square.
Instead of depending on what moves the frontend allowed, I could directly modify these values inside the intercepted HTTP request.
๐ ๐ฎ๐ป๐ถ๐ฝ๐๐น๐ฎ๐๐ถ๐ป๐ด ๐๐ต๐ฒ ๐ ๐ผ๐๐ฒ
I modified the intercepted request and sent the move directly to the backend.
The request contained:
{ "from": "a1", "to": "a8" }
After forwarding the request, the server processed the move.
The response was:
{ "ok": true, "move": "โฆ", "status": "checkmate", "turn": "b", "winner": "white", "flag": "THM{โฆ}" }
The interesting part was that the server response itself contained the flag.
I won't include the actual flag here so readers can solve the challenge themselves.
๐ช๐ต๐ฎ๐ ๐๐ฎ๐ฝ๐ฝ๐ฒ๐ป๐ฒ๐ฑ?
The main point of the challenge was not really about playing chess.
The browser provides a chess interface, but behind that interface it communicates with a backend API.
When a move is made, the browser sends something similar to:
{ "from": "a1", "to": "a8" }
to the:
/api/move
endpoint.
By intercepting the request with Burp Suite, we can see exactly what the application is sending to the server.
Instead of relying on the restrictions of the frontend, we can test how the backend handles the request directly.
๐ช๐ต๐ ๐๐ผ๐ฒ๐ ๐ง๐ต๐ถ๐ ๐ช๐ผ๐ฟ๐ธ?
The important security concept here is:
Never trust the client.
The chess board is only the frontend. Any data sent by the browser can potentially be intercepted and modified before reaching the server.
If the backend does not properly validate the requested action, an attacker may be able to send requests that the frontend would normally prevent.
This is why security checks should always be performed on the server side.
๐๐ฒ๐ ๐๐ฒ๐ฎ๐ฟ๐ป๐ถ๐ป๐ด๐
โข The frontend should never be considered trusted. โข Client-side restrictions can be bypassed by modifying requests. โข Burp Suite can be used to intercept and modify HTTP requests. โข APIs should validate every important parameter on the server side. โข The actual application logic may be different from what the frontend allows. โข Inspecting API requests is an important part of web application testing.
๐๐ถ๐ป๐ฎ๐น ๐ง๐ฎ๐ธ๐ฒ๐ฎ๐๐ฎ๐
Fools Mate looked like a simple chess challenge, but the interesting part was actually the communication between the frontend and backend.
By capturing the chess move request in Burp Suite, I could see the parameters being sent to the /api/move endpoint.
After modifying the request, the backend returned a successful response containing the flag.
The main lesson is simple:
Don't trust what the frontend tells you. Always check what the backend actually accepts.
๐๐ผ๐ป๐ฐ๐น๐๐๐ถ๐ผ๐ป
This was a short but useful challenge for understanding how client-side logic can be bypassed by interacting directly with an application's API.
Burp Suite made it easy to capture the request, modify the parameters, and observe the server's response.
๐ฌ Stay Connected
If you found this helpful and want to learn more about web security, hands-on labs, feel free to follow me for upcoming posts.
โ๏ธ Follow me for more cybersecurity write-ups ๐ LinkedIn โ codermayank ๐ธ Instagram โ @mayhack_
Tags: #BugBounty #EthicalHacking #CyberSecurity #Linux #PwnCollege #CTF #CaptureTheFlag #LinuxSecurity #PenetrationTesting #WebSecurity #InfoSec