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 !

About these ads
  1. #1 por acassis em junho 6, 2012 - 1:28 pm

    Muito massa Marcelo,

    Estou na espectativa, vai divulgar a senha de root aqui ne?

    Um abraço,

    Alan

  2. #2 por Marcelo Barros em junho 6, 2012 - 1:51 pm

    Quem sabe um pedacinho dela, nhein ? ;)
    Mas até agora, nada …. uma questão de tempo :)

  3. #3 por acassis em junho 22, 2012 - 1:58 pm

    ping!

    Nada ainda?

  4. #4 por Djames Suhanko em junho 22, 2012 - 6:19 pm

    Grande mestre Marcelo!
    Excelente material, valeu por divulgar! :-)

  5. #5 por Marcelo Barros™ (@marcelobarros) em junho 22, 2012 - 6:24 pm

    Via john the ripper não rolou, Alan. O Djames está tentando outro programas.
    Perguntaram de onde vem o 131072 vem do eraseblock size., usado no mkfs.jffs2 (http://wiki.maemo.org/Modifying_the_root_image)

  6. #6 por cleitonbueno em maio 16, 2013 - 2:25 pm

    bueno@vm2:~/tools$ sudo binwalk firmware.bin
    .
    .
    .
    1180160 0×120200 Squashfs filesystem, little endian, version 4.0, compression: lzma, size: 2468994 bytes, 540 inodes, blocksize: 131072 bytes, created: Mon Apr 1 03:30:19 2013

    bueno@vm2:~/tools$ sudo dd ibs=1 skip=1180160 if=firmware.bin of=rootfs.squashfs
    2883584+0 records in
    5632+0 records out
    2883584 bytes (2,9 MB) copied, 0,805672 s, 3,6 MB/s

    bueno@vm2:~/tools$ sudo ./squashfs4.2/squashfs-tools/unsquashfs rootfs.squashfs

    Parallel unsquashfs: Using 2 processors
    lzma uncompress failed with error code 1
    read_block: failed to read block @0x25a765
    read_fragment_table: failed to read fragment table index
    FATAL ERROR aborting: failed to read fragment table

    bueno@vm2:~/tools$ sudo ../squashfs4.2/squashfs-tools/unsquashfs -v
    unsquashfs version 4.2 (2011/02/28)
    copyright (C) 2011 Phillip Lougher

    Até compilei na mão, habilitando LZMA no Makefile e pegando o mais recente da fonte
    http://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/9.18/
    e compilando porem sem exito.
    Em um ultimo suspiro, peguei a versão masi recente do Kernel até esses dias 3.9.2 personalizaei o config para suporte a lzma, squashfs dentre outros e sem exito também.

    Sabe como poderia ser feito?

    Abraço.

  7. #7 por Marcelo Barros em maio 17, 2013 - 3:34 pm

    Estranho, parece que não existe compressão ou não é squashfs. Em que sistema testou ? O firmware era para x86 ou arm ?

  8. #8 por cleitonbueno em maio 17, 2013 - 3:56 pm

    Sistema testei com Ubuntu 12.04 64Bits, Linux Mint 13 Maya 64Bits e em casa em uma VM Virtuabox com Debian 6 32Bits.
    Esqueci de manda o resto do binwalk:
    15568 0x3CD0 uImage header, header size: 64 bytes, header CRC: 0x3AE2AEED, created: Mon Mar 25 06:13:15 2013, image size: 32805 bytes, Data Address: 0×80010000, Entry Point: 0×80010000, data CRC: 0×71407091, OS: Linux, CPU: MIPS, image type: Firmware Image, compression type: lzma, image name: u-boot image

  1. Descomprimindo imagens de sistema | Djames Suhanko – Linux e Programação

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 499 other followers

%d bloggers like this: