• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bonucci

Sql-root

16 mensagens neste tópico

Boas pessoal, tenho aqui uma duvida, tenho andado a fazer um teste a um site de  um amigo meu tem alojado no servidor de casa dele com a sua autorização, e no site dele ele sofria de sql injection, consegui la aceder la a conta de administração dele no qual estava encriptado para md5, entre outras bd ele tinha para lá, tinha uma bd chamada mysql, estive a examinar e numa das colunas (users)  aparecia o user e a password, até aí tudo bem,  até que fiquei a estranhar  com a encriptação da password, pois pela sua apresentaçao parecia md5, mas levava 38 caracteres em vez de 32, e no inicio apresentava um asteristico, aqui está o exemplo de como estava apresentado :

User:Password:

root:  *EDBCCD31DFC6AE2D72527F9EE1101BB89E562371

Eu ainda sou muito noob em sql database, e n faço a minima que tipo de encriptação poderá ser ela...

Alguem faz ideia?

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aí estão 40 caracteres, não 38. Isso deve ser SHA-1, digo eu.

E já agora, que eu saiba, as pass's são normalmente passadas pela função de hash na aplicação (php/asp.net/jsp/wtv) e só a hash é que é depois enviada para a DB.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hummm, ta certo, bem, é mais uma coisa que n sabia, obrigado IceBrain

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Convinha pensarmos e lermos alguma coisa antes de perguntar-mos...

Sabendo que ele usa mysql podes obter na documentação oficial do mysql uma carrada de informação.

http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html

Saberias que por exemplo o MySQL guarda hashs (como seria de esperar), mas que não são apenas hashs da password, mas sim as hashs guardadas num formato especial (por exemplo começa sempre por um asterisco).

Se procurasses no Google também descobririas que a MySQL sempre utilizou os seus próprios algoritmos para gerar as hashs de passwords...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ops, my bad. Não li bem, por isso não percebi que era uma tabela interna, pensei que era de uma aplicação.

Mas não deixa de ser SHA-1:

Password functions

The Server Initialization Packet and the Client Authentication Packet both have an 8-byte field, scramble_buff. The value in this field is used for password authentication.

Relevant MySQL Source Code: libmysql/password.c, see also comments at start of file. It works thus:

remember that mysql.user.Password stores SHA1(SHA1(password))

Depois a autenticação é feita usando um token:

    *  The server sends a random string (scramble) to the client

    * the client calculates:

          o stage1_hash = SHA1(password), using the password that the user has entered.

          o token = SHA1(SHA1(stage1_hash), scramble) XOR stage1_hash

    * the client sends the token to the server

    * the server calculates

          o stage1_hash' = token XOR SHA1(mysql.user.Password, scramble)

    * the server compares SHA1(stage1_hash') and mysql.user.Password

    * If they are the same, the password is okay.

http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya, já percebi, obrigado

Já tive a falar com o meu amigo, a partir daí era cracker a hash e depois aceder á base, mas mesmo assim, dependendo de como é a pass demoraria uma eternidade para crackala, a não ser por rainbow tables, mas seria preciso um enorme espaço no disco e um supercomputador lol

Thanks IceBrain ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nem por isso, são normalmente alguns GBs, dependendo dos caracteres que queiras (só letras, letras e números, símbolos, etc) e podem encontrar uma match em algumas horas: http://www.codinghorror.com/blog/archives/000949.html

Por isso é que se deve "salgar" as hashes, coisa que já é feita pelo Unix Crypt desde '76, não é propriamente uma técnica nova. (http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html)

Mas também não é suposto alguém conseguir aceder às hash's dessa tabela. Devem-se criar users na DB que não tenham privilégios de acesso essa DB, para que uma injecção de SQL não lhes aceda na mesma (a não ser que consigam explorar um bug no mysql).

Mas já se sabe, IANASE (I am not a security expert :cheesygrin: ).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, tens ideia de algum programa ou até script bom para cracker md5 hashes, infelizmente n tenho tempo para criar raibowtables pois seria masi vantajoso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes experimentar o http://www.freerainbowtables.com/ , dizem que te deixam testar até 10 hashes /dia (online), mas eu nunca o usei (encontrei-o por acaso). Também podes descarregar as tabelas para o teu PC e testar as hashes que quiseres :cheesygrin:

Acho que o herakty também falou no Caim and Abel, que eu já usei uma vez, já nem me lembro para quê.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Cain and Abel é lento. Funciona mas é lento como o caraças... é bom para meter a correr num P I pu P II, que possa estar a trabalhar de dia e de noite.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Icebrain, acho que essa documentação que estás a citar está desactualizada. O algoritmo utilizado nas versões 4, já não é mesmo utilizado nas versões 5. Aliás isso menciona o 4.0, e no 4.1 já era diferente.

O MySQL até pode ter o seu algoritmo baseado em SHA1, mas o resultado da função password, não é definitivamente uma hash sha1, por diversas razões.

Bonuci, podes utilizar cloud computing para ter meios mais interessantes para te ajudar nisso.

Mas também não é suposto alguém conseguir aceder às hash's dessa tabela. Devem-se criar users na DB que não tenham privilégios de acesso essa DB, para que uma injecção de SQL não lhes aceda na mesma (a não ser que consigam explorar um bug no mysql).

Exacto!

Aliás há mesmo até quem vá ainda mais longe, e crie vários utilizadores com permissões distintas, uns apenas com permissões de modificação de dados e outros para consultas. E tudo para a mesma aplicação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cloud Computing?Falco podes explicar melhor, n conheço esse termo ou o seu proposito, n importas de explicar?

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Icebrain, acho que essa documentação que estás a citar está desactualizada. O algoritmo utilizado nas versões 4, já não é mesmo utilizado nas versões 5. Aliás isso menciona o 4.0, e no 4.1 já era diferente.

O MySQL até pode ter o seu algoritmo baseado em SHA1, mas o resultado da função password, não é definitivamente uma hash sha1, por diversas razões.

Tens a certeza? Eu não, mas não vejo nada no password.c que está no Doxygen da versão 5.1:

Pelo menos o make_scrambled_password() parece ser apenas um sha1(sha1(password)).

http://dev.mysql.com/sources/doxygen/mysql-5.1/libmysql_2password_8c.html#a707eb1415dfcf596f7acbcebdfccba4

Usam uma cadeia de valores aleatórios na scramble() e check_scrambled(), mas os comentários dizem que é só quando está a ocorrer a autenticação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não vi o código, mas foi o que interpretei da documentação do MySQL, de alguns posts de mailing lists oficiais e de posts em alguns fóruns.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora