tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

ECB

(ECB) Electronic Code Book - esquema de criptografia simétrica que substitui cada bloco do texto claro pelo bloco de texto cifrado. É o esquema de criptografia mais simples. A ideia principal é dividir o texto claro em blocos de N bits (depende do tamanho do bloco de dados de entrada, algoritmo de criptografia) e então criptografar (descriptografar) cada bloco do texto claro usando a única chave.

Usar ECB tem múltiplas implicações de segurança:

  • Blocos da mensagem criptografada podem ser removidos
  • Blocos da mensagem criptografada podem ser movidos

Detecção da vulnerabilidade

Imagine que você faz login em um aplicativo várias vezes e sempre recebe o mesmo cookie. Isso ocorre porque o cookie do aplicativo é <username>|<password>.
Então, você gera dois novos usuários, ambos com a mesma senha longa e quase o mesmo nome de usuário.
Você descobre que os blocos de 8B onde as informações de ambos os usuários são as mesmas são iguais. Então, você imagina que isso pode ser porque ECB está sendo usado.

Como no exemplo a seguir. Observe como esses 2 cookies decodificados têm várias vezes o bloco \x23U\xE45K\xCB\x21\xC8.

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9

Isto é porque o nome de usuário e a senha desses cookies continham várias vezes a letra "a" (por exemplo). Os blocos que são diferentes são blocos que continham pelo menos 1 caractere diferente (talvez o delimitador "|" ou alguma diferença necessária no nome de usuário).

Agora, o atacante só precisa descobrir se o formato é <username><delimiter><password> ou <password><delimiter><username>. Para fazer isso, ele pode apenas gerar vários nomes de usuário com nomes de usuário e senhas longos e semelhantes até encontrar o formato e o comprimento do delimitador:

Comprimento do nome de usuário:Comprimento da senha:Comprimento do nome de usuário+senha:Comprimento do cookie (após decodificação):
2248
3368
3478
44816
771416

Exploração da vulnerabilidade

Removendo blocos inteiros

Sabendo o formato do cookie (<username>|<password>), para se passar pelo nome de usuário admin, crie um novo usuário chamado aaaaaaaaadmin e obtenha o cookie e decodifique-o:

\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Podemos ver o padrão \x23U\xE45K\xCB\x21\xC8 criado anteriormente com o nome de usuário que continha apenas a.
Então, você pode remover o primeiro bloco de 8B e obterá um cookie válido para o nome de usuário admin:

\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4

Movendo blocos

Em muitos bancos de dados, é o mesmo procurar por WHERE username='admin'; ou por WHERE username='admin '; (Note os espaços extras)

Assim, outra maneira de se passar pelo usuário admin seria:

  • Gerar um nome de usuário que: len(<username>) + len(<delimiter) % len(block). Com um tamanho de bloco de 8B, você pode gerar um nome de usuário chamado: username , com o delimitador |, o bloco <username><delimiter> gerará 2 blocos de 8Bs.
  • Em seguida, gerar uma senha que preencherá um número exato de blocos contendo o nome de usuário que queremos imitar e espaços, como: admin

O cookie deste usuário será composto por 3 blocos: os primeiros 2 são os blocos do nome de usuário + delimitador e o terceiro da senha (que está falsificando o nome de usuário): username |admin

Então, basta substituir o primeiro bloco pelo último e você estará se passando pelo usuário admin: admin |username

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks