Inicio Overthewire - Bandit (11-15)
Entrada
Cancelar

Overthewire - Bandit (11-15)

El tercer artículo de la serie agrupa los niveles desde el 11 hasta el 15, los cuales ya empiezan a ser un poco más difíciles, puesto que usan técnicas de cifrado, claves, diferentes tipos de codificación, etc.

Además, se aprende el concepto magic numbers o file signature los cuales son unos caracteres en codificación hexadecimal que verifican el formato de un fichero, porque como se sabe, Linux no hace el mismo uso de las extensiones de fichero que Windows.

En la mayoría de las ocasiones no se encontrarán estos retos en un entorno real, pero conviene conocerlos para saber como funcionan algunos protocolos y para conocer también otros comandos útiles.


Nivel 11.

En el enunciado dice que la contraseña para el siguiente nivel se almacena en el archivo data.txt, donde todas las letras minúsculas (a-z) y mayúsculas (A-Z) han sido rotadas en 13 posiciones.

Al mostrar el contenido del fichero, se puede ver el siguiente contenido.

1
2
cat data.txt
Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2R

Este método de cifrado por rotación o desplazamiento, es el conocido como César, y puede ser resuelto en muchas páginas como Cyberchef aplicando la operación ROT13. Pero como se trata de aprender nuevos comandos, se hace todo mediante bash.

Mediante el comando tr, se puede definir la rotación, donde la A pasará a N, etc, obteniendo la contraseña.

1
2
bandit11@bandit:~$ cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu

Nivel 12.

El enunciado del nivel dice que la contraseña se almacena en el archivo data.txt, que es un volcado hexadecimal de un archivo que ha sido comprimido repetidamente.

Dice también que se podrá usar un directorio bajo la ruta /tmp para ayudarse en la tarea.

Cuando se verifica el fichero mediante cat se puede ver que existe dentro del fichero comprimido, uno llamado “data2.bin”.

1
2
3
4
5
6
7
8
9
10
11
12
bandit12@bandit:/tmp/pepe$ cat data.txt 
00000000: 1f8b 0808 0650 b45e 0203 6461 7461 322e  .....P.^..data2.
00000010: 6269 6e00 013d 02c2 fd42 5a68 3931 4159  bin..=...BZh91AY
00000020: 2653 598e 4f1c c800 001e 7fff fbf9 7fda  &SY.O...........
00000030: 9e7f 4f76 9fcf fe7d 3fff f67d abde 5e9f  ..Ov...}?..}..^.
00000040: f3fe 9fbf f6f1 feee bfdf a3ff b001 3b1b  ..............;.
00000050: 5481 a1a0 1ea0 1a34 d0d0 001a 68d3 4683  T......4....h.F.
00000060: 4680 0680 0034 1918 4c4d 190c 4000 0001  F....4..LM..@...
00000070: a000 c87a 81a3 464d a8d3 43c5 1068 0346  ...z..FM..C..h.F
00000080: 8343 40d0 3400 0340 66a6 8068 0cd4 f500  .C@.4..@f..h....
00000090: 69ea 6800 0f50 68f2 4d00 680d 06ca 0190  i.h..Ph.M.h.....
000000a0: 0000 69a1 a1a0 1ea0 194d 340d 1ea1 b280  ..i......M4.....

Al verificar el número mágico o firma de fichero, se ve que son “1F 8B” los correspondientes a un fichero gzip.

Por lo que usando el comando xxd, usado para gestionar información en codificación hexadecimal, se restaura y se intenta descomprimir con el comando gunzip.

1
bandit12@bandit:/tmp/pepe$ xxd -r data.txt > data2.bin.gz

Es importante poner la extension gz al final del nombre de fichero ya que sino gunzip arrojara un error de sufijo, como el siguiente: gzip: data2.bin: unknown suffix -- ignored

Entonces se descomprime y se obtiene el fichero llamado data2.bin, que al ver la firma del fichero, se ve que corresponde con el formato bzip2.

1
2
3
4
5
6
7
8
9
bandit12@bandit:/tmp/pepe$ xxd data2.bin 
00000000: 425a 6839 3141 5926 5359 8e4f 1cc8 0000  BZh91AY&SY.O....
00000010: 1e7f fffb f97f da9e 7f4f 769f cffe 7d3f  .........Ov...}?
00000020: fff6 7dab de5e 9ff3 fe9f bff6 f1fe eebf  ..}..^..........
00000030: dfa3 ffb0 013b 1b54 81a1 a01e a01a 34d0  .....;.T......4.
00000040: d000 1a68 d346 8346 8006 8000 3419 184c  ...h.F.F....4..L
00000050: 4d19 0c40 0000 01a0 00c8 7a81 a346 4da8  M..@......z..FM.
00000060: d343 c510 6803 4683 4340 d034 0003 4066  .C..h.F.C@.4..@f
00000070: a680 680c d4f5 0069 ea68 000f 5068 f24d  ..h....i.h..Ph.M

Se descomprime con bzip2 informando que le asigna un nombre al no proporcionar uno en el comando.

1
2
bandit12@bandit:/tmp/pepe$ bzip2 -d data2.bin 
bzip2: Can't guess original name for data2.bin -- using data2.bin.out

Al verificar la firma del fichero generado, se obtiene que es un fichero gzip que contiene un fichero llamado data4.bin.

1
2
3
4
5
6
bandit12@bandit:/tmp/pepe$ xxd data4.bin 
00000000: 1f8b 0808 0650 b45e 0203 6461 7461 342e  .....P.^..data4.
00000010: 6269 6e00 edd1 3d48 1b71 18c7 f17f d4c2  bin...=H.q......
00000020: 8146 3a74 3045 e805 4434 2972 6772 1169  .F:t0E..D4)rgr.i
00000030: 854b 505a 07c1 521d 4e70 8848 1a33 2824  .KPZ..R.Np.H.3($
00000040: 7109 88a7 0511 c145 6a86 4c52 1d6c f105  q......Ej.LR.l..

Se sigue pues el mismo procedimiento que con el fichero gzip anterior, para obtener otro fichero llamado data4.bin.

1
2
3
4
bandit12@bandit:/tmp/pepe$ mv data4.bin data4.bin.gz 
bandit12@bandit:/tmp/pepe$ gunzip data4.bin.gz 
bandit12@bandit:/tmp/pepe$ ls 
data4.bin  data.txt

Se verifica el número mágico del nuevo fichero (data4.bin) y se observa que no esta la firma en el listado de wikipedia.

1
2
3
4
5
bandit12@bandit:/tmp/pepe$ xxd data4.bin 
00000000: 6461 7461 352e 6269 6e00 0000 0000 0000  data5.bin.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................

Pero al lanzar el comando file se verifica que es una versión de tar y se descomprime por este medio.

1
2
bandit12@bandit:/tmp/pepe$ file data4.bin 
data4.bin: POSIX tar archive (GNU)
1
2
3
bandit12@bandit:/tmp/pepe$ mv data4.bin data4.bin.tar
bandit12@bandit:/tmp/pepe$ tar -xvf data4.bin.tar
data5.bin

El fichero obtenido, dispone del mismo formato que el fichero data4.bin, y por tanto, se procede a realizar el mismo procedimiento.

1
2
3
4
bandit12@bandit:/tmp/pepe$ file data5.bin 
data5.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/pepe$ tar -xvf data5.bin
data6.bin

Con el siguiente fichero, se observa que es un fichero bzip2 y por tanto se descomprime con este comando.

1
2
bandit12@bandit:/tmp/pepe$ file data6.bin 
data6.bin: bzip2 compressed data, block size = 900k
1
2
bandit12@bandit:/tmp/pepe$ bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin -- using data6.bin.out

El siguiente es un fichero tar, realizando el proceso anterior.

1
2
3
4
bandit12@bandit:/tmp/pepe$ file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
bandit12@bandit:/tmp/pepe$ tar -xvf data6.bin.out
data8.bin

El siguiente es un fichero gzip y por tanto se realiza el procedimiento realizado para estos ficheros.

1
2
3
4
5
6
7
8
9
10
bandit12@bandit:/tmp/pepe$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu May  7 18:14:30 2020, max compression, from Unix
bandit12@bandit:/tmp/pepe$ xxd data8.bin | more
00000000: 1f8b 0808 0650 b45e 0203 6461 7461 392e  .....P.^..data9.
00000010: 6269 6e00 0bc9 4855 2848 2c2e 2ecf 2f4a  bin...HU(H,.../J
00000020: 51c8 2c56 b088 caaa 740e ca74 0a77 8bcc  Q.,V....t..t.w..
00000030: ce4b 4dcc f028 af70 2e33 2e4f 324a 34f4  .KM..(.p.3.O2J4.
00000040: 0f2a 88f4 e102 000f 9b95 9f31 0000 00    .*.........1...
bandit12@bandit:/tmp/pepe$ mv data8.bin data9.bin.gz
bandit12@bandit:/tmp/pepe$ gunzip data9.bin.gz

Con el fichero obtenido, entonces se verifica que es un fichero con la información en claro, donde, al fin, se obtiene la contraseña del siguiente nivel.

1
2
3
4
bandit12@bandit:/tmp/pepe$ file data9.bin 
data9.bin: ASCII text
bandit12@bandit:/tmp/pepe$ cat data9.bin 
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

Nivel 13.

El enunciado dice que la contraseña para el siguiente nivel se almacena en /etc/bandit_pass/bandit14 y sólo puede ser leída por el usuario bandit14.

Que no se obtiene la contraseña del siguiente usuario, pero se obtiene una clave SSH privada que puede ser usada para ingresar al siguiente nivel.

Se listan los ficheros de la home del usuario y se ve que existe una clave privada de ssh llamada sshkey.private.

1
2
bandit13@bandit:~$ ls -a
.  ..  .bash_logout  .bashrc  .profile  sshkey.private

Se obtiene el contenido del fichero y se copia en un fichero local (aunque se puede lanzar un ssh desde la propia máquina).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxkkOE83W2cOT7IWhFc9aPaaQmQDdgzuXCv+ppZHa++buSkN+
gg0tcr7Fw8NLGa5+Uzec2rEg0WmeevB13AIoYp0MZyETq46t+jk9puNwZwIt9XgB
ZufGtZEwWbFWw/vVLNwOXBe4UWStGRWzgPpEeSv5Tb1VjLZIBdGphTIK22Amz6Zb
ThMsiMnyJafEwJ/T8PQO3myS91vUHEuoOMAzoUID4kN0MEZ3+XahyK0HJVq68KsV
ObefXG1vvA3GAJ29kxJaqvRfgYnqZryWN7w3CHjNU4c/2Jkp+n8L0SnxaNA+WYA7
jiPyTF0is8uzMlYQ4l1Lzh/8/MpvhCQF8r22dwIDAQABAoIBAQC6dWBjhyEOzjeA
J3j/RWmap9M5zfJ/wb2bfidNpwbB8rsJ4sZIDZQ7XuIh4LfygoAQSS+bBw3RXvzE
pvJt3SmU8hIDuLsCjL1VnBY5pY7Bju8g8aR/3FyjyNAqx/TLfzlLYfOu7i9Jet67
xAh0tONG/u8FB5I3LAI2Vp6OviwvdWeC4nOxCthldpuPKNLA8rmMMVRTKQ+7T2VS
nXmwYckKUcUgzoVSpiNZaS0zUDypdpy2+tRH3MQa5kqN1YKjvF8RC47woOYCktsD
o3FFpGNFec9Taa3Msy+DfQQhHKZFKIL3bJDONtmrVvtYK40/yeU4aZ/HA2DQzwhe
ol1AfiEhAoGBAOnVjosBkm7sblK+n4IEwPxs8sOmhPnTDUy5WGrpSCrXOmsVIBUf
laL3ZGLx3xCIwtCnEucB9DvN2HZkupc/h6hTKUYLqXuyLD8njTrbRhLgbC9QrKrS
M1F2fSTxVqPtZDlDMwjNR04xHA/fKh8bXXyTMqOHNJTHHNhbh3McdURjAoGBANkU
1hqfnw7+aXncJ9bjysr1ZWbqOE5Nd8AFgfwaKuGTTVX2NsUQnCMWdOp+wFak40JH
PKWkJNdBG+ex0H9JNQsTK3X5PBMAS8AfX0GrKeuwKWA6erytVTqjOfLYcdp5+z9s
8DtVCxDuVsM+i4X8UqIGOlvGbtKEVokHPFXP1q/dAoGAcHg5YX7WEehCgCYTzpO+
xysX8ScM2qS6xuZ3MqUWAxUWkh7NGZvhe0sGy9iOdANzwKw7mUUFViaCMR/t54W1
GC83sOs3D7n5Mj8x3NdO8xFit7dT9a245TvaoYQ7KgmqpSg/ScKCw4c3eiLava+J
3btnJeSIU+8ZXq9XjPRpKwUCgYA7z6LiOQKxNeXH3qHXcnHok855maUj5fJNpPbY
iDkyZ8ySF8GlcFsky8Yw6fWCqfG3zDrohJ5l9JmEsBh7SadkwsZhvecQcS9t4vby
9/8X4jS0P8ibfcKS4nBP+dT81kkkg5Z5MohXBORA7VWx+ACohcDEkprsQ+w32xeD
qT1EvQKBgQDKm8ws2ByvSUVs9GjTilCajFqLJ0eVYzRPaY6f++Gv/UVfAPV4c+S0
kAWpXbv5tbkkzbS0eaLPTKgLzavXtQoTtKwrjpolHKIHUz6Wu+n4abfAIRFubOdN
/+aLoRQ0yBDRbdXMsZN/jvY44eM+xRLdRVyMmdPtP8belRi2E2aEzA==
-----END RSA PRIVATE KEY-----

El parámetro para usar una clave privada es -i clave_privada.

1
2
3
4
ssh bandit14@bandit.labs.overthewire.org -p 2220 -i .\ssh.key
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

Linux bandit.otw.local 5.4.8 x86_64 GNU/Linux

Entonces se puede obtener la contraseña del usuario bandit14, aunque ya se ha accedido dicho usuario.

1
2
bandit14@bandit:~$ cat /etc/bandit_pass/bandit14
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

Nivel 14.

La contraseña para el siguiente nivel se puede recuperar enviando la contraseña del nivel actual al puerto 30000 en localhost.

Entonces, se conecta mediante el comando telnet al puerto 30000 de la ip 127.0.0.1 dejando un prompt para poder escribir, lo que significa que el puerto se encuentra abierto.

Entonces se pega la contraseña del usuario anterior (para eso se necesita, pese haber entrado con clave privada), obteniendo la del siguiente usuario.

1
2
3
4
5
6
7
8
9
bandit14@bandit:~$ telnet 127.0.0.1 30000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr

Connection closed by foreign host.

Nivel 15.

La contraseña para el siguiente nivel puede ser recuperada enviando la contraseña del nivel actual al puerto 30001 en localhost usando encriptación SSL.

El presente nivel es como el anterior, pero con las comunicaciones cifradas, por tanto se utiliza el comando openssl para conectar al puerto indicado.

Dejando el sistema un prompt como en el nivel anterior, se inserta la contraseña anterior y se obtiene la del siguiente usuario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
bandit15@bandit:~$ openssl s_client -connect localhost:30001
CONNECTED(00000003)
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
---
Certificate chain
 0 s:/CN=localhost
   i:/CN=localhost
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICBjCCAW+gAwIBAgIEZOzuVDANBgkqhkiG9w0BAQUFADAUMRIwEAYDVQQDDAls
b2NhbGhvc3QwHhcNMjEwOTMwMDQ0NTU0WhcNMjIwOTMwMDQ0NTU0WjAUMRIwEAYD
VQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM9En7CC
uPr6cVPATLAVhWMU1hggfIJEp5sZN9RPUbK0zKBv802yD54ObHYmIge6lqqkgXOz
2AuI4UfCG4iMb0UYUCA/wISwNqUQrjcja0OnqzCTRscXzzoIsHbC8lGFzMDRz3Jw
8nBD6/2jvFt1rnBtZ4ghibNn5rFHRi5EC+K/AgMBAAGjZTBjMBQGA1UdEQQNMAuC
CWxvY2FsaG9zdDBLBglghkgBhvhCAQ0EPhY8QXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgYnkgTmNhdC4gU2VlIGh0dHBzOi8vbm1hcC5vcmcvbmNhdC8uMA0GCSqGSIb3
DQEBBQUAA4GBAD7/moj14DUI6/D6imJ8pQlAy/8lZlsrbyRnqpzjWaATShDYr7k3
umdRg+36MciNFAglE7nGYZroTSDCm650D81+797owSXLPAdp1Q6JfQH5LOni2kbw
UHcO9hwQ+rJzEgIlfGOic7dC5lj8DBU5tugY87RZGKiZ2GG77WXas9Iz
-----END CERTIFICATE-----
subject=/CN=localhost
issuer=/CN=localhost
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1019 bytes and written 269 bytes
Verification error: self signed certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 930A256DAFDB0B4FE8E53B0925C61791CB6C6908C957E501A1387E0EF6BB59F9
    Session-ID-ctx:
    Master-Key: 134AB6F46C484CA6B90FA280D70E8A96677EC63DDEDCA1ACDA10BE41DA0B4B4D4B76C598BDEC90790B90D9C709364853
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 8a eb e8 f5 31 15 46 ad-b2 a8 10 c1 51 b9 66 14   ....1.F.....Q.f.
    0010 - 5f d3 2d 42 8c a3 cb 78-35 79 e0 9e 94 ad 15 90   _.-B...x5y......
    0020 - a6 16 f0 f4 c1 9a 06 31-f1 b8 12 3a 11 2b bd 06   .......1...:.+..
    0030 - 36 9d b0 35 8e 13 84 72-b7 bb 0e cf 71 27 f3 5e   6..5...r....q'.^
    0040 - 4e 59 ec 83 05 c0 e7 13-85 35 cf 73 5e cc 3f 40   NY.......5.s^.?@
    0050 - bd 8a 9f bd ea 19 cc 20-f5 7e 07 78 a2 9f ab cd   ....... .~.x....
    0060 - 0b 9a b9 88 09 59 8e df-bd 5e 58 a9 8d a1 3b 52   .....Y...^X...;R
    0070 - 3c 4c f0 ae 0d 7e 04 f6-cd 13 a3 ea ad 1f e3 9a   <L...~..........
    0080 - 93 e6 27 d9 86 f1 7b e7-92 b7 84 bd 70 64 c0 bb   ..'...{.....pd..
    0090 - fc 8e 6b f0 e0 95 58 65-12 e4 c0 a5 3f 70 8d e3   ..k...Xe....?p..

    Start Time: 1634308750
    Timeout   : 7200 (sec)
    Verify return code: 18 (self signed certificate)
    Extended master secret: yes
---
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd

closed
Esta entrada está licenciada bajo CC BY 4.0 por el autor.