Ignorando a criptografia do lado do cliente para ler arquivos internos do Windows Server

Dec 01 2022
Ei, mais uma vez sou eu abhishekmorla, Este blog é sobre como alguém pode quebrar a criptografia do lado do cliente com análise de código-fonte e pode ler arquivos internos do servidor Windows, ou seja, LFI, mas depois de ignorar uma camada de criptografia. com um programa digamos sub.

Ei, mais uma vez sou eu abhishekmorla,

Este blog é sobre como alguém pode quebrar a criptografia do lado do cliente com a análise do código-fonte e pode ler arquivos internos do Windows Server, ou seja , LFI , mas depois de ignorar uma camada de criptografia .
Então, criei um programa, digamos, sub.domain.com e as credenciais são fornecidas no escopo.

Durante o login, descobri que estava criptografando o nome de usuário e a senha

e mais tarde, descriptografando o nome de usuário para mostrar no front-end.
depois de pesquisar no Google, recebi este lindo blog de Sameer Bhatt “ https://bhattsameer.github.io/2021/01/01/client-side-encryption-bypass-part-1.html ", depois de passar por isso.
Em primeiro lugar capturei a solicitação de login no burp e comecei a pesquisar as variáveis ​​nas fontes, se o aplicativo usar alguma função javascript do lado do cliente para criptografar o nome de usuário e a senha, depois de pesquisar algumas palavras-chave, criei uma função chamada encryptData () que usa CryptoJS .

e o aplicativo não apenas usando criptografia simples, eles implementaram uma chave, iv, modo e preenchimento de acordo com a documentação dehttps://cryptojs.gitbook.io/
Agora, meu objetivo principal é encontrar a chave, iv valores para criptografar/descriptografar com sucesso nossos valores, comecei a pesquisar mais as fontes e, em seguida, criei outra variável chamada keyframe, que foi usada na parte de descriptografia. e essa é a chave secreta codificada usada para valores de chave e iv

Finalmente consegui descobrir que a chave e os valores iv nada mais são do que CryptoJS.enc.Utf8.parse(“secret_key”).
Instalei localmente o pacote npm e criei a mesma função usada no código-fonte,

const key = CryptoJS.enc.Utf8.parse("secret_key");
  const iv1 = CryptoJS.enc.Utf8.parse("secret_key");
  const encrypted = CryptoJS.AES.encrypt("C://Windows//System32//drivers//etc//hosts", key, {
    keySize: 16,
    iv: iv1,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted+""); // will give the encrypted value

  console.log("For decryption : ");
  var cipher = "KSxIfH6RWYGA==";
    const plainText = CryptoJS.AES.decrypt(cipher, key, {
        keySize: 16,
        iv: iv1,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    console.log(plainText.toString(CryptoJS.enc.Utf8)); // will give the decrypted value

e agora a parte interessante,
depois de um burp scan, criei um arquivo chamado “ ViewDocumentFile ” que possui um parâmetro de caminho que recebe um valor criptografado, após descriptografar com nosso arquivo JS acima, descobriu-se que é um caminho de um png que é D:\\website\\logo.png ,

Pesquisei no Google algumas cargas LFI baseadas em Windows e obtive C://Windows//System32//drivers//etc//hosts , fiz a criptografia e a passei para o parâmetro path e boom, podemos ler arquivos internos apenas quebrando alguma criptografia.

e é assim que a leitura de arquivos JS é uma parte importante do teste. (uma lição que aprendi em uma conferência de segurança).

obrigado por ler!

Linkedin:https://www.linkedin.com/in/abhishekmorla/

Twitter :https://twitter.com/abhishekmorla