Nuclear Sale
2 minutos de lectura
Se nos proporciona un archivo PCAP (challenge.pcap
). Si lo analizamos con Wireshark, veremos unos emails en SMTP:
El reto está basado en una serie de correos enviados en una empresa. Hay información cifrada en ellos. Estos son los emails:
Hello everyone,
A potential Buyer approached us asking for a HUGE amount of plutonium. Are we even allowed to
sell this much?
Best Regards,
Sales Dept
We are very XORry but the management does not approve such a sale. It may damage our business.
Who is the buyer?
Best Regards,
Management
He is a high profile individual. His information is encrypted below:
6b65813f4fe991efe2042f79988a3b2f2559d358e55f2fa373e53b1965b5bb2b175cf039
You know what you have to do.
Best Regards,
Sales Dept
Here is the ciphertext encrypted with our key.
fd034c32294bfa6ab44a28892e75c4f24d8e71b41cfb9a81a634b90e6238443a813a3d34
Best Regards,
Management
Encrypting again with our key...
de328f76159108f7653a5883decb8dec06b0fd9bc8d0dd7dade1f04836b8a07da20bfe70
Best Regards,
Sales Dept
Oh my... This changes everything. We cannot refuse selling to this guy. He can literally destroy us.
Move the process.
Best Regards,
Management
Alright, we will process the order. Thanks!
Best Regards,
Sales Dept
Hay una pista en el segundo email que dice que se usará cifrado XOR ("We are very XORry"). Luego, tenemos tres cadenas en hexadecimal que parecen ser el resultado de los cifrados XOR.
Los textos cifrados (en orden, $c_0$, $c_1$, $c_2$) están relacionados (donde $p$ es el texto claro, $k_x$ es la clave del cliente y $k$ es “nuestra clave”):
$$ \begin{cases} c_0 = p \oplus k_x \newline c_1 = c_0 \oplus k \newline c_2 = p \oplus k \newline \end{cases} $$
Debido a las propiedades del cifrado XOR:
$$ \begin{align} c_1 \oplus c_2 & = (c_0 \oplus k) \oplus (p \oplus k) \newline & = c_0 \oplus p \newline & = (p \oplus k_x) \oplus p \newline & = k_x \end{align} $$
Y entonces $p = c_0 \oplus k_x$. Y así obtenemos el texto claro:
$$ p = c_0 \oplus k_x = c_0 \oplus c_1 \oplus c_2 $$
Esta operación se puede ejecutar en CyberChef:
Y también en Python:
$ python3 -q
>>> from pwn import unhex, xor
>>> c0 = unhex('6b65813f4fe991efe2042f79988a3b2f2559d358e55f2fa373e53b1965b5bb2b175cf039')
>>> c1 = unhex('fd034c32294bfa6ab44a28892e75c4f24d8e71b41cfb9a81a634b90e6238443a813a3d34')
>>> c2 = unhex('de328f76159108f7653a5883decb8dec06b0fd9bc8d0dd7dade1f04836b8a07da20bfe70')
>>> xor(c0, c1, c2)
b'HTB{s3cr3t_sh4r1ng_w1th_x0r_15_l4m3}'