17 de jul de 2014

Resolvendo o Wargame Bandit

Um cara de uma lista que participo falou sobre um wargame chamado Bandit. É um desafio pra você testar seus conhecimentos em linux. Eu sugiro que você tente resolver sozinho.


Inicialmente o usuario é bandit0 e a senha é bandit0 também. Nos próximos níveis, o nome do usuário vai mudando pra bandit1, bandit2, bandit3, etc...




Nível 0

Basta você conectar em bandit.labs.overthewire.org com o usuario bandit0 e senha bandit0.
Depois lista os arquivos com o comando ls e você vai ver um único arquivo chamado readme.
Abra-o e teremos a senha pro próximo nível

vinicius@vinicius-pc:~$ ssh bandit0@bandit.labs.overthewire.org
bandit0@melinda:~$ ls
readme
bandit0@melinda:~$ cat readme 
boJ9jbbUNNfktd78OOpsqOltutMc3MY1
bandit0@melinda:~$




Nível 1

Vamos conectar de novo, mas agora com o o usuario bandit1 e a senha que conseguimos no nivel anterior. Quando listamos os arquivos, vemos que existe apenas um arquivo com o nome -
Isso mesmo. O nome do arquivo é apenas um traço. Se a gente digitar cat - não vai dar certo pois o cat vai interpretar o - como um argumento. Mas tem um outro jeito:
bandit1@melinda:~$ ls
-
bandit1@melinda:~$ cat ./-
CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9


Nível 2

Quando executamos o ls vemos que existe um arquivo que tem espaços em seu nome.
Para contornar isso, usamos o autocomplete do linux. Basta diigitar o comando cat e começar a digitar o nome do arquivo e apertar a tecla tab que ele termina de escrever o nome do arquivo com a sintaxe adequada. Existe um outro jeito que é escrever o nome do arquivo entre aspas.
bandit2@melinda:~$ ls
spaces in this filename
bandit2@melinda:~$ cat "spaces in this filename"
UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

Nível 3

O comando ls vai nos mostrar um diretório chamado inhere. Vamos até ele com o comando cd listamos os arquivos usando o ls mas percebemos que não é mostrado nada. No linux, os arquivos ocultos começam com um ponto. Para listar os arquivos ocultos usamos comando ls -la.
bandit3@melinda:~$ ls
inhere
bandit3@melinda:~$ cd inhere/
bandit3@melinda:~/inhere$ ls
bandit3@melinda:~/inhere$ ls -la
total 12
drwxr-xr-x 2 root    root    4096 Jun  6  2013 .
drwxr-xr-x 3 root    root    4096 Jun  6  2013 ..
-rw-r----- 1 bandit4 bandit3   33 Jun  6  2013 .hidden
bandit3@melinda:~/inhere$ cat .hidden 
pIwrPrtPN36QITSp3EQaw936yaFoFgAB

Nível 4

Outra vez temos o diretório inhere e ao listar os arquivos de lá, vemos vários arquivos. A senha deve estar em um desses arquivos. Mas se você listar todos, vai ver que eles possuem caracteres não legíveis dentro deles. Vamos ver qual deles é um arquivo de texto e aí sim podemos ver a senha.
bandit4@melinda:~$ ls
inhere
bandit4@melinda:~$ cd inhere/
bandit4@melinda:~/inhere$ ls
-file00  -file02  -file04  -file06  -file08
-file01  -file03  -file05  -file07  -file09
bandit4@melinda:~/inhere$ file ./-file0*
./-file00: data
./-file01: data
./-file02: Non-ISO extended-ASCII text, with no line terminators
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: Non-ISO extended-ASCII text
bandit4@melinda:~/inhere$ cat ./-file07 
koReBOKuIDDepwhWk7jZC0RTdopnAYKh

Nível 5

