Arquivo de 6 junho, 2012

Se não te dão, que tal ir buscar ?

Faz tempo que não fazia nenhum tipo de hacking e, coincidentemente, andei com um problema onde precisava entender o que o webserver de um equipamento fazia em determinada situação. Parecia existir um comando oculto não disponibilizado pela API do equipamento e decidi olhar por mim mesmo, já que a empresa se negou a me mandar a senha de root do equipamento. Antes de mais nada, não esperem nomes aqui ou posso ter um problema de contrato.

Munido do bom e velho espírito hacker, fiz o seguinte:

1) Baixei uma imagem do firmware do fabricante. Geralmente existe alguma imagem de atualização no site. Um simples registro no site, em geral, já te dá acesso a isso.

2) Baixei o binwalk, já comentado pelo Alan e para o qual eu gerei um .deb, para faciliar.

3) Rodei o binwalk e pude perceber que era uma composição de um uboot+uboot parameters+kernel linux+imagem do sistema em JFFS2. Nada de inovador, apenas o já esperado. Bom pra mim. Os valores de offset abaixo (número à esquerda) são fictícios, já que não posso dar os detalhes deste firmware:

DECIMAL         HEX             DESCRIPTION
----------------------------------------------------------------------------
 4660          0x1234        LZMA compressed data ....
 9029          0x2345        uImage header, header siz ....
 13398         0x3456        gzip compressed ....
 17767         0x4567        JFFS2 filesystem ....
....

4) Nenhum mistério. E o que eu precisava,o root file system, estava em JFFS2, esperando minha extração, à partir do offset imaginário 17767:

dd ibs=1 skip=17767 if=firmware.bin of=rootfs.jffs2

5) Montei o JFFS2 em loop, usando uma dica do OpenMoko:

export loop=$(losetup -f)
losetup $loop rootfs.jffs2
modprobe block2mtd block2mtd=$loop,131072
modprobe jffs2
modprobe mtdblock
mkdir rootfs
mount -t jffs2 -o ro /dev/mtdblock0 rootfs

Neste momento, pude inspecionar e olhar o que eu precisava dentro do rootfs.Para minha sorte, o script web dele era implementado em shell script.

6) Como o fabricante me negou o acesso de root, me dando apenas um shell personalizado e bem restrito, resolvi também ver qual eram as credenciais de acesso. Para isto, copiei o rootfs/etc/shadow chamei o meu amigo John:

sudo apt-get install john
john -incremental -users:root

Ainda estou esperando terminar (~21 horas e contando), mas em breve terei a senha de root também. Na última fez que fiz isso, com o mesmo fabricante mas uma imagem mais antiga, demorou 3 dias. Só que, naquela época, ele não usava shadow, apenas o /etc/passwd com direito de leitura para todos. Daí, apenas quebrei a senha, não precisei fazer nada do que descrevi aqui.

Happy hacking !

9 Comentários

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 499 outros seguidores