Nice netcat...
2 minutos de lectura
Se nos proporciona un nombre de dominio y un puerto para una instancia remota. Si nos conectamos utilizando nc
, nos envía una lista de números:
$ nc mercury.picoctf.net 22902
112
105
99
111
67
84
70
123
103
48
48
100
95
107
49
116
116
121
33
95
110
49
99
51
95
107
49
116
116
121
33
95
100
51
100
102
100
54
100
102
125
10
^C
Estos números parece que son la representación en ASCII decimal de algunos caracteres.
Por ejemplo, 112 es p
, 105 es i
, 99 es c
and 111 es o
. Por tanto, los números son la flag en ASCII.
Para decodificar la flag, podemos utilizar un poco de shell scripting y Python. Como nc
está manteniendo la conexión abierta, podemos cerrarla con timeout
.
$ timeout 1 nc mercury.picoctf.net 22902 | xargs
112 105 99 111 67 84 70 123 103 48 48 100 95 107 49 116 116 121 33 95 110 49 99 51 95 107 49 116 116 121 33 95 100 51 100 102 100 54 100 102 125 10
$ python3 -c "print('$(timeout 1 nc mercury.picoctf.net 22902 | xargs)')"
112 105 99 111 67 84 70 123 103 48 48 100 95 107 49 116 116 121 33 95 110 49 99 51 95 107 49 116 116 121 33 95 100 51 100 102 100 54 100 102 125 10
$ python3 -c "print(''.join(map(chr, map(int, '$(timeout 1 nc mercury.picoctf.net 22902 | xargs)'.split()))))"
picoCTF{g00d_k1tty!_n1c3_k1tty!_d3dfd6df}
La flag también se puede decodificar utilizando un script en Python con pwntools
:
from pwn import context, remote
context.log_level = 'CRITICAL'
r = remote('mercury.picoctf.net', 22902)
flag = []
while (c := r.recvline().strip()) != b'10':
flag.append(chr(int(c.decode())))
r.close()
print(''.join(flag))
$ python3 solve.py
picoCTF{g00d_k1tty!_n1c3_k1tty!_d3dfd6df}