Skip to content

Commit b772ebf

Browse files
Merge pull request #38 from Chessi99/Chessi99
Challenges Franco Massacesi
2 parents 5039051 + 432fa92 commit b772ebf

13 files changed

Lines changed: 1043 additions & 0 deletions

File tree

2025/Chessineta/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# NexHunt CTF 2025
2+
3+
## Ingregantes:
4+
5+
- Franco Massacesi - 15333/0
6+
7+
8+
Asignatura: Desarrollo Seguro de Aplicaciones (Universidad Nacional de La Plata - Facultad de Informática)
9+
10+
## Datos del evento:
11+
12+
Los writeups corresponden al evento **NexHunt CTF** entre Jueves 11 de Diciembre 2025 15:00 a Sabado 13 Dic 2025 07:00.
13+
14+
- URL del evento: [https://nexus-security.club/](https://nexus-security.club/)
15+
16+
## Desafíos resueltos:
17+
18+
Se resolvieron los siguientes challenges:
19+
20+
| Challenge | Categoría |
21+
| --------- | --------- |
22+
| Secure Storage | Web |
23+
| Calculator | Net |
24+
| Chain Clue | Blockchain |
25+
26+
URL del team: [https://nexus-security.club/teams/398](https://nexus-security.club/teams/398)

2025/Chessineta/reto1/README.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# 🔐 Challenge: Secure Storage
2+
3+
**Categoría:** Web
4+
5+
## 📝 Análisis del Mecanismo
6+
Tras revisar el código fuente (Golang) y el entorno Docker, se detectó que el servidor no procesaba las rutas de archivos en texto plano. Implementaba una capa de "seguridad" por oscuridad antes de acceder al sistema de archivos.
7+
8+
El mecanismo era una operación **XOR (Exclusive OR)**. El servidor combinaba la entrada del usuario con una clave (Key) estática.
9+
10+
**Lógica del Servidor:**
11+
```math
12+
Ruta_Final = Input_Usuario \oplus Clave_XOR
13+
```
14+
15+
## 🧠 Vector de Ataque
16+
17+
### 1. El Problema del Path Traversal
18+
El objetivo era realizar un Path Traversal clásico (`../../../flag.txt`). Sin embargo, al enviar esta cadena en texto plano, el servidor la "desencriptaba" (aplicando XOR), resultando en bytes basura que no correspondían a ninguna ruta válida.
19+
20+
### 2. Known Plaintext Attack (Recuperación de la Clave)
21+
Para poder enviar un payload válido, necesitábamos conocer la **Clave XOR**. Utilizamos un ataque de texto plano conocido:
22+
1. **Plaintext:** Descargamos el archivo `/logo.png` de forma legítima (público).
23+
2. **Ciphertext:** Descargamos el mismo archivo a través del endpoint vulnerable (`/download/...`).
24+
3. **Cálculo:** Debido a las propiedades conmutativas de XOR, pudimos recuperar la clave:
25+
26+
```math
27+
Clave = Plaintext \oplus Ciphertext
28+
```
29+
30+
## 🧨 Explotación
31+
32+
Se desarrolló un script automatizado en Python que realiza los siguientes pasos:
33+
1. Sube un archivo temporal para obtener una sesión válida.
34+
2. Descarga el recurso público y su versión cifrada para calcular la **Keystream**.
35+
3. Descarga la flag cifrada mediante Path Traversal.
36+
4. Descifra la flag localmente usando la clave recuperada.
37+
38+
### 💻 Ejecución
39+
El exploit completo se encuentra en el archivo adjunto [`exploit.py`](./exploit.py).
40+
41+
```bash
42+
python3 exploit.py
43+
```
44+
45+
**Salida del script:**
46+
```text
47+
[+] Iniciando ataque contra [http://ctf.nexus-security.club:6213](http://ctf.nexus-security.club:6213)
48+
[*] Descargando logo original (/logo.png)...
49+
[*] Descargando logo cifrado usando traversal...
50+
[+] Clave recuperada (hex): a1b2c3...
51+
[*] Descargando flag cifrada...
52+
========================================
53+
FLAG DESCIFRADA: nexus{l34k_7h3_k3y_br34k_7h3_c1ph3r}
54+
========================================
55+
```
56+
57+
## 🚩 Flag
58+
> `nexus{l34k_7h3_k3y_br34k_7h3_c1ph3r}`
59+
6 KB
Binary file not shown.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# syntax=docker/dockerfile:1
2+
FROM golang:1.24-trixie
3+
WORKDIR /app
4+
5+
COPY challenge/go.mod challenge/go.sum challenge/main.go challenge/logo.png ./
6+
RUN echo "nexus{fake_flag}" > /flag.txt
7+
8+
RUN go mod download
9+
10+
RUN CGO_ENABLED=1 GOOS=linux go build -o main
11+
12+
RUN chmod 0644 /flag.txt
13+
14+
RUN useradd -m ctf
15+
RUN chown -R ctf:ctf /app
16+
USER ctf
17+
18+
EXPOSE 8080
19+
20+
CMD ["/app/main"]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module example.com/encrypted-storage/v2
2+
3+
go 1.24.6
4+
5+
require github.com/mattn/go-sqlite3 v1.14.32
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs=
2+
github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
586 KB
Loading

0 commit comments

Comments
 (0)