Linux, Programação, Sistemas Operacionais

Ressuscitando Python2 em derivados do Debian (incluindo Kali Linux)

Tempo de leitura: 3 minutos

Em janeiro de 2020 o Python2 deixou de ser mantido pelos desenvolvedores oficiais da linguagem. Mesmo antes, em dezembro de 2019, os desenvolvedores do Kali anunciaram que o Debian (distribuição na qual o Kali é baseado) retiraria o Python2 de seus repositórios, todos os códigos que não fossem atualizados, seriam retirados dos repositórios também e o Kali faria o mesmo. Aí estava marcado o “Fim da Vida” (End-of-Life ou EOL) do Python2.

O problema é que muitas ferramentas, exploits, bibliotecas e códigos nunca foram atualizados para Python3. Muitos códigos isolados do GitHub também nunca foram atualizados. A equipe do Kali disse que existiam algumas possibilidades para resolver isso:

  1. Remover o código ou pacote
  2. Encontrar algum fork ou patch que adicione o suporte a Python3
  3. Passar o código para Python3 na mão

Porém alguns meses depois, em uma avaliação do time do Kali, eles reconhecem que “existem muitas ferramentas que os usuários usam e que não foram portadas para Python3, causando diversos problemas para eles”.

Para mim isso ainda não havia sido um problema até alguns dias atrás, em um CTF. Eu estava fazendo uma máquina do HackTheBox quando precisei de um exploit específico do Github feito em Python2. O exploit era bem grande, composto de vários arquivos. Baixei o exploit completo e percebi que não seria simples passar tudo aquilo para Python3. Procurei alguma outra versão mais atual, mas não encontrei. Então não tinha jeito… Ou eu passava tudo para Python3… Ou… Usava o pyenv.

O que é o pyenv?

Segundo o github oficial do projeto, o “pyenv” permite trocar facilmente entre diversas versões do Python sem estragar modificar a versão oficial instalada no sistema! Portanto é possível, com o “pyenv”, ter diversas versões do Python sem que uma versão cause conflitos nas outras, ver as diferenças entre elas e rodar códigos específicos em versões específicas! Perfeito para o meu propósito (e com certeza de vários outros desenvolvedores e hackers)

Então vamos lá instalar o pyenv e configurar todo o necessário.

Instalado o pyenv e o Python2 nele

Hoje o pyenv ainda não está nos repositórios do Debian. Por isso precisaremos baixar do git, dar build e instalar o pyenv na mão. Felizmente os desenvolvedores dessa ferramenta criaram um script que facilita bastante esse trabalho. Mas primeiro vamos instalar os pré-requisitos listados no wiki do pyenv. Abra um terminal digite:

sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git

Ao final da instalação das dependências, instalaremos o pyenv usando o script que facilita esse trabalho. Para tal, execute este comando no terminal:

curl https://pyenv.run | bash

Ao final, pode ser que apareçam estes avisos:

Avisos finais do instalador do pyenv

Neste caso digite no terminal:

pico ~/.bashrc

Role até o final do arquivo e digite os comandos que o instalador determinou

Editando o arquivo .bashrc

Aperte Ctrl+O para salvas e Ctrl+X para sair. Depois digite:

exec $SHELL

Pronto. Pyenv está instalado e configurado. Agora vamos instalar a versão 2 da linguagem.

Instalando Python2 pelo pyenv

Digite pyenv no terminal e deverá aparecer um pequeno “help” como na imagem abaixo.

Help do pyenv

Digite no terminal:

pyenv install 2.7.18

Após terminar de instalar, digite:

pyenv global 2.7.18

Pronto. Python2 está instalado de forma “global” para o seu usuário. Para ver todas as versões instaladas, digite:

pyenv versions

Se você digitar pyhon no terminal, verá que a versão que será carregada é a versão 2 do interpretador.

Modificando a versão global do Python com pyenv

Agora caso seja necessário instalar dependências, use o comando pip que já estará instalado na versão para o Python2.

pip na versão para Python2

Caso queira alterar novamente para a versão do sistema, basta digitar:

pyenv global system

E o sistema voltará a usar o python padrão instalado no sistema operacional.

Pronto. Agora se pode usar as ferramentas e exploits que não foram atualizados. 😉

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *