BNET_H4$H
“Stay awhile and listen!“
No ultimo mes descobri que existem servers piratas de Diablo 2, eu conhecia o Diablo 3 online e joguei o 4 no ano passado, mas nunca parei pra pensar se existia algum server de Diablo 2. E sim, existem vários.
Fiquei sabendo por um amigo que existem alguns, inclusive um bem grande que é administrado por um brasileiro. Resolvi baixar por curiosidade pra entender como que funciona, pois até então, desde criança eu só tinha jogado o single player dele e o remaster que fizeram do Lords of Destruction, e que baita jogo é Diablo 2.
Inclusive um bom tempo atrás eu codei um script pra extrair alguns sprites do jogo.
Comecei a achar estranho que pra criar uma conta, não era possível criar pelo site, mas pelo site você pode logar e tem até um esquema de leilão bem interessante. Bom, fiz o cadastro aleatório pelo menu do jogo e criei um char.

Depois loguei no site e comecei a explorar as funcionalidades do site.

Vi que o back é em php, o usuário logado é controlado por um cookie PHPSESSID. E comecei a procurar juicy infos nos arquivos js, encontrei algumas rotas de rankings (geralmente é aqui que tem o ouro), mas foi na rota de detalhes dos clãs que encontrei o seguinte:

Vi que não tinha mais nada de interessante nos arquivos publicos do site e resolvi explorar o que tinha no banco

Achei curioso o nome do db "pvpgn", pesquisei no google e encontrei um site. Se trata de um código aberto pra você criar servers de Diablo. Guarda essa informação, lá na frente vamos conseguir explorar mais coisas...
Fui dando uma olhada nas tabelas e encontrei duas interessantes
![]() | ![]() |
Dei uma navegada na tabela web_users_access e encontrei o registro do meu usuário e confirmei que o valor da coluna php_session era o mesmo do meu cookie PHPSESSID.
Já a tabela pvpgn_BNET, eu resolvi procurar direto no código do servidor que tem disponível no github e associando uma coisa na outra a gente entende que essa é a tabela que são salvas as contas, ai entendi que deixaram pra criar a conta pelo client do jogo e não pelo site, simplesmente por conveniência.
Explorando mais um pouco a web_users_access, notei que tinham vários registros de acessos dos usuários, então fiz uma query na tabela buscando por usuários salvos como admins

Pelo nome da coluna da hash das senhas, eu presumi que elas fossem sha1, não tentei decriptar logo de cara, fui dar uma olhada no fonte do server pra ver como ele criava essa hash e encontrei a seguinte função

Eu não manjo nada de c++, o que fiz foi usar o que eu tinha a disposição. Fiz uma query no banco buscando pelo meu usuário e vi que a senha 123456 era o hash 3a9fb1381f4a6c0ec1a1f97a74bccea69aac8900. Então clonei o código do server, pedi para o claude code criar uma versão da função bnet_hash do c++ em python e fui adaptando até conseguir gerar a hash pelo script

Então fiz uma query no banco buscando pelo username e a hash da senha. Depois pedi novamente pro claude gerar um script de brute force com base numa wordlist simples:

A ideia era gerar uma hash pra cada senha da wordlist e comparar com a lista de usuários que eu encontrei no banco:

O claude deu uma colorida nos logs pra ficar maneiro, mas olha que engraçado. Uma dessas 467 senhas encontradas, era a senha de um usuário admin e a senha era 999.
Loguei na conta dele pelo jogo, mas infelizmente não tinha nenhum char criado, criei um e fui testar os comandos admin que tem no código do server mas parece que essa conta mesmo sendo admin, não tinha os privilégios desses comandos (coluna auth_command_groups)

No frontend é outra história, loguei nessa conta da senha 999 e acessei o painel de administração. Não fiz nada, mas lá dentro é possível enviar imagens (que inclusive tem como dar bypass na extensão 👀, entendedores entenderão), é possível transferir cash para jogadores, criar noticias com banners, eventos... enfim, as possibilidades de fazer m são grandes.

Reportei pro dono do server, ofereci ajuda pra explicar como corrigir, mas não recebi respostas até hoje, aparentemente o server ta parado tem no máximo 4 jogadores diários no server.
É isso, falous...