Ao listar os arquivos nos deparamos de novo com o diretório inhere, e dentro dele vemos vários outros diretórios com o nome maybehere. Essa página nos diz que o arquivo com a senha tem exatamente 1033 bytes. Uma rápida olhada no manual do find e vemos que pra pesquisar por tamanho em bytes, temos a sintaxe find dir -size Xc onde dir é o diretório onde queremos procurar e X é o tamanho e o c significa bytes.
bandit5@melinda:~$ ls
inhere
bandit5@melinda:~$ cd inhere/
bandit5@melinda:~/inhere$ ls
maybehere00  maybehere02  maybehere04  maybehere06  maybehere08  maybehere10  maybehere12  maybehere14  maybehere16  maybehere18
maybehere01  maybehere03  maybehere05  maybehere07  maybehere09  maybehere11  maybehere13  maybehere15  maybehere17  maybehere19
bandit5@melinda:~/inhere$ find . -size 1033c
./maybehere07/.file2
bandit5@melinda:~/inhere$ cat ./maybehere07/.file2
DXjZPULLxYr17uwoI01bNLQbtFemEgo7

Nível 6

Essa página nos diz que o arquivo com a senha tem como dono o usuário bandit7 e como dono o grupo bandit6.
bandit6@melinda:~$ find / -group bandit6 2>/dev/null
/etc/bandit_pass/bandit6
/var/lib/dpkg/info/bandit7.password
bandit6@melinda:~$ cat /var/lib/dpkg/info/bandit7.password
HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

Lembrando que 2>/dev/null serve pra não exibir os erros de Permission denied.

Nível 7

Listando os arquivos vemos apenas o arquivo data.txt e esse link nos diz que a senha que desejamos está próxima á palavra millionth.
bandit7@melinda:~$ ls
data.txt
bandit7@melinda:~$ cat data.txt | grep millionth
millionth cvX2JJa4CFALtqS87jk27qwqGhBM9plV

Nível 8

Existe apenas um arquivo chamado data.txt e a dica nos diz que a senha é a única linha que aparece somente uma vez.
bandit8@melinda:~$ ls
data.txt
bandit8@melinda:~$ python   
Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> arq = open("data.txt").read().split("\n")
>>> for i in arq:
...     if(arq.count(i) == 1):
...             print i
... 
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

>>> 


Nível 9

Só existe o arquivo data.txt e segundo a dica, a senha é um texto human-readable que começa com caracteres '='. O comando strings lista os textos human-readable.
bandit9@melinda:~$ ls
data.txt
bandit9@melinda:~$ strings data.txt | grep =
Rj=G
========== the
=qy9g
,========== passwordc
========== is
=9-5
O=p~
#r=t!
7e}=eG
========== truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
uXI/{I=VPO=
6'Q|_=Vt
:={!
yd=6

Senha: truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

Nível 10

O arquivo data.txt possui algo codigficado em base64.
bandit10@melinda:~$ ls  
data.txt
bandit10@melinda:~$ cat data.txt 
VGhlIHBhc3N3b3JkIGlzIElGdWt3S0dzRlc4TU9xM0lSRnFyeEUxaHhUTkViVVBSCg==
bandit10@melinda:~$ python -c 'print "VGhlIHBhc3N3b3JkIGlzIElGdWt3S0dzRlc4TU9xM0lSRnFyeEUxaHhUTkViVVBSCg==".decode("base64")'
The password is IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

Nível 11


Segundo a dica, a senha está cifrada em ROT13.
bandit11@melinda:~$ ls
data.txt
bandit11@melinda:~$ cat data.txt 
Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh
bandit11@melinda:~$ python
Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> "Gur cnffjbeq vf 5Gr8L4qetPEsPk8htqjhRK8XSP6x2RHh".decode("rot13")
u'The password is 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu'

EU AMO PYTHON!


Nível 12

A dica nos diz que o arquivo data.txt é o hexdump de um arquivo que foi compactado várias vezes. Esse não teve jeito. A solução ficou meio porca. Eu criei uma pasta pra ficar mais organizado. Depois usei o xxd pra transformar o hexdump no arquivo original. Depois não tem jeito. Você detecta que tipo de arquivo que é e depois descompacta com o descompactador correto e vai fazendo isso até chegar no arquivo de texto, que é o que contém a senha.
bandit12@melinda:~$ mkdir /tmp/pythoneiro
bandit12@melinda:~$ cp data.txt /tmp/pythoneiro
bandit12@melinda:~$ cd /tmp/pythoneiro
bandit12@melinda:/tmp/pythoneiro$ mkdir unc
bandit12@melinda:/tmp/pythoneiro$ xxd -r data.txt unc/novo
bandit12@melinda:/tmp/pythoneiro$ cd unc/
bandit12@melinda:/tmp/pythoneiro/unc$ file novo 
novo: gzip compressed data, was "data2.bin", from Unix, last modified: Thu Jun  6 13:59:44 2013, max compression
bandit12@melinda:/tmp/pythoneiro/unc$ mv novo novo.gz
bandit12@melinda:/tmp/pythoneiro/unc$ gzip -d novo.gz
bandit12@melinda:/tmp/pythoneiro/unc$ file novo 
novo: bzip2 compressed data, block size = 900k
bandit12@melinda:/tmp/pythoneiro/unc$ mv novo novo.bz2
bandit12@melinda:/tmp/pythoneiro/unc$ bzip2 -d novo.bz2 
bandit12@melinda:/tmp/pythoneiro/unc$ file novo
novo: gzip compressed data, was "data4.bin", from Unix, last modified: Thu Jun  6 13:59:43 2013, max compression
bandit12@melinda:/tmp/pythoneiro/unc$ mv novo novo.gz
bandit12@melinda:/tmp/pythoneiro/unc$ gzip -d novo.gz 
bandit12@melinda:/tmp/pythoneiro/unc$ file novo 
novo: POSIX tar archive (GNU)
bandit12@melinda:/tmp/pythoneiro/unc$ mv novo novo.tar 
bandit12@melinda:/tmp/pythoneiro/unc$ tar -xvf novo.tar 
data5.bin
bandit12@melinda:/tmp/pythoneiro/unc$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@melinda:/tmp/pythoneiro/unc$ mv data5.bin data5.tar
bandit12@melinda:/tmp/pythoneiro/unc$ tar -xvf data5.tar 
data6.bin
bandit12@melinda:/tmp/pythoneiro/unc$ tar -xvf data6.bin 
data8.bin
bandit12@melinda:/tmp/pythoneiro/unc$ mv data8.bin data8.gz
bandit12@melinda:/tmp/pythoneiro/unc$ gzip -d data8.gz 
bandit12@melinda:/tmp/pythoneiro/unc$ file data8 
data8: ASCII text
bandit12@melinda:/tmp/pythoneiro/unc$ cat data8
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

Nível 13

Aqui só existe um arquivo que é uma chave privada de SSH. Copie o conteúdo, depois crie um arquivo no seu computador, cole a chave e salve o arquivo. Altere as permissões para 600 e depois faz login no próximo nível usando a key.
bandit13@melinda:~$ ls
sshkey.private
bandit13@melinda:~$ cat sshkey.private 
-----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-----
bandit13@melinda:~$ logout
Connection to bandit.labs.overthewire.org closed.
vinicius@vinicius-pc:~$ nano key
vinicius@vinicius-pc:~$ chmod 600 key 
vinicius@vinicius-pc:~$ ssh -i key bandit14@bandit.labs.overthewire.org

Nível 14

A dica nos diz que temos que submeter a senha do nível atual na porta 30000 do localhost, mas não temos a senha do nível atual. Então usamos o mesmo esquema do nível 6 pra encontrar a senha. Depois conectamos usando o nc e quando enviarmos a senha, ele retorna a senha pro próximo nível.
bandit14@melinda:~$ find / -group bandit14 2>/dev/null
/etc/bandit_pass/bandit14
/home/bandit14/.ssh/authorized_keys
bandit14@melinda:~$ cat /etc/bandit_pass/bandit14
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
bandit14@melinda:~$ nc localhost 30000
4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
Correct!
BfMYroe26WYalil77FoDi9qh59eK5xNr

Nível 15

É a mesma coisa do nível 14, mas temos que submeter pra porta 30001 usando ssl. Pra isso usamos o ncat.
bandit15@melinda:~$ ncat --ssl localhost 30001
BfMYroe26WYalil77FoDi9qh59eK5xNr
Correct!
cluFn7wTiGryunymYOu4RcffSxQluehd

Nível 16

A mesma coisa, mas a porta correta está entre 31000 e 32000. Usamos o nmap pra ver quais dessas estão abertas. Depois vamos chutando até acertar. Algumas requerem ssl. Depois de chutar algumas descobri que a porta correta é a 31790 e ela nos retorna outra chave privada.
bandit16@melinda:~$ nmap localhost -p31000-32000

Starting Nmap 5.21 ( http://nmap.org ) at 2014-07-17 06:52 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0013s latency).
Not shown: 995 closed ports
PORT      STATE SERVICE
31000/tcp open  unknown
31046/tcp open  unknown
31518/tcp open  unknown
31691/tcp open  unknown
31790/tcp open  unknown
31960/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
bandit16@melinda:~$ ncat --ssl localhost 31790
cluFn7wTiGryunymYOu4RcffSxQluehd
Correct!
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
+TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
-----END RSA PRIVATE KEY-----

Depois disso faça o mesmo esquema do nível 13 pra conectar no próximo nível.


Nível 17

A senha está no arquivo passwords.new e é a única linha que foi modificada entre passwords.old e passwords.new.
bandit17@melinda:~$ ls
passwords.new  passwords.old
bandit17@melinda:~$ diff passwords.*
42c42
< kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
---
> PRjrhDcANrVM6em57fPnFp4Tcq8gvwzK

Senha: kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd


Nível 18

O arquivo .bashrc foi modificado para te desconectar quando você logar. O arquivo .bashrc é iniciado como um arquivo de configuração sempre que você inicia o /bin/bash. Para contornar o problema, basta iniciar o ssh utilizando outro shell. No meu caso, utilizei o /bin/sh


vinicius@vinicius-pc:~$ ssh bandit18@bandit.labs.overthewire.org /bin/sh
bandit18@bandit.labs.overthewire.org's password:
ls
readme
cat readme
IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

Nível 19

Nesse nível você deve usar o arquivo bandit20-do para ler o a senha que está em /etc/bandit_pass/bandit20
bandit19@melinda:~$ ./bandit20-do cat /etc/bandit_pass/bandit20
GbKksEFF4yrVs6il55v6gwY5aVje5f0j

Nível 20

Nesse nível, o programa suconnect irá conectar em localhost na porta especificada, esperando o password do bandit20. Se o password estiver correto, ele envia de volta o password pro bandit21.
Você vai precisar abrir dois SSH. No primeiro vai digitar:

echo GbKksEFF4yrVs6il55v6gwY5aVje5f0j | ncat -lvp 3434

No segundo voce digita:

./suconnect 3434

Volta no primeiro que a senha vai estar lá.
Senha: gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

Nível 21

O cron é um agendador de tarefas. Algo está sendo executado lá. Veja o que é. Vou filtrar o resultado para as coisas do bandit22 que é o próximo nível. Após ler o shell script conseguimos deduzir onde está a senha.
bandit21@melinda:~$ cat /etc/cron.d/* 2>/dev/null | grep bandit22
* * * * * bandit22 /usr/bin/cronjob_bandit22.sh &> /dev/null
bandit21@melinda:~$ cat /usr/bin/cronjob_bandit22.sh
#!/bin/bash
chmod 644 /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
cat /etc/bandit_pass/bandit22 > /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
bandit21@melinda:~$ cat /tmp/t7O6lds9S0RqQh9aMcz6ShpAoZKF7fgv
Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI

Nível 22

Mesma coisa do nível anterior.

bandit22@melinda:~$ cat /etc/cron.d/* 2>/dev/null | grep bandit23
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null
bandit22@melinda:~$ cat /usr/bin/cronjob_bandit23.sh
#!/bin/bash

myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)

echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"

cat /etc/bandit_pass/$myname > /tmp/$mytarget
bandit22@melinda:~$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1
8ca319486bfbbc3663ea0fbe81326349
bandit22@melinda:~$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349
jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n


Nível 23

Mesma coisa do nível anterior.
bandit23@melinda:~$ cat /usr/bin/cronjob_bandit24.sh
#!/bin/bash

myname=$(whoami)

cd /var/spool/$myname
echo "Executing and deleting all scripts in /var/spool/$myname:"
for i in *;
do
    echo "Handling $i"
    ./$i
    rm -f $i
done

Com isso percebemos que ele executa tudo que esta em /var/spool/bandit24 e depois apaga.
Vamos criar um script simples que copia a senha desejada para depois podermos acessá-la. O script será o seguinte:

#!/bin/sh
cat /etc/bandit_pass/bandit24 > /tmp/nivel23tmp/senha

Mãos à obra.
bandit23@melinda:~$ mkdir /tmp/nivel23tmp
bandit23@melinda:~$ chmod 777 /tmp/nivel23tmp
bandit23@melinda:~$ cd /tmp/nivel23tmp 
bandit23@melinda:/tmp/nivel23tmp$ nano run.sh
bandit23@melinda:/tmp/nivel23tmp$ chmod 777 run.sh 
bandit23@melinda:/tmp/nivel23tmp$ cp run.sh /var/spool/bandit24/

AQUI VOCE AGUARDA UNS SEGUNDINHOS...

bandit23@melinda:/tmp/nivel23tmp$ ls
run.sh  senha
bandit23@melinda:/tmp/nivel23tmp$ cat senha 
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ

Pronto. Você já tem a senha pro último nível que é o 24. Como o nível 24 não tem nada de mais, eu resolvi dar uma incrementada aqui e mostrar um outro jeito de ir pro 24, sem precisar da senha.

O processo é o mesmo, mas ao invés de criar aquele script que falei acima, criamos este:

#!/bin/sh
cp /bin/sh /tmp/nivel23tmp/shell
chmod 4777 /tmp/nivel23tmp/shell


Esperamos e depois fazemos isso:
bandit23@melinda:/tmp/nivel23tmp$ ls
run.sh  senha
bandit23@melinda:/tmp/nivel23tmp$ cp run.sh /var/spool/bandit24/
bandit23@melinda:/tmp/nivel23tmp$ ls
run.sh  senha  shell
bandit23@melinda:/tmp/nivel23tmp$ id
uid=11023(bandit23) gid=11023(bandit23) groups=11023(bandit23)
bandit23@melinda:/tmp/nivel23tmp$ ./shell
$ id
uid=11023(bandit23) gid=11023(bandit23) euid=11024(bandit24) groups=11024(bandit24),11023(bandit23)
$ ls /home/bandit24
README.txt
$ cat /home/bandit24/README.txt
Congratulations on solving the last level of this game!

At this moment, there are no more levels to play in this game. However, we are constantly working
on new levels and will most likely expand this game with more levels soon.
Keep an eye out for an announcement on our usual communication channels!
In the meantime, you could play some of our other wargames.

If you have an idea for an awesome new level, please let us know!

O que aconteceu foi que o script fez uma cópia do shell /bin/sh na nossa pasta e deu a ela uma permissão para execução com permissões de bandit24. Quando executamos o shell é como se fossemos o próprio usuário bandit24. Aí foi só ver o arquivo do nível 24.



Por hoje é isso. Espero que vocês tenham gostado. Quando eu resolver outro wargame eu posto aqui.

Um comentário:

  1. Gostei. Tinha muita coisa que eu nem me lembrava mais.

    Valeu

    ResponderExcluir